Hallo,
Ich möchte mal den AD-Eingang testen, aber irgendwie klappt das nicht. Mein Code:
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
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?
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!!!