-
        

Ergebnis 1 bis 3 von 3

Thema: Problem mit Feuchtesensor am AD

  1. #1

    Problem mit Feuchtesensor am AD

    Anzeige

    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.
    Code:
    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

  2. #2
    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

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo Djog!

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

    MfG

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •