Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

convertitore ADC PIC 16f876a instabile

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteGrio » 24 set 2014, 13:26

Salve
mi potete dare un aiuto per risolvere questo problema? Nel tentativo di comprendere il funzionamento dei convertitori ADC ho fatto diverse prove con uno 0804 poi sono passato ADC del PIC 16f876a ho realizzato un circuito di prova dove utilizzo la porta RA0 come ingresso analogico ed ho collegato un potenziometro multigiro da 1K, utilizzo il registro ANDRESH per avere una risoluzione a 8 bit da visualizzare sulla PORTC dove ho collegato 8 led.Il risultato è che i led si accendono e si spengono anche se la tensione ti ingresso non varia avrei bisogno di qualche indicazione pratica visto che mi sono letto e riletto tutto quello che ho trovato in rete e fatto varie simulazioni utilizzando anche Vref+ Vref- naturalmente cambiando i seggi di ADCON1.
questo è il File sorgente:


Codice: Seleziona tutto
;----------------------------------------------------------------------------------------------
; Prog. TERMGRI =confronto di due variabili,conteggio esa con pulsanti up/down e antirimbalzo
;----------------------------------------------------------------------------------------------
           
ERRORLEVEL -205
PROCESSOR 16F876A
RADIX DEC
INCLUDE "P16F876A.INC"
ERRORLEVEL -302
ERRORLEVEL -203

ERRORLEVEL -207

;      Setup del PIC configuratione word dei flags
;---------------------------------------------------
;Abilitato       HS x oscillatore a 20MHz
;Disabilitato    watch dog timer   WDT
;Abilitato       power up timer   PWRT
;Disabilitato    code protect     CP         

               __CONFIG 11111100110010b   
                                 
D_CONT       equ 20H
H_CONT       equ 21H
L_CONT       equ 22H
R_CONT      equ 23H
A_CONT       equ 24H
#DEFINE     LED             PORTA,1

START
ORG 00H      ;INDIRIZZO area PROGRAMMA ;Punto di inizio del programma al reset della CPU


               ;----------impostazione registro ADC del PIC ------------------

movlw 10000001b ;(bit7-6 definisce clok =Fosc/32 20MHz è l'unica frequenza efficace per la conversione a 8 bit )
            ;(5,4,3 definiscono RA0 ingresso analogico)(2 GO/DONE =1 inizio conversione 0=fine conversione)
movwf ADCON0    ;(0 ADON=1 abilita convertitore)


bsf STATUS,RP0  ;Commuta su Bank1 dei registri per accedere ai registri ADCON1,TRISA,TRISB e TRISC

movlw 00001110b ;ho optato per allineamento bit a sinistra (bit7 ADFM=0)quindi il registro ADRESH contiene 8bit
movwf ADCON1    ;e il registro ADRESL i restanti 2 bit del convertitore ADC che è ha 10 bit. i bit 3,2,1,0 sono ;=1110
            ;perche uso come tensione di riferimento il positivo e il negativo del'alimentazione del PIC

            ;-------------Definizione delle linee di I/O (0=Uscita, 1=Ingresso)----------------


            movlw   00110001b   ;Definizione della porta A
            movwf TRISA   
         
            movlw     00000000b   ;Definizione della porta B
            movwf TRISB
         
            movlw     00000000b   ;Definizione della porta C
            movwf TRISC


bcf STATUS,RP0      ;Commuta su Bank0 dei registri
                  

                  
;---------------------------------Inizio programma -----------------------------------------

;------------------------------------------------------------------------------------------------

call    Tempo_acquisizione
bcf PIR1,ADIF    ;bit7
bsf ADCON0,2    ;bit2 GO/DONE=1 avvia la conversione
btfsc ADCON0,2    ;verifica bit 2 GO/DONE se =0 conversione avvenuta
goto $-1

call Tempo_conversione


Movf     ADRESH,W
Movwf PORTC         ; sulla PORTC ho collegato 8 led per visualizzare il valore del registro         
goto START


; --------------------Ritardo per conversione ADC ------------------

Tempo_acquisizione   
movlw   255
movwf   D_CONT      
movlw   64
movwf   H_CONT
movlw   30
movwf   L_CONT

Loop
decfsz  D_CONT,F
goto   Loop
decfsz  H_CONT,F
goto   Loop
decfsz  L_CONT,F
goto   Loop
return   
;--------------------------------------------------------------------
;consente al condensatore interno al PIC di caricarsi completamente
Tempo_conversione
BSF LED   
      movlw   20
      movwf   R_CONT      
      decfsz  R_CONT,F
      goto   $-1
bcf LED
      return   

end
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07

0
voti

[2] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteWALTERmwp » 24 set 2014, 22:39

Ciao Foto UtenteGrio, ti invito ad inserire nel tuo prossimo Post lo schema elettrico del circuito (completo è meglio) in modo tale da poter visionare i collegamenti che avresti realizzato.
Ti chiedo intanto se, a parte RA0, gli altri pins sono collegati a qualche riferimento.

Nel codice invece prenderei in considerazione quanto segue:
i) dopo avere eseguito la scrittura sulla porta C evita di tornare alla label START; è sufficiente che riporti l'esecuzione del programma a
Codice: Seleziona tutto
call    Tempo_acquisizione
quindi no il loop su START
ii) quando fai l'assegnazione ad ADCON0 su che banco ti trovi ?
iii) la esecuzione di
Codice: Seleziona tutto
call Tempo_conversione
a cosa serve ?
Il commento l'ho visto ma non mi pare che occorra una ulteriore attesa; è sufficiente quella sopra, credo.
iv) col proposito di eliminare qualche "variabile" e qualche incertezza assegna ad RA0 un valore di tensione sicuro e stabile, magari direttamente la tensione di alimentazione che, se non erro, corrisponde al limite di riferimento che hai scelto nella configurazione.
v) non ho controllato i tempi previsti per l'acquisizione e quelli che hai stabilito con i loop, quindi per questi, al momento, non ti posso scrivere nulla; mi riservo comunque di dargli un'occhiata.

