PIC16F876A nejde __delay_ms(500);

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

PIC16F876A nejde __delay_ms(500);

#1 Příspěvek od toMajstr »

Dobrý den, promiňte že zase otravuju, snažil jsem neprogramovat blikání ledkou pro PIC16F876A ale program se zastaví na prvním __delay_ms(500);
takže ledka svítí (když se dá první zhasnout ledku, tak zase zůstane zhaslá). Mám definovanou frekvenci krystalu, u PIC16F630 mi to šlo bez problému. Nevíte někdo čím to je?
edit: používám XC8 compiler

Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

#3 Příspěvek od toMajstr »

Ano simuloval, v real pic simulatoru a fungovalo to, tady je kód

Kód: Vybrat vše

/* 
 * File:   main.c
 * Author: TOSHIBA
 *
 * Created on 19. duben 2015, 18:22
 */

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <pic16f876a.h>

// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000

int main(int argc, char** argv) {
    ADCON1 = 0b00000110;
    CMCON = 0b00000111;
    TRISA = 0b00000000;
    PORTA = 0b00000000;
    while(1){
        PORTA = 0b00000001;
        __delay_ms(500);
        PORTA = 0b00000010;
        __delay_ms(500);
        PORTA = 0b00000000;
        __delay_ms(500);
    }
    return (EXIT_SUCCESS);
}

Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 02:00
Bydliště: Tábor
Kontaktovat uživatele:

#4 Příspěvek od Pawalo »

PWRTE zapnout, BOREN vypnout, LVP vypnout. nevidim nikde nastavení MCLR a na pin MLCR odpor 10k na VDD. a pak vyzkoušet. střílim jen od voka takže nic nezaručuju :)

Uživatelský avatar
Jeejda_teda_puvodne
Příspěvky: 142
Registrován: 08 dub 2012, 02:00

#5 Příspěvek od Jeejda_teda_puvodne »

Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 19:55, celkem upraveno 1 x.

Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

#6 Příspěvek od toMajstr »

Jak to vypnu? ale kód je snad dobrej když to šlo v simulátoru, ne?

Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 02:00
Bydliště: Tábor
Kontaktovat uživatele:

#7 Příspěvek od Pawalo »

PWRTE = ON
BOREN = OFF
LVP = OFF

k Cčku sem teda jen trochu přičmuchával, tak si nejsem tak uplně jistej ale hodnota do delay_ms nemá nějakou hranici ?? skus tam dát třebas 100 a udělat tich příkazů 5.

Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

#8 Příspěvek od toMajstr »

už to de, a když jsem to vrátil na 500 tak to de taky, asi nějaká anomálie :D

Uživatelský avatar
Jeejda_teda_puvodne
Příspěvky: 142
Registrován: 08 dub 2012, 02:00

#9 Příspěvek od Jeejda_teda_puvodne »

Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 19:56, celkem upraveno 1 x.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#10 Příspěvek od MiloPS3 »

spis bych rek ze se tam predava 8bit hodnota , coz pri hodnote 500 je prekroceno
a nebo taky ne , koukni se do helpu co tam pisou, nebo sem nasel ze je to omezeny podle pouzityho krystalu

Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

#11 Příspěvek od toMajstr »

Na PIC16f630 jsem měl stejnou frekvenci a delay 1 sekundu, takže tím to nebude, ne?

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#12 Příspěvek od MiloPS3 »

tak se koukni do disasembleru jak vypada delay...

Uživatelský avatar
Jeejda_teda_puvodne
Příspěvky: 142
Registrován: 08 dub 2012, 02:00

#13 Příspěvek od Jeejda_teda_puvodne »

Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 19:56, celkem upraveno 1 x.

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#14 Příspěvek od petrfilipi »

Jeejda píše:... 10 ms a sčítej, aspoň u toho bude MCU moct dělat i něco jinýho.
Jak to myslíš? Co to je "něco jiného"?
Podle mě je jedno, zdali máš delay 100x10ms nebo 1x1s. Řekl bych, že stejně můžeš odskočit jen do přerušení, a do toho odskočíš jak z čekání 10ms, tak 1s.

PF

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#15 Příspěvek od MiloPS3 »

nerek bych ze sou to kravyny, spis se nauci najit chybu ( a mozna i do budoucna) a nebude tu mozna tolik topiku ...

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“