Pagina 1 di 1

Problema PIC16F876A e LM35

MessaggioInviato: 24 mag 2012, 17:48
da alle588
ciao ragazzi ho un problema....voglio leggere la temperatura dall'lm35 ma non riesco a leggerla perché secondo me sbaglio configurazione dei registri ADCON0 e ADCON1

Codice: Seleziona tutto
ADCON0 = 0b10011000;
ADCON1 = 0b10001111;


i dati li leggo dal pin5 del PIC ovvero AN3
mentre quando voglio leggere la temperatura che è di circ 25mV (dipende dai casi poi)
faccio cosi:
Codice: Seleziona tutto

void Rileva_Temperatura()
{
        int Temp;
        DelayMs(20);
        ADGO = ON //ON = 1 OFF = 0
        while ( ADGO )  continue
        Temp = ADRESL + (ADRESH << 8) * 5
        //RESETTO IL REGISTRO ADCON0
        ADCON0 = 0b10011000;
        Manda_Temperatura ( Temp ); // La mando su seriale
       return;
}



e invece questa è la funzione per inviare la temperatura su seriale
ma secondo me Temp non assume nessun valore perché quando provo ad inviare su seriale dopo averlo convertito in vettore di caratteri è = 0....per favore aiutatemi che è una cosa di scuola e devo finirlo per la settimana prossima

Re: Problema PIC16F876A e LM35

MessaggioInviato: 29 mag 2012, 7:56
da Paolino
Prova a dare un'occhiata a questo articolo.

Attenzione che quando scrivi:
Codice: Seleziona tutto
        ADGO = ON //ON = 1 OFF = 0

hai dimenticato un ";" alla fine della riga. Va corretto così:

Codice: Seleziona tutto
        ADGO = ON; //ON = 1 OFF = 0


Infine: che compilatore usi? Puoi farci vedere lo schema? Usa FIdoCADJ per disegnarlo.

Ciao.

Paolo.

Re: Problema PIC16F876A e LM35

MessaggioInviato: 29 mag 2012, 19:32
da Kirkegaard
Se utilizzi l'ingresso analogico AN3 la configurazione dei registri non è corretta.

Da datasheet del micro leggo che I primi 4 bit del registro ADCON1 sono PCFG3:PCFG0: A/D Port Configuration Control bits.

se li metti tutti a 1 come indicato

ADCON0 = 0b10011000;
ADCON1 = 0b10001111;

configuri la porta AN0 come ingresso Analogico e AN3 come ingresso per la Vref.
Per il resto questa è la sequenza che la Microchip consiglia di effettuare per la corretta conversione

To do an A/D Conversion, follow these steps:
1. Configure the A/D module:
• Configure analog pins/voltage reference and
digital I/O (ADCON1)
• Select A/D input channel (ADCON0)
• Select A/D conversion clock (ADCON0)
• Turn on A/D module (ADCON0)
2. Configure A/D interrupt (if desired):
• Clear ADIF bit
• Set ADIE bit
• Set PEIE bit
• Set GIE bit
3. Wait the required acquisition time.
4. Start conversion:
• Set GO/DONE bit (ADCON0)
5. Wait for A/D conversion to complete by either:
• Polling for the GO/DONE bit to be cleared
(interrupts disabled); OR
• Waiting for the A/D interrupt
6. Read A/D Result register pair
(ADRESH:ADRESL), clear bit ADIF if required.
7. For the next conversion, go to step 1 or step 2
as required. The A/D conversion time per bit is
defined as TAD.


fammi sapere....