PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit I2C



Thalhammer
04.02.2013, 20:01
Hallo, ich versuche verzweifelt einen LM75 anzusteuern.
Auf dem RPI unter Linux funktionierd das Prima, unter Bascom scheitert er jedoch schon beim i2cstart.
Leider findet sich weder in google noch in der Bedienungsanleitung irgendein Hinweis was hier falsch läuft.
Ich hab keine Ahnung was ich noch machen soll.

$regfile "m88def.dat"

'Angabe der Taktfrequenz (8Mhz)
$crystal = 8000000
$baud = 9600

'Einbindung der I2C-Bibliothek
$lib "i2c_twi.lbx"

'Angabe der I2C-Bus-PIN´s (mit i2c_twi.lbx nicht veränderbar!)
Config Sda = Portc.4
Config Scl = Portc.5

Config TWI = 100000
'Konfiguration der Ports
Config Portd = Output

Dim I2c_state As Bit

Dim N As Byte

'Variablen für Temperaturmessung LM75 Basis-Adresse Hex 90/91 (=144/145)
Const Lm75slavewrite = &H48
Const Lm75slaveread = &H49
Dim Lm75high As Byte
Dim Lm75low As Byte
Dim Temperatur As Integer
Dim Nachkommastelle As String * 2


'Anschaltung des I2C-Busses
I2cinit
Print Err;
'================================================= =====
'Hauptprogramm-Schleife
'================================================= =====
Do

'LM75 Abfrage
I2cstart
If Err = 1 Then Print "Error starting TWI";
I2cwbyte Lm75slaveread
Print Err
If Err = 1 Then Print "Error Writing address\nIs the device connected ?";
I2crbyte Lm75high , Ack
If Err = 1 Then Print "Error reading High byte";
I2crbyte Lm75low , Nack
If Err = 1 Then Print "Error reading Low byte";
I2cstop

Print Err
Print Lm75high ; Lm75low

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
Print "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad"

'Status-Life-Bit für Hauptprogramm
Toggle Portd.0
Waitms 500

Loop



'Programmende (nur formal)
End

MFG Thalhammer

MagicWSmoke
04.02.2013, 21:03
Bascom erwartet eine 8 Bit Adresse inkl. R/W Bit.

Const Lm75slaveread = &H49

Thalhammer
04.02.2013, 22:05
Das ist doch je 8 Bit Adresse und rw ins auch drin.
Also das Problem mit dem i2cstart falsch hab ich jetzt behoben, allerdings scheitert das lesen immer noch.

MagicWSmoke
04.02.2013, 22:14
Schau Dir mal das Datenblatt an und dort eine Abfragesequenz, da findest Du zur Adressierung:
1 0 0 1 A2 A1 A0 R/W

Jetzt übersetz das mal in Hex...

Thalhammer
05.02.2013, 16:17
JA kommt 0x90 bzw 0x91 raus, aber 1. findet mein PI den auch bei 0x48 und zweitens funktionierds mit 0x90/0x91 auch nicht.

EDIT:
Ich habs grade nochmal mit 0x91 probiert und jetzt gehts.
Warum es vorher nicht geklappt hat erschliest sich mir nicht. Das RPI hat woll eine etwas eigene Anzeigeweise.

MagicWSmoke
05.02.2013, 16:33
Das RPI hat woll eine etwas eigene Anzeigeweise.
Manchmal wird die I2C-Adresse nur mit den 7 höheren Bits 7..1 angegeben, das nicht angegebene Bit 0 ist dann das R/W-Bit.
Bascom möchte dagegen eine 8 Bit-Adresse mit einbezogenem R/W-Bit, das ist der ganze Unterschied.