Is nicht so ganz. Eigentlich1001111 lauten, in Hex: 4F
10011110 lauten, in Hex: 9E (write) 9F (read)
Hallo Forum!
Nachdem ich gestern angefangen hab, mich mit I2C zu beschäftigen, steh ich jetzt schon vor einem Problem
Ich habe versucht, den LM75 am I2C zum laufen zu bekommen, angesprochen soll das ganze über Bascom werden (nach dieser Anleitung).
Angeschlossen hab ich das ganze über ein selbstgefrickeltes Adapterkabel am RN-Conrol:
Bild hier
Pin 1 vom Board an Pin 2 vom LM75
Pin 2 an Pin 4
Pin 3 an Pin 1
Pin 5 an Pin 8
Pin 5 / 6 / 7 am LM75 hab ich auf 5V gelegt, somit sollte die Adresse ja 1001111 lauten, in Hex: 4F
Pin 1 und 3 gehen jeweils über 2,2k auf +5V
Tja, soweit so gut! Nur liefert mir das Bascom-Beispielprogramm immer 9999 zurück, also ein Fehler beim Ansprechen des LM7!?
Hat irgendjemand eine Idee, wo der Fehler liegen kann?
Gruß
Tobias
Is nicht so ganz. Eigentlich1001111 lauten, in Hex: 4F
10011110 lauten, in Hex: 9E (write) 9F (read)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ich benutze diesen Code:
wobei ich "I2cwbyte &H91" durch "I2cwbyte &H9E" und auch "I2cwbyte &H9F" ersetzt habe.Code: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
In beiden fällen kam als Wert für Ival nur 9999... daran scheint es also nicht zu liegen.
Ist die Verdrahtung wie im 1ten Post beschrieben denn soweit korrekt?
Nun, RN-Control hab ich nicht, weiss also die Pin-Nummern nicht, aber zur kontrolle und Vergleich
LM75-1....I2CDATA=SDA
LM75-2....I2CTAKT=SCL
LM75-3....frei lassen
LM75-4....GND
LM75-5....+5V für &H9E
LM75-6....+5V für &H9E
LM75-7....+5V für &H9E
LM75-8....+5V
Zum Auslesen der Temp also I2cwbyte &H9F
Config Scl = Portc.0 'Ports fuer IIC-Bus MEGA32
Config Sda = Portc.1 'Ports fuer IIC-Bus MEGA32
I2CInit ist auch da ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Besten Dank, Robert!
Daran hätte ich denken sollen Vielleicht sollte das jemand in dem Bascom Beispiel im Wiki ergänzen!Code:Config Scl = Portc.0 'Ports fuer IIC-Bus MEGA32 Config Sda = Portc.1 'Ports fuer IIC-Bus MEGA32
Jetzt bekomme ich zwar einen Wert übergeben, jedoch erscheinen mir -5 Grad bei dem Wetter ziemlich unrealistisch
Hat da jemand eine Idee, woran DAS schonwieder liegen mag?
Fällt mir momentan nix ein, denn wenn der LM75 seine Adresse richtig mitkriegt und sein Ack schickt (Err = 0) , sollten die Daten auch stimmen.
Eventuell, schad' nix:
Config I2cdelay = 5
damit den Bus nicht zuuuu schnelle ist. (Bin aber skeptisch)
Noch ein Tip: ganz vorne im Programm
$LIB "I2C_TWI.LBX"
einfügen, dann nimmt er die Hardware-I2C statt der Software.
da mußt du dann aber schreiben
CONFIG TWI = 100000 (für 100 kHz)
config scl etc. kann dann entfallen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Danke schonmal!
Habs grad mal auf die Schnelle eingebaut, jetzt misst er -975 Grad
Ich werd nachher nochmal alles kontrollieren, muss jetzt erstmal weg...
edit:
Ich dreh langsam am Rad... hier mal der komplette Code, der mir -975 zurückliefert...
Ist da irgendwo ein Fehler den ich nicht finde, oder ist etwa der LM75 defekt?!Code:$regfile = "m32def.dat" $crystal = 16000000 'Config Scl = Portc.0 'Ports fuer IIC-Bus MEGA32 'Config Sda = Portc.1 'Ports fuer IIC-Bus MEGA32 Config I2cdelay = 5 CONFIG TWI = 100000 $LIB "I2C_TWI.LBX" Print "Let's go!" Do Dim Ival As Integer Dim Msb As Byte Dim Lsb As Byte I2cstart I2cwbyte &H9E ' 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 Print Ival Wait 2 Loop
Lesezeichen