Pagina 1 di 4

PIC difettosi o errori nei programmi?

MessaggioInviato: 8 giu 2013, 19:18
da Matteo1991
Salve, è da un po' che cerco di far funzionare un mio progetto con un PIC16F883 ma ho dei problemi.
Alla fine ho deciso di provare con un led, ovvero farlo lampeggiare dal PIC in questione.....
se metto il led su RC7 è scrivo:
Codice: Seleziona tutto
#include <xc.h>
#pragma config FOSC = XT /*oscillatore esterno*/
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma MCLRE = ON
#define _XTAL_FREQ 4000000

void main(void)
{
    TRISCbits.TRISC7 = 0;
    while(1) {/*never ending cycle*/
        PORTCbits.RC7=1;
__delay_ms(1000);
        PORTCbits.RC7=0;
__delay_ms(1000);
}
}

Il led lampeggia che è una meraviglia, ma se provo a cambiare porta (ovvero metto il led in RB5 (ho provato in tutte le porte di PORTB...) non funziona:
Codice: Seleziona tutto
#include <xc.h>
#pragma config FOSC = XT /*oscillatore esterno*/
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma MCLRE = ON
#define _XTAL_FREQ 4000000

void main(void)
{
    TRISBbits.TRISB5 = 0;
    while(1) {/*never ending cycle*/
        PORTBbits.RB5=1;
__delay_ms(1000);
        PORTBbits.RB5=0;
__delay_ms(1000);
}
}


Ho due PIC identici che danno lo stesso identico problema.... ?% cosa può essere?

Re: PIC difettosi o essori nei programmi?

MessaggioInviato: 8 giu 2013, 20:07
da TardoFreak
E' il solito problema, trito e ritrito :D
Alcuni I/O, dopo il RESET, sono configurati come ingressi analogici.
Nel datasheet c'è scritto ed è bene in vista.

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 8 giu 2013, 22:09
da Matteo1991
Vero! adesso funge tutto! va sistemato il registro ANSELH! :D
Grazie

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 9 giu 2013, 19:06
da Matteo1991
perché se scrivo:
Codice: Seleziona tutto
PORTBbits.RB0 = 0;
__delay_ms(1000);
PORTBbits.RB0 = 1;
__delay_ms(1000);

il led lampeggia, ma , se scrivo:
Codice: Seleziona tutto
PORTB = 0b00000000;
__delay_ms(1000);
PORTB = 0b00000001;
__delay_ms(1000);

il led non lampeggia?

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 9 giu 2013, 20:45
da TardoFreak
Nel primo caso setti/resetti un singolo bit.
Nel secondo caso imposti il valore a tutti gli 8 bit della porta.

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 9 giu 2013, 22:35
da Matteo1991
Si lo so, ma , perché nel primo caso il led lampeggia e nel secondo no?

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 9 giu 2013, 22:37
da TardoFreak
Non saprei. Sono rimasto a quando il LED era collegato al bit 5.

Hai cambiato circuito? :-M

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 10 giu 2013, 12:41
da Matteo1991
Lavorando sul registro portB, il problema si presenta su qualsiasi bit!
mi spiego meglio se devo far lapeggiare il bit3 se scrivo
perché se scrivo:
Codice: Seleziona tutto
  PORTBbits.RB3 = 0;
    __delay_ms(1000);
    PORTBbits.RB3 = 1;
    __delay_ms(1000);

il led lampeggia, lasciando lo stesso circuito ma caricando il programma che contiene al posto del precedente frammento di codice, il seguente:
Codice: Seleziona tutto
    PORTB = 0b00001000;
    __delay_ms(1000);
    PORTB = 0b0000000;
    __delay_ms(1000);

il led non lampeggia.....

A volte però succede che il PIC sembra non voler proprio partire (carico il programma più volte, poi parte....) non vorrei fosse un problema del pickit3...

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 12 giu 2013, 2:04
da claudiocedrone
:-) Codice e configurazione a parte, sei sicuro al 100% che lo hardware sia a posto ? (Connessioni, alimentazione etc.) O_/

Re: PIC difettosi o errori nei programmi?

MessaggioInviato: 12 giu 2013, 11:49
da Shockwaver
Solo dopo aver seguito il consiglio di Foto Utenteclaudiocedrone, faresti un tentativo con i registri LAT?
Codice: Seleziona tutto
LATB = 0b00001000;
__delay_ms(1000);
LATB = 0b0000000;
__delay_ms(1000);


in passato ho avuto problemi con i registri PORT per quanto riguarda le scritture degli output e da allora li ho usati solo per leggere gli ingressi.

[OT]
ove presenti utilizzate sempre i corrispettivi registri SET INV e CLR, l'operazione risulterà atomica invece che la classica read-modify-write per la scrittura di un registro.
[/OT]

Edit: ma ti sei ricordato di modificare i corrispettivi bit nei registri TRIS e ANSEL per dichiararlo come output digitale?