Problema con PIC16F876

Oct 26, 2005 22 Replies

Salve a tutti ho fatto un programmino banale per accendere e spegnere 2 led su RC0 e RC1 di un PIC16F876 in PICC:



#include #include #define XTAL_FREQ 4MHZ #include "delay.c"



main(){ TRISC=0b11000000; //setta I/O PORTC



while(1){ ComUnita=1; ComDec=1; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); RC0=0; RC1=0; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); } }



il problema è che sull'uscita del pic la tensione che leggo senza nulla attaccato è 0V quando è "0" e 0.69V quando è a "1" e quindi i led non si accendono. Ho provato a cambiare RC0 e RC1 con altre 2 uscite del portB e i led si accendono senza problemi. Da cosa dipende questo problema? Grazie



questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

"NeMeSi" ha scritto nel messaggio news:djn5va$hm9$ snipped-for-privacy@news.newsland.it...

Nel listato sopra, quando è che metti a 1 i portC ?

Scusa ho fatto male il copia/incolla ComUnità e ComDec erano RC0 e RC1:

#include #include #define XTAL_FREQ 4MHZ #include "delay.c"

main(){ TRISC=0b11000000; //setta I/O PORTC

while(1){ RC0=1; RC1=1; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); RC0=0; RC1=0; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); } }

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

"NeMeSi" ha scritto:

Prova a fare:

Invece di queste due righe metti: PORTC=0x03;

Invece di queste altre metti: PORTC=0x00;

Michele ha scritto:

Questo è solo lo stralcio di un programma con il quale devo poter controllare ogni singolo bit della porta quindi non posso e poi il cambiamento di stato lo fà è solo che i valori di tensione sono bassi e cono capisco perchè!! Non è neanche il pic rotto perchè l'ho provato anche con uno nuovo.

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

NeMeSi ha scritto:

Hai impostato correttamente tutti i fuse?

Marco / iw2nzm

"NeMeSi" ha scritto nel messaggio news:djnc6d$6ps$ snipped-for-privacy@news.newsland.it...

Controlla di non aver impostato T1CON.T1OSCEN, altrimenti RC0 e RC1 diventano input, indipendentemente da come setti il TRISC. Controlla anche le impostazioni relative al pwm (se lo usi)

Marco Trapanese ha scritto:

I fuse li programmo da EPICWin e ho messo: Power-up timer enable e brown-out reset enable il resto tutto disattivato e quarzo XT. La cosa strana è che lo stesso programma lo compilo e lo provo su un

16F877 e tutto funziona.
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

"NeMeSi" ha scritto:

Guarda che facendo PORTC=0xZY controlli lo stesso ogni singolo bit e lo fai con un'istruzione sola! Comunque segui il consiglio di Roberto P. vedi se hai impostato altre cose!

T1CON.T1OSCEN non l'ho modificato e di default è a 0 e il PWM non lo uso quindi è tutto nello stato di default.

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

Michele ha scritto:

Si ma se ad esempio io devo cambiare RC1 passando da 0 a 1 senza sapere in che stato sono gli altri bit della porta come faccio??

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

NeMeSi ha scritto:

PORTC |= 0x02;

Marco / iw2nzm

NeMeSi ha scritto:

Fai un OR/AND con una maschera. Es. settare RC0 RC0=RC0||0x01 Resettare RC1 RC1=RC1&&0xFD Se non ho sbagliato i conti ;-)

Ciao Diego

Diego Marson ha scritto:

Ma non è molto più semplice e comprensibile un RC1=0; o RC1=1????

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

NeMeSi ha scritto:

Forse si, ma con le maschere è più veloce (quando prendi mano) e puoi fare settaggi su più bit in un colpo solo. Poi comunque credo che il compilatore, quando scrivi rc1=0 non faccia altro che fare un and bit a bit con una maschera.

Ciao Diego

"NeMeSi" ha scritto nel messaggio news:djngfk$mh8$ snipped-for-privacy@news.newsland.it...

Infatti, deve funzionare anche così. Nel tuo sorgente includi in 'pic.h', ha le impostazioni dei registri corrette per il 16f876 ? Non è che usi la versione lite che compila solo per il 16f84 ?

RC0 RC1 sono anche i pin SCL e SDA della periferica I2c... La hai disabilitata??? Non ricordo se di default e' disabilitata, mi sembra di si, ma potrebbe essere quello il problema e visto che non hai ancora risolto... i miei 2 cents. ciao Angelo

"MarcoAngelo" ha scritto nel messaggio news:435f4fa2$0$24637$ snipped-for-privacy@reader3.news.tin.it...

SCL e SDA sono RC3 e RC4

Roberto P. ha scritto:

No uso la versione completa. La cosa da tenere in considerazione e che ho scritto nel primo post è che il cambiamento di stato lo fa ma i valori di tensione che leggo per lo stato logico 1 sono 0.69V e quindi troppo bassi.

questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it

"NeMeSi" ha scritto nel messaggio news:djnl5d$a0t$ snipped-for-privacy@news.newsland.it...

Banale, ma hai provato con un'altro pic ? Hai messo un carico sulle porte ? Nel caso, puoi provare anche con un led + 470ohm e verificare cosa succede se lo colleghi con l'anodo al port (per provare la chiusura verso 0) o il catodo al port (per provare la chiusura verso vcc) Provato a disabilitare il wdt (ferse l'uscita cambia troppo rapidamente e non riesci a vederlo con il tester, hai possibilità di verificare con l'oscilloscopio ?)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required