PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DS1621 auselse Probleme!



placasoft
27.01.2008, 14:49
Hey,

hab seit monaten meine MiniControl wieder rausgekrammt, da ich jetzt wieder Verwendung dafür habe.

Ich hab mir kurz einen Code zum auslesen des DS1621 über i2c geladen und drauf geflasht! Komischer weiße sind bei mir aber low und high temp immer 255. Der DS1621 ging aufjeden fall damals, hab auch nichts an der Verlötung geändert, an was kann das liegen?

Hier der Code :

$regfile = "m168def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32

$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI

Config Scl = Portc.5 ' we need to provide the SCL pin name
Config Sda = Portc.4 ' we need to provide the SDA pin name

I2cinit ' we need to set the pins in the proper state

Config Twi = 100000 ' wanted clock frequency
'will set TWBR and TWSR
'Twbr = 12 'bit rate register
'Twsr = 0 'pre scaler bits

Dim T As Word
Declare Sub Readtemp

Do
Call Readtemp()
Loop
End

Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte

Deviceread = Device + 1

'I2csend , Device , &HEE 'kürzere Source, längerer Code

I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop

'I2csend , Device , &HAA 'kürzere Source, längerer Code

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen
I2crbyte Hightemp , Nack 'MSByte holen
I2cstop

Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If
Print Value

End Sub

Jetzt schon mal danke für eure Hilfe!

MfG
Placa

PicNick
27.01.2008, 16:30
"FF" heisst auf "I2C" eigentlich "NIX".
Überprüf mal, ob er überhaupt auf seine Adresse reagiert.


EDIT: Wo definierst du denn überhaupt die Adresse ?


Noch'n edit:


Call Readtemp()
Loop
End

Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte


Wenn du das so machst, ist ja garkeine adresse da

Call Readtemp()

sollte doch sein


Call Readtemp( &Hxx )

placasoft
28.01.2008, 18:46
Wie finde ich die Adresse heraus?

MfG
Placa

placasoft
30.01.2008, 09:11
Kann mir niemand helfen?


MfG
Placa

PicNick
30.01.2008, 09:41
Adresse ist "&H90", wenn A0 = A1 = A2 = 0.
I2C--> &H90 = schreiben &H91 = lesen

Du kannst den DS1621 wie den LM75 behandeln.
https://www.roboternetz.de/wissen/index.php/Sensorarten#Programm-Beispiel_f.C3.BCr_LM75

kalletronic
21.02.2008, 22:29
Hi, hab den DS1621 auch grad probiert, aber mir scheint daß die Temperatur irgendwie nich ganz stimmt. Wenn sonst keine äußeren Temperatureinflüsse da sind dann müßte er mir doch die Raumtemperatur anzeigen, er zeigt aber 255 an. Wenn ich jetzt den Finger draufdrücke, dann steigt die angezeigte Temperatur von 0 auf ca 30 an, wenn ich den Finger wieder weg nehme dann zeigts mir im Terminal wider 255 an. Kann es sein daß bei der Umrechnung etwas nich stimmt?



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32

$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI

Config Scl = Portc.5 ' we need to provide the SCL pin name
Config Sda = Portc.4 ' we need to provide the SDA pin name

I2cinit ' we need to set the pins in the proper state

Config Twi = 100000 ' wanted clock frequency
'will set TWBR and TWSR
'Twbr = 12 'bit rate register
'Twsr = 0 'pre scaler bits

Dim T As Word
Declare Sub Readtemp(byval Device As Byte)

Do
Call Readtemp(&H90)
Wait 1
Loop
End

Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte
Local Value As Byte
Deviceread = Device + 1

'I2csend , Device , &HEE 'kürzere Source, längerer Code

I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop

'I2csend , Device , &HAA 'kürzere Source, längerer Code

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen
I2crbyte Hightemp , Nack 'MSByte holen
I2cstop

Print "Lowtemp " ; Lowtemp
Print "Hightemp " ; Hightemp


Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If
Print Value

End Sub

kalletronic
21.02.2008, 23:34
Problem gelöst, nach 2-3mal ins datenblatt geschaut hab ich gemerkt, daß in der Variable Highbyte die Stelle nach dem Komma steht