Dopo una piccola pausa dovuta principalmente al bel tempo che ha finalmente permesso di fare qualche ripresa ( ... era ora

! ), sono tornato alle verifiche funzionali dell'ADC.
Ho controllato tutti i collegamenti tra i pin dell'ADC, il processore e gli altri componenti e non ho trovato anomalie. Sembra tutto collegato correttamente, senza corti o interruzioni.
Ho solo trovato un piccolo errore nello schema, che ha causato la generazione di una pista sbagliata sul PCB. Non ho ancora analizzato nel dettaglio il problema perchè è relativo al front-end dell'ADC, ma mi riprometto di documentarlo e di indicare la modifica da fare in un prossimo post.
Ho scritto, in Crownhill Proton+ Basic, un piccolo programma con cui fare il test dell'ADC, di cui allego il codice. Ogni decimo di secondo il programma fa eseguire all'ADC un campionamento e spedisce al PC, tramite la porta seriale, il byte alto del valore a 16 bit misurato.
Mettendo temporaneamente in corto, tramite una resistenza di basso valore, gli ingressi differenziali dell'ADC, se tutto funziona come deve, mi aspetto di vedere, tramite HyperTerminal, una sequenza di valori attorno allo zero, che cambiano toccando uno dei due ingressi.
Staremo a vedere ....

!
Codice:
'
' Programma di test del convertitore ADC ADS8422
' Il byte alto del valore a 16 bit letto dal convertitore, viene trasferito sulla linea seriale
' per lettura con Hyper Terminal ogni decimo di secondo
' Settaggio della porta : 57K-8-N-1
'
' PIN UTILIZZATI :
'
' Port A *****************
'
' Port B *****************
'
' Port C *****************
' RC0 : BUSY **** pin 15
' RC1 : RD/CS **** pin 16
' RC2 :
' RC3 :
' RC4 :
' RC5 : BYTE **** pin 24
' RC6 : Tx232 **** pin 25
' RC7 : Rx232 **** pin 26
'
' Port D *****************
' RD0 : D0 **** pin 19
' RD1 : D1 **** pin 20
' RD2 : D2 **** pin 21
' RD3 : D3 **** pin 22
' RD4 : D4 **** pin 27
' RD5 : D5 **** pin 28
' RD6 : D6 **** pin 29
' RD7 : D7 **** pin 30
' Port E *****************
' RE0 :
' RE1 :
' RE2 : CONVST **** pin 10
DEVICE = 18F4525 ' Utilizzo il PIC 18F4525
XTAL = 20 ' Quarzo da 20 Mhz
'
' Impostazioni della comunicazione seriale
'
HSERIAL_BAUD = 57600 ' Set baud rate to 57600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100100 ' Enable transmit and asynchronous mode (BRGH=1)
HSERIAL_CLEAR = ON ' Optionally clear the buffer before receiving
'
' PortC
'
TRISC.0 = 1 ' RC0 è di input ( segnale BUSY dell'ADC ) - pin 15
TRISC.1 = 0 ' RC1 è di output ( segnale RD/CS dell'ADC ) - pin 16
TRISC.5 = 0 ' RC5 è di output ( segnale BYTE dell'ADC ) - pin 24
'
SYMBOL BUSY PORTC.0 ' BUSY = Conversione in corso
SYMBOL RDCS PORTC.1 ' RDCS = Read + Chip Select (tri-state dell'ADC)
SYMBOL BYT PORTC.5 ' BYT = Selezione byte alto/basso del valore
'
' PortD
'
TRISD = %11111111 ' Tutta la porta D è di Input
'
SYMBOL D0 PORTD.0 ' D0
SYMBOL D1 PORTD.1 ' D1
SYMBOL D2 PORTD.2 ' D2
SYMBOL D3 PORTD.3 ' D3
SYMBOL D4 PORTD.4 ' D4
SYMBOL D5 PORTD.5 ' D5
SYMBOL D6 PORTD.6 ' D6
SYMBOL D7 PORTD.7 ' D7
'
' PortE
'
TRISE.2 = 0 ' RE2 è di output ( segnale CONVST dell'ADC ) - pin 10
'
SYMBOL CONV PORTE.2 ' CONV = Start conversion
DIM VAR1 BYTE
'
HRSOUT "testing"
'
' Reset dei pin dell'ADC :
CONV = 1 ' CONV = 0 start della conversione
BYT = 0 ' se Byte=0 D[8:15] contiene il byte alto del valore
RDCS = 1 ' Output Hi-z
Loop:
CONV = 0 ' Start della conversione
DELAYUS 1 ' Attende un micro secondo
CONV = 1 ' Reset di CONV **
'
Cove: IF BUSY = 1 THEN ' Controlla lo stato di BUSY
GOTO Cove ' Busy rimane 1 finche' dura la conversione
ENDIF ' Conversione terminata : Busy = 0
'
RDCS = 0 ' Mette i valori in output e lo abilita
DELAYUS 1 ' Attende un micro secondo
VAR1 = PORTD ' Memorizza su VAR1 il valore letto da PORTD
RDCS = 1 ' Output vanno Hi-z
HRSOUT DEC VAR1 ' Trasmette il valore letto sulla porta
HRSOUT 13 ' CR
HRSOUT 10 ' LF
'
DELAYMS 10 ' Attende un decimo di secondo
GOTO Loop ' Loop forever