Raucher91
11.01.2015, 16:07
Ich hoffe Ich habe nun das richtige Forum ausgewählt.
zu meinem Problem. Ich wollte mit meinem Atmega644p über I²C einen LM 75 auslesen.
soweit klappt dass auch aber Ich erhalte immer nur 125 Grad. Woran kann dass liegen ?
Ich habe schon folgendes Probiert:
- Programm geändert ( mittlerweile 2 verschiedene Programme getestet )
- PullUp widerstände am Bus geändert ( 1k5,4k7,10k )
- anderen LM75 getestet
meine Programme bisher:
$regfile = "m644pdef.dat"
$crystal = 16000000
'$sim 'Frequenz 16MhZ
$baud = 2400 'Baudrate Com1 zum PC
$baud1 = 2400
$timeout = 20000000 'Timeout für Serial In 10 Sekunden
$hwstack = 90
$swstack = 64
$framesize = 64
'$lib "i2c_twi.lbx"
'Config Twi = 100000
Dim I2c_state As Bit
Dim Hightemp As Byte
Dim Lowtemp As Byte
Dim Temperatur As Single
Const Lm75slavewrite = &H90
Const Lm75slaveread = &H91
Dim Lm75high As Byte
Dim Lm75low As Byte
'Dim Temperatur As Integer
Dim Nachkommastelle As String * 2
Dim I As Integer
Waitms 100
I2cstart
I2cwbyte Lm75_adresse
I2cwbyte &H00
I2cstop
Waitms 100
I2cstart
I2cwbyte Lm75_lese_adresse
I2crbyte Hightemp , Ack
I2crbyte Lowtemp , Nack
I2cstop
Print #2 , "high:" ; Hightemp
Print #2 , "Low:" ; Lowtemp.7
Waitms 100
If Hightemp.7 = 1 Then
Decr Hightemp
For I = 0 To 7
Toggle Hightemp.i
Next
Temperatur = -hightemp
Else
Temperatur = Hightemp
End If
Locate 3 , 1
Lcd "Erfolgreich"
Locate 4 , 4
Lcd Temperatur ; " °C"
Print #2 , Temperatur ; "°C"
Programm 2
'(I Dim N As Integer
N = 5
I2cstart
I2cwbyte Lm75_adresse
I2cwbyte &H00
I2cstop
Waitms 100
Do
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 2 , 11
Lcd " "
Locate 2 , 11
Print #2 , "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad"
N = N - 1
Loop Until N < 0
'End If
'Der I2C-Bus liefert ein ERR-Bit bei Schreibfehler
If Err = 1 Or I2c_state = 0 Then
Print #2 , "Fehler I2C Bus"
End If
')
zu meinem Problem. Ich wollte mit meinem Atmega644p über I²C einen LM 75 auslesen.
soweit klappt dass auch aber Ich erhalte immer nur 125 Grad. Woran kann dass liegen ?
Ich habe schon folgendes Probiert:
- Programm geändert ( mittlerweile 2 verschiedene Programme getestet )
- PullUp widerstände am Bus geändert ( 1k5,4k7,10k )
- anderen LM75 getestet
meine Programme bisher:
$regfile = "m644pdef.dat"
$crystal = 16000000
'$sim 'Frequenz 16MhZ
$baud = 2400 'Baudrate Com1 zum PC
$baud1 = 2400
$timeout = 20000000 'Timeout für Serial In 10 Sekunden
$hwstack = 90
$swstack = 64
$framesize = 64
'$lib "i2c_twi.lbx"
'Config Twi = 100000
Dim I2c_state As Bit
Dim Hightemp As Byte
Dim Lowtemp As Byte
Dim Temperatur As Single
Const Lm75slavewrite = &H90
Const Lm75slaveread = &H91
Dim Lm75high As Byte
Dim Lm75low As Byte
'Dim Temperatur As Integer
Dim Nachkommastelle As String * 2
Dim I As Integer
Waitms 100
I2cstart
I2cwbyte Lm75_adresse
I2cwbyte &H00
I2cstop
Waitms 100
I2cstart
I2cwbyte Lm75_lese_adresse
I2crbyte Hightemp , Ack
I2crbyte Lowtemp , Nack
I2cstop
Print #2 , "high:" ; Hightemp
Print #2 , "Low:" ; Lowtemp.7
Waitms 100
If Hightemp.7 = 1 Then
Decr Hightemp
For I = 0 To 7
Toggle Hightemp.i
Next
Temperatur = -hightemp
Else
Temperatur = Hightemp
End If
Locate 3 , 1
Lcd "Erfolgreich"
Locate 4 , 4
Lcd Temperatur ; " °C"
Print #2 , Temperatur ; "°C"
Programm 2
'(I Dim N As Integer
N = 5
I2cstart
I2cwbyte Lm75_adresse
I2cwbyte &H00
I2cstop
Waitms 100
Do
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 2 , 11
Lcd " "
Locate 2 , 11
Print #2 , "Temp.: " ; Temperatur ; Nachkommastelle ; " Grad"
N = N - 1
Loop Until N < 0
'End If
'Der I2C-Bus liefert ein ERR-Bit bei Schreibfehler
If Err = 1 Or I2c_state = 0 Then
Print #2 , "Fehler I2C Bus"
End If
')