ADC Pic16F88
SM
Sabine M.
(zizo)
OP
#1219246
hallo,
ich möchte der ADC von mein Pic testen, ich habe ein testeplatine mit
zwei LEDs zusammengebaut, ich habe der helfte 2,53V von der
Betriebesspannung 5,06V an der Analogeingng gelegt aber der Pic misst
eine falsche Spannung..
ich habe in mein Code so gedacht:
wenn ein bit der ADRESL 0 ist dann blinken die zwei LEDs nacheinander.
wenn ein bit der ADRESL 1 ist dann blinkt nur eine LED.
kann jemand mir helfen
#include <P16F88.inc>
ERRORLEVEL -302
LED equ 0
LEDg equ 1
Wait1 equ 0x25
Wait2 equ 0x26
org 0x0000
MainInit
bsf STATUS, RP0 ;Bank 1
movlw b'00000011'
movwf ANSEL
movlw b'11111100'
movwf TRISA
bcf STATUS, RP0 ;Bank0
; ADC einschalten
BSF ADCON0, 0 ; ADON=1
; AN2 wählen
bsf ADCON0, 3 ;1
bsf ADCON0, 4 ;1
bcf ADCON0, 5 ;0
; ADC speed für 8 MHz einstellen
BSF ADCON0, 6 ; ADCS0=1
BCF ADCON0, 7 ; ADCS1=0
; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BSF ADCON1, 7 ; ADFM=1
bcf ADCON1, 4 ;;Vdd,Vss
bsf ADCON1, 5;
BCF STATUS,RP0 ; Bank0
;Eingangsspannung wandeln
call Warten
BSF ADCON0, 2 ; ADC starten
loop3
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop3 ; nein, weiter warten
call Warten
;Wert nach Wait1 schreiben
BSF STATUS,RP0 ; Bank1
btfss ADRESL, 0
call LED1
call LED2
btfss ADRESL, 1
call LED1
call LED2
btfss ADRESL, 2
call LED1
call LED2
btfss ADRESL, 3
call LED1
call LED2
btfss ADRESL, 4
call LED1
call LED2
btfss ADRESL, 5
call LED1
call LED2
btfss ADRESL, 6
call LED1
call LED2
btfss ADRESL, 7
call LED1
call LED2
bcf STATUS, RP0
btfss ADRESH, 0
call LED1
call LED2
btfss ADRESH, 1
call LED1
call LED2
lopp7
goto lopp7
LED1
bcf STATUS, RP0
bsf PORTA, LED
call Warten
bcf PORTA, LED
call Warten
return
LED2
bcf STATUS, RP0
bsf PORTA, LEDg
call Warten
bcf PORTA, LEDg
call Warten
return
Warten
;Wartezeit initialisierung
movlw 0x25 ; obere 8 Bit auslesen
movwf Wait2
loop2
movlw 0x25 ; obere 8 Bit auslesen
movwf Wait1
loop
decfsz Wait1,1
goto loop
decfsz Wait2,1
goto loop2
retlw .0
end
SM
Sabine M.
(zizo)
OP
#1226464
ich habe mein Code verbessert, aber es funktiontiert immer noch nicht,
kann mir jemand helfen.
list p=16f88
#include <P16F88.inc>
ERRORLEVEL -302
LED equ 0
LEDg equ 1
Wait1 equ 0x25
Wait2 equ 0x26
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF &
_WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF &
_PWRTE_ON & _WDT_OFF & _EXTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
org 0x0000
MainInit
bsf STATUS, RP0 ;Bank 1
movlw b'111100'
movwf ANSEL
movlw b'11111100'
movwf TRISA
bcf STATUS, RP0 ;Bank0
; ADC einschalten
BSF ADCON0, 0 ; ADON=1
; AN2 wählen
bcf ADCON0, 3 ;0
bsf ADCON0, 4 ;1
bcf ADCON0, 5 ;0
; ADC speed für 8 MHz einstellen
BSF ADCON0, 6 ; ADCS0=1
BCF ADCON0, 7 ; ADCS1=0
; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BSF ADCON1, 7 ; ADFM=1
bcf ADCON1, 4 ;;Vdd,Vss
bcf ADCON1, 5;
bsf ADCON1, 6
BCF STATUS,RP0 ; Bank0
;Eingangsspannung wandeln
BSF ADCON0, 2 ; ADC starten
loop3
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop3 ; nein, weiter warten
;Wert nach Wait1 schreiben
BSF STATUS,RP0 ; Bank1
btfss ADRESL, 6
call LED1
call LED2
btfss ADRESL, 1
call LED1
call LED2
btfss ADRESL, 2
call LED1
call LED2
btfss ADRESL, 3
call LED1
call LED2
btfss ADRESL, 4
call LED1
call LED2
btfss ADRESL, 5
call LED1
call LED2
btfss ADRESL, 6
call LED1
call LED2
btfss ADRESL, 7
call LED1
call LED2
bcf STATUS, RP0
btfss ADRESH, 0
call LED1
call LED2
btfss ADRESH, 1
call LED1
call LED2
lopp7
goto lopp7
LED1
bcf STATUS, RP0
bsf PORTA, LED
call Warten
bcf PORTA, LED
call Warten
return
LED2
bcf STATUS, RP0
bsf PORTA, LEDg
call Warten
bcf PORTA, LEDg
call Warten
return
Warten
;Wartezeit initialisierung
movlw 0x25 ; obere 8 Bit auslesen
movwf Wait2
loop2
movlw 0x25 ; obere 8 Bit auslesen
movwf Wait1
loop
decfsz Wait1,1
goto loop
decfsz Wait2,1
goto loop2
retlw .0
end
Antwort schreiben
|