Dåliga resultat från 10bit A/D dsPIC30F4011
Postat: 31 december 2005, 10:39:47
Jag får dåliga resultat från dsPIC A/D, här är förutsättningarna och en typisk mätning.
PIC är avkopplad med en 100nF konding. Sampling triggas manuellt var 100e ms. I övrigt är det bara ICD2 och en LCD som är kopplad till PIC.
Tad=280ns
Samplingstid=2*Tad
Vref- = AVss = Vss = 0V
Vref+ = AVdd = Vdd = 5,01V (alla spänningar uppmätta med en kalibrerad fluke 179)
Ch1+=538mV
Ch1-=Vref-
källimpedans=1kohm
resultat=100
förväntat resultat=110
Enligt databladet så är min. samplingstid Tad, min. Tad=256ns, max källimpedans 5kohm. Se dsPIC30F family reference manual s. 437
Att öka samplingstiden eller konverteringstiden hjälper inte. Förslag på vad som kan vara galet?
PIC är avkopplad med en 100nF konding. Sampling triggas manuellt var 100e ms. I övrigt är det bara ICD2 och en LCD som är kopplad till PIC.
Tad=280ns
Samplingstid=2*Tad
Vref- = AVss = Vss = 0V
Vref+ = AVdd = Vdd = 5,01V (alla spänningar uppmätta med en kalibrerad fluke 179)
Ch1+=538mV
Ch1-=Vref-
källimpedans=1kohm
resultat=100
förväntat resultat=110
Enligt databladet så är min. samplingstid Tad, min. Tad=256ns, max källimpedans 5kohm. Se dsPIC30F family reference manual s. 437
Kod: Markera allt
;------------------------------------------------------------------------------
; AD_Interrupt()
;------------------------------------------------------------------------------
.text
__ADCInterrupt:
BCLR IFS0, #ADIF ;clear interrupt flag
CALL LCD_Line1
MOV ADCBUF3, W0
MOV ADCBUF2, W0
MOV ADCBUF0, W0
MOV ADCBUF1, W0
CALL Bin_BCD_xxxxx
RETFIE
;//AD_Interrupt()
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; AD_Init()
;------------------------------------------------------------------------------
.text
AD_Init:
;Setup A/D
;Analog inputs
BSET TRISB, #RB0
BCLR ADPCFG, #PCFG0
BSET TRISB, #RB1
BCLR ADPCFG, #PCFG1
BSET TRISB, #RB2
BCLR ADPCFG, #PCFG2
BSET TRISB, #RB3
BCLR ADPCFG, #PCFG3
;Start conversion after sampling
BSET ADCON1, #SSRC1
BSET ADCON1, #SSRC0
BSET ADCON1, #SSRC2
;Simultaneous sampling of all 4 channels
BSET ADCON1, #SIMSAM
;Sample all channels
BSET ADCON2, #CHPS1
;Interrupt after every 4 conversions
BSET ADCON2, #SMPI2
;Set sample and conversion times
MOV #0x0210, W0
MOV W0, ADCON3
;Select A/D-inputs, AN3, AN0, AN1, AN2
BSET ADCHS, #CH0SA0
BSET ADCHS, #CH0SA1
;Enable ad interrupts
BCLR IFS0, #ADIF ;clear interrupt flag
BSET IEC0, #ADIE
;Turn on A/D-module
BSET ADCON1, #ADON
;//AD_Init()
;------------------------------------------------------------------------------