mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Pic16F88


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.