PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Feuchtesensor am AD



Djog
15.02.2010, 21:20
Hallo,
Ich habe, nachdem ich im Netz und diversen Büchern gelesen habe, mein
erstes Projekt in Angriff genommen. Es ist eine Terrariensteuerung, wo ich
auch Temperatur und Luftfeuchte auswerte. Mit der Temperaturmessung hatte ich keine Probleme. Hier habe KTY am AD. Probleme habe ich jetzt
mit meinem Feuchtigkeitssensor. Ich verwende einen HIH_4000(an ihm liegt es aber nicht, simuliere die Eingangsspannung erst mal ). Bis 23% geht alles wunderbar, dann fängt er an, falsche Werte anzuzeigen. Wenn ich mein Programm mit der Hand nachrechne, müsste alles ok sein aber mein LCD zeigt nicht das, was ich sehen will.
Habe jetzt schon das ganze Wochenende gesessen und den Fehler gesucht, aber ich habe keine Idee mehr.
Vielleicht kann mal jemand, der dann doch ein bissel mehr Erfahrung hat ein Auge drauf werfen.
Ich verwende einen PIC 18F242 ,mit 6.5538Mhz getaktet.


Luft_Fe
bcf Flag2,3 ;Flag für 1 Messung/Minute
clrf PRODL
clrf PRODH
clrf ADRES_L
clrf ADRES_H
clrf PR_ZH
clrf PR_ZL
clrf Sum_L
clrf Sum_H
clrf ADRESL
clrf ADRESH
bsf ADCON0,3 ;RA2 gesetzt
bsf ADCON0,4 ; "
bcf ADCON0,5 ; "
bsf ADCON0,2 ;AD Start
Test_B btfsc ADCON0,2
goto Test_B ;AD fertig?
movf ADRESL,w
movwf ADRES_L ;zwischensp. für Berechnung
movf ADRESH,w
movwf ADRES_H ;zwischensp. für Berechnung
movlw B'11000100'
movwf Sum_L
movlw B'00000000' ;196 nach Sum_H und _L
movwf Sum_H
bcf STATUS,C
movf Sum_L,w
subwf ADRES_L,f
btfss STATUS,C
goto M_sub16a
movf Sum_H,w
subwf ADRES_H,f
goto M_sub16c
M_sub16a movf Sum_H,w
subwf ADRES_H,f
btfsc STATUS,C
goto M_sub16b
decf ADRES_H,f
goto M_sub16c
M_sub16b movlw 1
subwf ADRES_H,f ;AD Wert -196(offset für0°C)
M_sub16c
movf ADRES_L,w
movwf PR_ZL
movf ADRES_H,w ;Wert speichern für Add. x10
movwf PR_ZH
bcf STATUS,C
rlcf ADRES_L,f
rlcf ADRES_H,f
bcf STATUS,C
rlcf ADRES_L,f
rlcf ADRES_H,f
bcf STATUS,C
rlcf ADRES_L,f
rlcf ADRES_H,f
movf PR_ZL,w
addwf ADRES_L,f
movf PR_ZH,w
addwfc ADRES_H,f
movf PR_ZL,w
addwf ADRES_L,f
movf PR_ZH,w
addwfc ADRES_H,f ;x10
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;1x
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;2x
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;3x
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;4x
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;5x
bcf STATUS,C
rrcf ADRES_H,f
rrcf ADRES_L,f ;6x =/64

clrf Ergeb
clrf ZLF
clrf Luft ;Wert für Ausgabe LCD aufarbeiten
movf ADRES_L,w
movwf Luft ;ganzzahliger Wert für Sprühdauer
movf ADRES_L,w
movwf Ergeb
Schle_Z movlw D'10' ;Zehnerstelle ermitteln
subwf Ergeb,f
btfss STATUS,C
goto Fert_Z
incf ZLF,f ;Zehnerstelle
goto Schle_Z


Fert_Z
clrf PRODH
clrf PRODL
clrf ELF
clrf Ergeb
movlw D'10'
mulwf ZLF
movf PRODL,w
subwf ADRES_L,w ;
movwf ELF ;Einer Luftfeuchte

movlw B'11011010' ;LCD Zeile vier Zehner Luftfeu
call OutLcdControl
movf ZLF,w ;Ausgabe Zehner Luftfeuchte
iorlw '0'
call OutLcdDaten
movlw B'11011011'
call OutLcdControl
movf ELF,w ;Ausgage Einer Luftfeu
iorlw '0'
call OutLcdDaten

return

vielen Dank schon mal im Voraus, Djog

Djog
17.02.2010, 19:41
Hallo,

kann mir jetzt selber schreiben. Da ich mir eigentlich sicher war, daß meine Rechnerei richtig ist, Habe ich mit kleinen Zeitschleifen experimentiert.
Eine Kurze Pause von 10ms zwischen der Auswahl des AD-Eingangs und dem
AD-Startbefehl hat es gebracht. So richtig verstehen kann ich es eigentlich nicht, da die letzte Wandlung (für Temperatur ),ein ganzes Stück vorher erfolgt und der AD eigentlich wieder bereit sein sollte.
Naja das Ergebnis ist erst einmal io, vielleicht finde ich ja die Lösung noch.

Danke an alle die sich die Mühe gemacht haben mal drauf zu schauen

Djog

PICture
17.02.2010, 21:52
Hallo Djog!

Du hast dein Problem schon gelöst, aber für zukünftige kann ich dir den Artikel https://www.roboternetz.de/wissen/index.php/PIC_Assembler in unserem Wiki empfehlen. :)

MfG