- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 2 von 2

Thema: ADC im PIC 18F458 einstellen?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.06.2004
    Ort
    Berlin
    Beiträge
    52

    ADC im PIC 18F458 einstellen?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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!!!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Schau Dir mal die PIC Assembler-Beispiele unter http://www.domnick-elektronik.de/picasm.htm an, vielleicht findest Du dort für einige Deiner Probleme eine Lösung.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress