Hallo,
Ich möchte mal den AD-Eingang testen, aber irgendwie klappt das nicht. Mein Code:Desweiteren frag ich mich immer wozu die Bänke sind. Im Datenblatt steht irgendwie was von Speicheraufteilung, aber wann weiss ich ob ich zur anderen Bank wechseln muss?Code:title "Programm um den ADC-wandler zu benutzen" processor 18F458 include <P18F458.I18> ;Datei muss sich im selben Ordner befinden ;Konfiguration für den µC einstellen __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H __CONFIG _CONFIG2L, _BOR_ON_2L & _PWRT_ON_2L & _BORV_27_2L __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H __CONFIG _CONFIG3H, _CCP2MX_ON_3H __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L __CONFIG _CONFIG7H, _EBTRB_OFF_7H ;############## Reset ################ org 0x0000 goto __Resolve_INTERRUPT ;############## interrupt ################ org 0x0008 goto __Resolve_INTERRUPT ;############## main ################ org 0x0020 __Resolve_INTERRUPT Init movlb 1 ;zur Bank 1 wechseln bcf INTCON2,7 ;Pull-up Widerstände einschalten movlw B'11111111' ; das Wort ins Akku laden movwf TRISA ;PortB als Eingang benutzen movlw B'00000000' movwf TRISC ;PortC als Ausgang movlw B'00000000' movwf TRISD ;PortD als Ausgang movlw B'00000000' movwf TRISB ;PortD als Ausgang clrf PORTC ;PORTB loeschen ; Timer1 interrupt checken movlb 0 btfss PIE1, TMR1IE btfsc PIR1, TMR1IF Start ; Perform AD Conversion on Channel AN2 ;--------------------------------------- bsf ADCON0, 0 bcf ADCON0, CHS2 ; Select AN2 bsf ADCON0, CHS1 bcf ADCON0, CHS0 movlb 1 bsf ADCON1, PCFG3 ;Vref einstellen 1001 bcf ADCON1, PCFG2 ;analog-input einstellen bcf ADCON1, PCFG1 bsf ADCON1, PCFG0 bcf ADCON1,ADCS2 movlb 0 bsf ADCON0, ADCS1 ;internen Takt einstellen bsf ADCON0, ADCS0 bcf ADCON0, CHS2 bcf PORTB,3 ;----------------------------------delay--------------------------------------------- bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' bra $ + D'2' ;------------------------------------------------------------------------------------- bsf ADCON0, GO_DONE ; Start Conversion btfsc ADCON0, GO_DONE ; Wait conversion END movlw ADRESL movwf PORTC bsf PORTB,3 movlw ADRESH movwf PORTD goto Start end
In meinem Code habe ich ADCON1 und ADCON0 auf Bank1 bzw. Bank0, das habe ich in einem Beispiel so gesehen. Ist das richtig?
Vielen Dank im Vorraus!!!
Lesezeichen