PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim I²C Bus



Raucher91
11.01.2015, 15: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
')

Raucher91
11.01.2015, 19:17
Hat keiner eine Idee woran dass liegen könnte?

WL
11.01.2015, 19:56
Hat keiner eine Idee woran dass liegen könnte?

Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit

Searcher
11.01.2015, 19:56
Hallo,





Const Lm75slavewrite = &H90
Const Lm75slaveread = &H91
I2cwbyte Lm75_adresse
I2cwbyte Lm75_lese_adresse


mit dem LM75 kenne ich mich nicht aus aber welche Adresse schickst du zum LM75? Ich kann nicht sehen, wo die Variablen Lm75_adresse und Lm75_lese_adresse belegt werden.

Gruß
Searcher

Raucher91
11.01.2015, 21:31
Hey also Lm75_adresse ist auch &H90 bzw Lm75_lese_adresse ist &H91.

Hab ich jetzt nur vergessen mit zu kopieren. Ist aber alles 1zu1 aus meinem Buch übernommen bzw aus dem netzt übernommen aber es funktioniert weder das erste noch das 2.Programm

Unregistriert
02.03.2015, 06:57
Hallöchen, ich könnte mir vorstellen, dass dein Bus eine zu hohe Frequenz hat. Im Programm "config twi=100000" gibt 100kHz. Versuche mal "config twi=10000".

Sauerbruch
02.03.2015, 12:29
Und die Adress-Pins (5, 6, 7) liegen auch sicher auf GND??