Newsgroup: it.hobby.elettronica.digitale
Titolo: Pic 16f876a, un aiuto con l'ADC

Salve a tutti, sto usando un pic 16f876a e devo eseguire delle conversioni
analogico-digitale. Io da programma ho settato che non si usassero i piedini
+Vref e -Vref cioè internamente il micro prende +Vref=5V e -Vref=0
(alimento a 5 V).
Facendo un po' di prove però sembrerebbe che invece il micro utilizzi i
piedini +Vref e - Vref ( che sono già impiegati uno come ingresso e uno come
uscita) e quindi mi sbaglia le conversioni e questi valori non sono stabile
perchè il piedino -Vref è usato nella comunicazione con un display.
Sapete darmi una mano?? Grazie Paolo 

 (alimento a 5 V).
difficile, senza essere mago merlino, capire di che linguaggio e ambiente di 
programmazione stai parlando...
-- 
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking 
at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere 
via mail)

Programmo in assembler e lavoro con l' MPLAB IDE v7.41 fornito dalla 
microchip.
"Simone Bern" <artų@iolų.itų> ha scritto nel messaggio 
news:ev87tp$40s$1...@tdi.cu.mi.it...


 microchip.
datasheet, DS39582B-page 128, c'è tutto il necessario per programmare 
correttamente REGISTER 11-2: ADCON1 REGISTER. Nello specifico, vedi la 
tabella sotto al testo:
bit 3-0 PCFG3:PCFG0: A/D Port Configuration Control bits
scegli la configurazione dei tuoi ingressi (A=analogico, D=digitale), e i 
vari REF.
Per esempio, se usi solo AN0, scelgi la penultima riga della tabella, 
ponendo i vit 3-0 a 1110.


 datasheet, DS39582B-page 128, c'č tutto il necessario per programmare 


 problema.
ah.. ho capito. Bè, io li uso da una decina d'anni, e seguendo i datasheet, 
generalmente il micro fa quello che deve fare. Le poche eccezioni che ho 
riscontrato sono state risolte ad una seconda lettura del datasheet...
Posta il codice, posta lo schema in fidocad, posta le misure, che cerchiamo 
di capire dov'è il guaio.


 cerchiamo di capire dov'č il guaio.


 micro prenda il riferimento a +Vdd e - Vss).
[...]
Dopo avere selezionato il canale sul quale effettuare la lettura,
rispetti le tempistiche di campionamento e conversione richieste dall'hw ?
Per fare una prova potresti provare ad inserire ritardi elevati, che ti 
mettono
al sicuro da questo tipo di problema, per poi ridurre i tempi una volta 
risolto l'inghippo.

Roberto P. ha scritto:

Ciao,
per caso non e' che spegni il convertitore A/D a fine conversione?
Non so se puo' aiutarti, ma spegnere e accendere il convertitore puo' 
creare un problema simile.
Angelo

"marcoangelo" <marcoangelo.r_NOSPAM_@_NOSPAM_alice.it> ha scritto nel 
messaggio news:4617f894$0$36448$4faf...@reader5.news.tin.it...

secondo me dovrebbe postare la parte del listato che si occupa della lettura 


Provo a postare la parte di programma in assembler che si occupa 
dell'aggiornamento dei miei sensori nel mio progetto, Ho tre sensori 
collegati a RA0, RA1 e RA3:
Nel main viene chiamata la  routine SENSORI che appunto si occupa della 
conversione A/D di tutti i sensori collegati
SENSORI
    banksel ADCON1
    movlw 10000100b            ;il dato è right justified, lavoriamo a 
Fosc/16 e i sensori si trovano
    movwf ADCON1               ;sui pin 0,1,3 della porta A
    banksel ADCON0
    movlw 10000001b            ;  41h   seleziono il canale 0 per la 
conversione e accendo il convertitore
    movwf ADCON0
    bcf   PIR1,6                       ;disabilito gli interrupt provenienti 
dal convertitore stesso
    banksel PIE1
    bcf   PIE1,6
    banksel cicli
    call  ATTESA_1M              ;resta in attesa per circa 1ms necessario 
come tempo di acquisizione del convertitore
    bsf   ADCON0,2                ;parte la conversione
SENSORI_1
    btfsc ADCON0,2               ;attendi che termini la conversione di 
temperatura
    goto  SENSORI_1
    banksel ADRESL
    movf  ADRESL,0
    banksel ADRESH
    movwf temp_l
    movf  ADRESH,0               ;salva la conversione di temperatura nei 
registri
    movwf temp_h
    bsf   ADCON0,3               ;seleziona il canale 1 per la conversione 
di umidità
    call  ATTESA_1M
    bsf   ADCON0,2           ;parte la conversione
SENSORI_2
    btfsc ADCON0,2
    goto  SENSORI_2            ;attendi che termini la conversione di 
umidità
    banksel ADRESL
    movf  ADRESL,0
    banksel ADRESH
    movwf umid_l
    movf  ADRESH,0              ;salva la conversione di umidità nei 
registri
    movwf umid_h
    bsf   ADCON0,4            ;seleziona il canale 4 per la conversione di 
pressione
    call  ATTESA_1M           ;resta in attesa per circa 1ms necessario come 
tempo di acquisizione del convertitore
    bsf   ADCON0,2              ;parte la conversione
SENSORI_3
    btfsc ADCON0,2
    goto  SENSORI_3           ;attendi che termini la conversione di 
pressione
    banksel ADRESL
    movf  ADRESL,0
    banksel ADRESH
    movwf pres_l
    movf  ADRESH,0           ;salva la conversione di umidità nei registri
    movwf pres_h
    bcf   ADCON0,0
    return
Sono a disposizione per qualsiasi chiarimento 

Ciao,
non ho verificato i banchi e i nomi dei flag, ma la procedura mi sembra 
corretta.
Non capisco...
Hai provato ad applicare in ingresso qualcosa di diverso dai sensori, 
tipo un semplice partitore fatto con un potenziometro e vedere cosa 
converti?
Ciao,
Lucio
Paolo ha scritto:


Ragazzi grazie a tutti per l'aiuto ma ho risolto. Alla fine è risultato 
essere qualcosa sul circuito che era realizzato su breadboard. Ho rifatto il 
circuito e ora funziona tutto magicamente.
Grazie
Paolo