Forum: Mikrocontroller und Digitale Elektronik ADC Pic16F88


von Sabine M. (zizo)


Lesenswert?

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

von Sabine M. (zizo)


Lesenswert?

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
Noch kein Account? Hier anmelden.