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