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
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