Probleme mit zweiter AD Wandlung
Dienstag, 22. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  AD-Wandler (Assembler)  |  Probleme mit zweiter AD Wandlung « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Probleme mit zweiter AD Wandlung  (Gelesen 2398 mal)
 
Thomas Maier
Gast
« am: August 07, 2008, 07:32:11 »

Hallo,
ich habe ein kleines Projekt mit einem PIC, komme allerdings gerade nicht weiter! Vielleicht könnt ihr mir helfen!?
Also Problemstellung: PIC16F876 mit 20MHZ, ich will 2 AD Eingänge
benutzen. Erste AD Wandlung scheint zu Funktionieren, bei der Zweiten
stimmt der Wert nicht.
Es sollen die Eingänge AN0 und dann AN1 verwendet werden. Die Wait
Funktion  hat eine Laufzeit von 200µs.
Bin für jeden Hinweis dankbar!!


Code:

READAD


  CLRWDT      ;Watchdog CLR

 
; Anfangsinitialisierung
init

; ADC einschalten          ;Vorgabe Messen poti
    BSF    ADCON0, 0    ; ADON=1



; ADC-Eingang AN/RA0 auswählen
    BCF    ADCON0, 5    ; ADCHS2=0
    BCF    ADCON0, 4    ; ADCHS1=0
    BCF    ADCON0, 3    ; ADCHS0=0

; ADC speed für 20 MHz einstellen
    BSF    ADCON0, 7    ; ADCS1=1
    BCF    ADCON0, 6    ; ADCS0=0

; Daten linksbündig
    BSF    STATUS,RP0   ; Bank1
    BCF    ADCON1, 7    ; ADFM=0
    BCF    STATUS,RP0   ; Bank0

  call Waitms

;Eingangsspannung wandeln
    BSF     ADCON0, 2     ; ADC starten
loop1
    BTFSC    ADCON0, 2   
    GOTO     loop1         


    movlw    ADRESH       ; obere 8 Bit auslesen
    movwf    P1        ; obere 8-Bit nach P1



  call Waitms    ;warten


; ADC-Eingang AN1 auswählen      ;Temp Messen
    BCF    ADCON0, 5    ; ADCHS2=0
    BCF    ADCON0, 4    ; ADCHS1=0
    BSF    ADCON0, 3    ; ADCHS0=1



  call Waitms    ;Warten

;Eingangsspannung wandeln
    BSF     ADCON0, 2     ; ADC starten
loop11
    BTFSC    ADCON0, 2   
    GOTO     loop11       


    movlw    ADRESH     
    movwf    T1
 
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: August 07, 2008, 09:05:16 »

Hallo,

es muss nicht
Code:
    movlw    ADRESH       ; obere 8 Bit auslesen
    movwf    P1        ; obere 8-Bit nach P1
sondern
Code:
    movfw    ADRESH       ; obere 8 Bit auslesen
    movwf    P1        ; obere 8-Bit nach P1
heißen. Bei movlw wird die Adresse geladen, und nicht der Inhalt des Registers.

Gruß
Stefan
Gespeichert

Thomas M.
Gast
« Antworten #2 am: August 07, 2008, 09:18:03 »

Oh stimmt! Danke für die schnelle Antwort!
Allerdings ist das nicht das Problem, habe es vergessen wieder zu ändern nachdem ich die restlichen Funktionen mit Konstanten Werten getestet hatte.
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #3 am: August 07, 2008, 09:38:19 »

Dann schreib doch mal den geänderten Code rein (CodeTags benutzen).
Ich kann aber eigentlich sonst keinen Fehler erkennen. Hast du den Watchdog aktiviert? Oder warum setzt du das CLRWDT ?
TRISA gesetzt (sollte beim Reset schon der Fall sein)?
Gespeichert

Thomas M.
Gast
« Antworten #4 am: August 07, 2008, 10:07:42 »

Watchdog wird verwendet, TRISA verändere ich nicht da nur diese beiden Eingänge verwendet werden und die Anderen egal sind (dann sollte nach dem reset ja alles als Analog Input eingestellt sein?).
Ich hab leider erst heute Abend wieder Zugriff auf mein pic board, will dann doch mal noch überprüfen ob die movfw Änderung wirklich drin ist (manchmal ist der Teufel ja doch ein Eichhörnchen).
Gruß, thomas
Gespeichert
weirdo
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #5 am: August 08, 2008, 11:39:30 »

Kann jetz auch nix im Code sehen, aber wie groß sind denn die Vorwiederstände an den A/D Ports?
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.04 Sekunden mit 19 Zugriffen.
 
Top! Top!