Mam projekt kde musim porovnavat hodnotu AD prevodniku s referencni a nejak nejsem schopnej to rozchodit, uz jsem z toho zoufalej. Prikladam cast kodu, kde je pouze vse o AD prevodniku a to nejdulezitejsi...
Jestli nekdo vi tak budu strasne moc rad za pomoc, jakoukoliv.
Kód:
VOLTY_hi EQU 0x33
#define VOLTY_MAX .522 ;2.55 V
Nastaveni AD prevodniku:
movlw b'10001' ;AN0 analog input,conversion clock Fosc/8
movwf ANSEL
movlw b'00000001' ;ADC on, right justified ;razeni zleva
movwf ADCON0
Cidla:
;ctu z AD prevodniku a nastavuju ho
banksel ADCON0
bsf ADCON0,1 ;start conversion
movlw .200
movwf pocitadlo5
WaitADC:
; banksel ADCON0
; btfsc ADCON0,GO ;tady se to zacyklilo tak jsem to udelal odecitanim
decfsz pocitadlo5
b WaitADC ;wait for ADC to finish
b GetADC1
GetADC1:
movf ADRESH, W ;get high byte
movwf VOLTY_hi
banksel PIR1
bcf PIR1,ADIF ;clear conversion flag
;porovnavam hodnoty
banksel GPIO
movf VOLTY_hi,W
subwf VOLTY_MAX
btfss STATUS,C
b ALARM_off
b ALARM_on
ALARM_on:
b Sirena
ALARM_off:
b ZaCidla
Chci aby, kdyz hodnota VOLTY_hi bude mensi nez VOLTY_MAX se spustila sirena, jinac to preskoci na ALARM_off.
mam to spravne, nebo mi tam neco chybi? Vse z kodu co mam ohledne AD mam zde. Nic vic nemam k AD v kodu.