mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD Wandler Problem PIC 16F684


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Schaltung aufgebaut mit einem PIC16F684. Diese Schaltung 
soll im Grunde folgendes machen: Analogen Spannungswert einlesen, Wert 
aufarbeiten und als Binärwert wieder ausgeben. Nur wird bei meinem PIC 
am Ausgang immer b'11111' angezeigt. Dieser Wert soll eigentlich 
angezeigt werden wenn die maximale oder die minimale Spannung am Analog 
Pin anliegt. Daher meine Vermutung, dass immer aus dem AD-Wandler 
b'00000000000' ausgelesen wird.

Hier der Code:
;***************************************************************************
;***** lkw.ASM
;***** Wunner Patrick 14.11.2008
;***** LKW Hydraulik Motor Steuerung
;***************************************************************************


;***************************************************************************
;***** PIC intialisieren
;***************************************************************************

#include<P16F684.INC>

  __CONFIG 0x3fC4

  List P = 16F684


;***************************************************************************
;***** Vektoren vergabe
;***************************************************************************

  org      0x00
  goto    start

  org      0x04
  retfie


;***************************************************************************
;***** Register definieren
;***************************************************************************

anzahl      equ    0x21
vZeit1      equ    0x22
vZeit2      equ    0x23
vZeit3      equ    0x24
ergebnis    equ    0x25
rueck_erg    equ    0x26
vor_erg      equ    0x27



;***************************************************************************
;***** Variablen definieren
;***************************************************************************



;***************************************************************************
;***** Tabellen
;***************************************************************************




;***************************************************************************
;***** Makros definieren
;***************************************************************************


  




;***************************************************************************
;***** Initialisierung
;***************************************************************************

start

  bsf    STATUS,RP0
  movlw  b'01110000'
  MOVWF  ADCON1 

  clrf  TRISC            ; TRISC als Ausgang
  movlw  b'00111111'
  movwf  TRISA            ; TRISA als Eingang

  clrf  ANSEL
  bsf    ANSEL,0            ; RA0 Analoger Eingang
                    ; Ein- und Ausgänge definieren

  bcf    STATUS,RP0
  ;movlw  07h
  ;movwf  CMCON0

  MOVLW   b'10000001'          ; 
  MOVWF   ADCON0             ; Vdd Vref, AN0, On

  call  vZeitschleife        ; zeit abwarten

  ;clrf  PORTA            ; Register zu beginn löschen
  clrf  PORTC
  clrf  anzahl




;***************************************************************************
;***** Hauptprogramm
;***************************************************************************

prog

  call  vZeitschleife        ; zeit abwarten

  clrf  ergebnis

  bsf    ADCON0,GO          ; AD-Wandler einschalten
  BTFSC   ADCON0,GO           ; Uebertragung zuende?
  GOTO   $-1             ; wenn nicht neu testen      ;
  MOVFW   ADRESH             ; Lese die höherwertigen Bits
  movwf  ergebnis


  rrf    ergebnis          ; ergebnis durch 2 teilen
  bcf    ergebnis,7          ; Bit 7 löschen
  rrf    ergebnis          ; ergebnis durch 2 teilen
  bcf    ergebnis,7          ; Bit 6 löschen

  btfsc  ergebnis,5          ; Testen ob größer oder kleiner 2,5V
  goto  vorwaerts          ; Wenn größer gehe zu vorwärts
  

rueckwaerts

  movfw  ergebnis
  movwf  rueck_erg
  comf  rueck_erg,f          ; Komplementiere rueck_erg
  movlw  d'32'            ; 32 nach Arbeitsregister
  subwf  rueck_erg,f          ; Subtrahiere 32 von rueck_erg
  bcf    rueck_erg,7
  bcf    rueck_erg,6
  bcf    rueck_erg,5

  movfw  rueck_erg          ; Ergebnis nach PORTC schreiben
  movwf  PORTC

  goto  prog

vorwaerts
  
  movfw  ergebnis
  movwf  vor_erg
  movlw  d'32'            ; 32 nach Arbeitsregister
  subwf  vor_erg,f          ; Subtrahiere 32 von rueck_erg

  movfw  vor_erg            ; Ergebnis nach PORTC schreiben
  movwf  PORTC

  goto  prog


;***************************************************************************
;***** Unterprogramme
;***************************************************************************

vZeitschleife


  movlw    d'20'
  movwf    vZeit1
  movwf    vZeit2

vschleife1

  decfsz    vZeit1
  goto     vschleife2
  return

vschleife2

  movwf    vZeit2

vschleife2_1

  decfsz    vZeit2
  goto     vschleife3
  goto    vschleife1

vschleife3

  movwf    vZeit3

vschleife3_1

  decfsz    vZeit3
  goto    vschleife3_1
  goto    vschleife2_1


end


Habe ich vll einen Fehler in der Initialisierung? Bin alles schon 10mal 
durchgegangen, finde aber meinen Fehler nicht.

Hoffe es kann mir jemand helfen.

Vielen Dank im Voraus

Patrick

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.