Thalhammer
04.02.2013, 21: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
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