Hallo Forumler,
ich hab hier ein kleines Verständnisproblem!
Ich will eine Pumpe nach 2 verschiedenen Temp- Kriterien steuern. Dazu will ich 2 Temp.-fühler (LM75) an einer I2C auslesen. Ich hab nun schon mehrmals im Forum gelesen und auch RN-Wissen gequält, bin aber immer noch nicht so richtig hinter die Funktion der Ansteuerung gestiegen, wenn mann mehrere Geräte an einem Bus betreibt.
Hier mal mein vorbereiteter Code, der allerdings genau in dem Tempfühler SUP (ganz unten) nicht ausprogrammiert ist.
Kann mir da jemand mit größerer Erfahrung in den Dingen weiter helfen?
Code:'------------------------------------------------------------------------------- ' Controller Grundeinstellung '------------------------------------------------------------------------------- $regfile = "m8def.dat" 'Prozessor MEGA8 $crystal = 1000000 'int. 1MHz-Takt '------------------------------------------------------------------------------- ' Display Grundeinstellung '------------------------------------------------------------------------------- Config Lcd = 16 * 2 '16Zeichen 2Zeilen Config Lcdbus = 4 '4 bit mode Config Lcdmode = Port Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 'Mega8 Anschlüsse Bein 2 Bein 3 Bein 6 Bein 11 Bein 12 Bein 13 'Displayanschluss Bein 6 Bein 4 Bein 11 Bein 12 Bein 13 Bein 14 'Displayanschluss (Rest) Bein 1 = GND Bein 2 = +5V Bein 3 = Kontrast '------------------------------------------------------------------------------- ' Temperaturerfassung LM75 Grundeinstellung '------------------------------------------------------------------------------- Declare Sub Tempfuehler() Const Lm75slavewrite = &H90 Const Lm75slaveread = &H91 Dim Lm75high As Byte Dim Lm75low As Byte Dim Wasser As Byte Dim Luft As Byte Dim Tempvar As Byte Config Sda = Portc.4 Config Scl = Portc.5 '------------------------------------------------------------------------------- ' Eingänge, Ausgänge, Allgemeine Variablen '------------------------------------------------------------------------------- Config Pinb.1 = Input ' Pumpe Hand EIN Config Pinb.2 = Output ' Pumpe Ausgang Portb = &B11111111 ' alle PullUP ein Portb.2 = 1 ' 1= Pumpe Aus '******************************************************************************* '******************************************************************************* '* * '* Hauptprogramm * '* * '******************************************************************************* '******************************************************************************* Do Hand: If Pinb.1 = 0 Then ' 0 = Schalter Ein Portb.2 = 0 ' 0= Pumpe Ein Locate 1 , 1 Lcd "! Hand ! " Locate 2 , 1 Lcd "! Hand ! " Goto Hand End If '------------------------------------------------------------------------------- Call Tempfuehler() '------------------------------------------------------------------------------- ' Display '------------------------------------------------------------------------------- Cls Deflcdchar Print , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 ' °=Grad-Zeichen Locate 1 , 1 Lcd "Wasser=" Locate 1 , 9 Lcd Wasser Locate 1 , 15 Lcd Chr(0) ; "C" Locate 2 , 1 Lcd " Luft=" Locate 2 , 9 Lcd Luft Locate 2 , 15 Lcd Chr(0) ; "C" '------------------------------------------------------------------------------- ' Steuerung '------------------------------------------------------------------------------- 'Steuerung, wenn Wasser zu kalt Tempvar = Luft - 2 If Wasser < 22 And Wasser < Tempvar Then Goto Pumpe_ein End If 'Steuerung, wenn Wasser zu warm Tempvar = Luft + 2 If Wasser >= 25 And Wasser > Tempvar Then Goto Pumpe_ein End If Portb.2 = 1 ' 1= Pumpe AUS Goto Endesteuerung Pumpe_ein: Portb.2 = 0 ' 0= Pumpe EIN Endesteuerung: Loop End '*************** ENDE HauptProgramm ******************************************** '******************************************************************************* '* * '* Unterprogramme und Interrupt Routinen * '* * '******************************************************************************* '------------------------------------------------------------------------------- ' Sub LM75-Temperaturfühler '------------------------------------------------------------------------------- Sub Tempfuehler() '***** Temperaturfühler 1 ***** I2cinit I2cstart I2cwbyte Lm75slaveread I2crbyte Lm75high , Ack I2crbyte Lm75low , Nack I2cstop If Lm75high > 127 Then Wasser = Lm75high And 127 Wasser = Not Wasser Incr Wasser Else Wasser = Lm75high '+/- Wert 'Korr. falsche Anzeige End If '***** Temperaturfühler 2 ***** I2cinit I2cstart I2cwbyte Lm75slaveread I2crbyte Lm75high , Ack I2crbyte Lm75low , Nack I2cstop If Lm75high > 127 Then Luft = Lm75high And 127 Luft = Not Luft Incr Luft Else Luft = Lm75high '+/- Wert 'Korr. falsche Anzeige End If '******************************* Wait 5 End Sub '-------------------------------------------------------------------------------







Zitieren


Lesezeichen