Questo è quanto, per ora.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteGrio » 25 set 2014, 12:33

Ciao WALTERmwp ti ringrazio per la disponibilità.
per quanto riguarda" call Tempo_conversione" è stato il tentativo estremo per dare ulteriore tempo al condensatore di Chold del PIC comunque l'ho esclusa, le periferiche collegate alla portB le ho rimosse ho alimentato con tensione diretta il pin RA0, considera che l' alimentatore è quello di un vecchio PC,misurando la tensione con il tester rilevo un valore che va da 5.09 a 5.11,come simulatore uso MPLAB IDE v8.63 e da questo vedo il bit GO/DONE avvia la conversione e torna 0 a conversione avvenuta.
i led della portC continuano a lampeggiare con sequenza irregolare.
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07

0
voti

[4] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteWALTERmwp » 25 set 2014, 14:08

Come ti ho scritto prima potresti riportare lo schema del circuito.
Utilizza gli strumenti di riferimento del sito: scarica FidoCad e o FidoCadJ (questo funziona con Java).
Più informazioni si mettono a disposizione e maggiori sono le possibilità di trovare, insieme, l'inconveniente.
Per l'inserimento del disegno in un Post ti suggerisco la lettura della "Guida all'uso del Forum" (vedi l'Help).
Se hai qualche dubbio in merito, chiedi pure.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[5] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteGrio » 26 set 2014, 9:07

come puoi vedere ho ridotto al minimo i collegamenti con il PIC , considera che ho sostituito il PIC con uno nuovo , collegato i led alla PORTB il risultato è lo stesso
saluti
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07

0
voti

[6] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteGrio » 26 set 2014, 11:02

mi dispiace ma mi ero dimenticato di inserire il trimmer nello schema
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07

0
voti

[7] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteWALTERmwp » 26 set 2014, 12:07

Non vedo collegamenti agli altri pin(s) della porta A, ma te ne avevo scritto.
Lasciamo da parte qualche esitazione e prova a collegarli con una resistenza di pull-down.
Nel codice non mi pare vi siano delle anomalie ma oltre a quanto già ti avevo scritto vorrei sapere per quale motivo vai ad azzerare il bit associato all'interrupt se comunque questo non lo gestisci; niente di "male", si tratta più che altro di stabilire se quello che viene scritto è fatto in modo consapevole ... mentre io, invece, spero di non averti riportato, "inconsapevolmente", delle inesattezze.

Altre due note:
i) se non ti occorre quella luminosità aumenta il valore delle R da 470 ohm portandole a 1 K ohm.
ii) nello schema non c'è quindi, aggiungi un condensatore da 100 nF ( ... il classico) tra il pin di alimentazione (il più vicino possibile al pin stesso) del microcontrollore e la massa.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[8] Re: convertitore ADC PIC 16f876a instabile

Messaggioda Foto UtenteGrio » 26 set 2014, 14:50

i pin collegati al momento con il PIC sono quelli dello schema , il tutto è montato su una basetta millefori ed
il condensatore non l'ho montato perché mi sono dimenticato .per quanto riguarda l'istruzione "bcf PIR1,ADIF"
mi è rimasta nel programma, il progetto completo prevede leggere una temperatura con LM35 ,confrontare due variabili una acquisita una impostata al fine di comandare dei relè e visualizzare le variabili con display led a 7 segmenti.Una buona parte di tutto questo l'ho gia fatta quello che non riesco a comprendere è ADC ,considera che sto lavorando su questo progetto da diverso tempo .
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti