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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.