fang doch mal klein an und lass das mit dem Error weg....
nur
I2C init
starten
leseadresse schicke
bytes lesen
bytes auswerten
bytes anzeigen
fertig
funktioniert einwandfrei....
und nimm die dim aus der do loop schleife raus...
Hi folks!
Wollte mal Temperaturmessung mitm LM75 über I2C machen. Vorneweg, das ist mein erstes i2c-Projekt.
Mein Programm ist 1:1 aus RN-Wissen übernommen, klar, mit ein paar kleinen Änderungen.
Am LM75 hab ich die i2c-Pins (A1-A3) auf Masse gelegt, dadurch hab ich als Adresse &h90. Zum lesen dann &h91.
Im nachfolgenden kommt mein Bascom-Programm. Hoffe, ihr könnt den Fehler finden.
Achja, auf dem LCD gibt er die ganze Zeit "Temp.: 9999" aus.
Code:$regfile = "m8def.dat" $crystal = 16000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5 Config Lcdbus = 4 Config Sda = Portc.4 Config Scl = Portc.5 Cursor Off Noblink Do Cls Dim Ival As Integer Dim Msb As Byte Dim Lsb As Byte I2cstart I2cwbyte &H91 ' Lese-adresse ! If Err = 1 Then I2cstop ' kein ACK vom LM75 --> irgendein Fehler Ival = 9999 ' Zeichen, daß der Wert ungültig ist ! Else I2crbyte Msb , Ack I2crbyte Lsb , Nack I2cstop If Msb.7 = 1 Then Ival = Makeint(msb , &HFF) ' auffüllen mit den Vorzeichen bits Else Ival = Makeint(msb , &H00) ' positiv, also bleibt es so End If Ival = Ival * 10 ' erweitern If Lsb.7 = 1 Then Ival = Ival + 5 ' fünf Zehntel Grad dazu End If End If Locate 1 , 1 Lcd "Temp.: " Locate 1 , 8 Lcd Ival Wait 1 Loop
fang doch mal klein an und lass das mit dem Error weg....
nur
I2C init
starten
leseadresse schicke
bytes lesen
bytes auswerten
bytes anzeigen
fertig
funktioniert einwandfrei....
und nimm die dim aus der do loop schleife raus...
hab jetzt den code erstmal abgeändert. immerhin siehts jetzt nich nach nem error aus...
prob jetzt: "Temp.: 72 Grad"
mein code:
jemand ne idee?Code:$regfile = "m8def.dat" $crystal = 16000000 $lib "i2c_twi.lbx" 'Einbindung der I2C-Bibliothek Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5 Config Lcdbus = 4 Config Sda = Portc.4 Config Scl = Portc.5 Const Lm75slaveread = &H91 Dim Lm75high As Byte Dim Lm75low As Byte Dim Temperatur As Integer Dim Nachkommastelle As String * 2 Cursor Off Noblink Cls Locate 1 , 1 Lcd "[= LM75 Test =]" Locate 2 , 1 Lcd "über I2C" Wait 1 Cls 'Anschaltung des I2C-Busses I2cinit Waitms 500 Do 'LM75 Abfrage I2cstart I2cwbyte Lm75slaveread I2crbyte Lm75high , Ack I2crbyte Lm75low , Nack I2cstop If Lm75high > 127 Then Temperatur = Lm75high And 127 Temperatur = Not Temperatur Incr Temperatur Else Temperatur = Lm75high End If Lm75low = Lm75low And 128 If Lm75low > 0 Then Nachkommastelle = ",5" Else Nachkommastelle = "" End If Locate 1 , 1 Lcd "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad" Wait 1 Loop End
also du kannst dem LM75 evt. noch folgendermassen initialisieren:
so habe ich das jedenfalls getan, sollte allerdings auch ohne das schreiben von H00 funktionieren da das Register nach dem einschalten ohnehin ausgeählt wird!Code:I2cstart I2cwbyte Lm75write I2cwbyte &H00 'Temperaturregister auswählen *Default nach Power up* I2cstart I2cwbyte Lm75read 'laut Datenblatt max. 300ms zum beschreiben des Temperaturregister I2crbyte Lm75high , Ack I2crbyte Lm75low , Nack I2cstop
sicher das du keine Fahrenheit misst?
wenn überhaupt möglich....
achja... ich habe übrigens überhauptkeine LIB eingebunden! versuche das auch mal!!!
Die Lib kann man ruhig drin lassen, denn die macht nur, dass das interne TWI verwendet wird, und Bascom die Ausgäng nicht selber umschaltet (Software-I2C).
Probier auch mal nähe Programmanfang ein Config TWI=100000
Das setzt die Register des TWI-Moduls auf die Startwerte.
Jetzt gehts!
Ich hab jetzt die Lib für´s Hardware-TWI eingebunden und noch den Code um "Config Twi = 10000" ergänzt.
Hier für alle noch im Anhang den funktionierenden Code zum downloaden.
Thx @ all!
P.S.: Könnte man ja in RN-Wissen / Downloadbereich aufnehmen?
Kann damit zusammenhängen, das Bascom beim
Soft TWI den Start als Restart ausführt. Hatte da auch
schonmal Probleme damit.
Vor den Erfolg haben die Götter den Schweiß gesetzt
ja kurz gesagt, es lag bloß an dem "Config Twi = 10000"
Sorry, das ich diesen Alten Thread ausgrabe, benutze das Programm von CapSob, ur wie muss ich das anpassen, um negative Temperaturen darstellen zu können ?
Bei unter 0 °C erhalte ich dann z.B. -127 °C.
Bin leider Anfänger![]()
Lesezeichen