La configuración actual se muestra a continuación. PIC12F1822 con un ADC de 10 bits.
Estoyusandounaresistenciadeprecisiónde250R0.05%paraobtenerunabuenaentradade0-5Valpinanalógico(AN2siesimportante).Porloquesé,tengoelladocorrectodelsoftware,peromostrarélaspartesrelevantesdelcódigoenlaparteinferior.
Presionolosresultadosdeconversión(ADRESHyADRESL)directamentealpinSPISDOqueséquefuncionacorrectamente.
Elproblemaesqueparaunaentradade0mA(ambosterminalesdeentradaconectadosatierra)obtengounasalidade0000110011(51dec).Conmifuenteactualconectadayconfiguradalomásbajaposible,aproximadamente34.6mVatravésdelaresistencia,obtengounresultadode0000111010(58dec).Unvalorde58decimaldebecorresponderaunvoltajedeentradade0.283Vquedaunvalorbastantealto
Estoyluchandoparaverporquéhayunacompensacióndealrededordel5,6%.¿Eslaconfiguracióninternaunacausapotencial?
Está configurado para usar Vdd y Vss como los voltajes de referencia, tiene un reloj de conversión de Fosc / 2 (250 kHz) y el módulo ADC se enciende durante una rutina de inicio.
Código relevante:
ADC_CONV
banksel ADCDATAH
clrf ADCDATAH
banksel ADCDATAL
clrf ADCDATAL
banksel ADCON0 ;
bsf ADCON0,ADGO ;Set ADGO conversion start bit
CONVTEST clrwdt ;Clear Watchdog Timer
call DELAY ;Short delay
btfsc ADCON0,ADGO ;If conversion finished skip next instr
goto CONVTEST ;Conversion not yet finished
call DELAY
banksel ADRESH ;
movf ADRESH,0 ;Move the upper bits of conversion to W
banksel ADCDATAH
movwf ADCDATAH ;W to ADCDATAH
banksel ADRESL ;
movf ADRESL,0 ;Move the lower bits of conversion to W
banksel ADCDATAL
movwf ADCDATAL ;W to ADCDATAL
return
SPI_ADC_TRANSMIT
banksel PORTA
bcf CS ;Select DAC slave to receive data (16 bits)
banksel ADCDATAH
movf ADCDATAH,0 ;Move SPIDATAH data to W
banksel SSP1BUF
movwf SSP1BUF ;W to SSP1BUF
call DELAY ;Call delay (must be >8 inst cycles)
;
banksel ADCDATAL
movf ADCDATAL,0 ;Move SPIDATAL data to W
banksel SSP1BUF
movwf SSP1BUF
call DELAY
banksel PORTA
bsf CS
return
¿Debo encender el módulo ADC solo cuando realizo una conversión? Su único propósito es como un ADC, así que no vi ningún punto en apagarlo ya que el uso de energía no es un problema.