ensacom
06.11.2007, 19:48
Ich bin hier echt am verzweifeln.
Also ich habe ein RN-Board und einen Temperatursensor DS1621
Ich habe den Temperatursensor wie folgt an meinen AtMega32 angeschlossen.
DS1621 AtMega32
SDA PC1
SCL PC0
GND GND
A0 GND
A1 GND
A2 GND
VDD +5V
Folgenden Code benutze ich zum testen.
Da ich keinen RS232-Port am Laptop habe und ich mein erst heute gekauftes Display nicht anschließen kann, teste ich meinen ebenfalls heute gekauften Temperatursensor indem ich sage dass das Board, wenn eine Temperatur überschritten wird, piepen soll.
Hier der Code den ich hier im Forum gefunden habe.
'-------------------------------------------------------------------------------
'----- Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
' HR 2006
'
'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
'Auf die Auswertung negativer Temperaturen wird verzichtet.
'-------------------------------------------------------------------------------
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32
Config Scl = Portc.0
Config Sda = Portc.1
Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
Portc.1 = 1
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()
Dim Value As Word
Dim Ton As Integer
Dim Convert_strg As String * 10
Const Ds1 = 150 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------
Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print Convert_strg
Waitms 500
Loop
End
'----------------------------- Subroutinen -------------------------------------
'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte
Deviceread = Device + 1
I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop
I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop
I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen (Ganze Grad)
I2crbyte Hightemp , Nack 'MSByte holen (0,5 Grad Indikator)
I2cstop
Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If
If Hightemp > 10 Then
Ton = 550
End If
If Hightemp > 40 Then
Ton = 250
End If
End Sub
'-------------------------------------------------------------------------------
'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
'formatiert werden kann.
'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
Sub Convertvalue_komma1()
Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.0")
End Sub
'---------------------------------
Das Problem ist nun dass er ständig piept.
Bei Const Ds1 = 150 steht "gegebenenfalls anpassen"
Anpassen auf welchen Wert?
Ich hoffe mir kann einer helfen weil ich echt langsam die Geduld verliere.
Danke
Also ich habe ein RN-Board und einen Temperatursensor DS1621
Ich habe den Temperatursensor wie folgt an meinen AtMega32 angeschlossen.
DS1621 AtMega32
SDA PC1
SCL PC0
GND GND
A0 GND
A1 GND
A2 GND
VDD +5V
Folgenden Code benutze ich zum testen.
Da ich keinen RS232-Port am Laptop habe und ich mein erst heute gekauftes Display nicht anschließen kann, teste ich meinen ebenfalls heute gekauften Temperatursensor indem ich sage dass das Board, wenn eine Temperatur überschritten wird, piepen soll.
Hier der Code den ich hier im Forum gefunden habe.
'-------------------------------------------------------------------------------
'----- Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
' HR 2006
'
'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
'Auf die Auswertung negativer Temperaturen wird verzichtet.
'-------------------------------------------------------------------------------
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32
Config Scl = Portc.0
Config Sda = Portc.1
Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
Portc.1 = 1
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()
Dim Value As Word
Dim Ton As Integer
Dim Convert_strg As String * 10
Const Ds1 = 150 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------
Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print Convert_strg
Waitms 500
Loop
End
'----------------------------- Subroutinen -------------------------------------
'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte
Deviceread = Device + 1
I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop
I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop
I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen (Ganze Grad)
I2crbyte Hightemp , Nack 'MSByte holen (0,5 Grad Indikator)
I2cstop
Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If
If Hightemp > 10 Then
Ton = 550
End If
If Hightemp > 40 Then
Ton = 250
End If
End Sub
'-------------------------------------------------------------------------------
'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
'formatiert werden kann.
'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
Sub Convertvalue_komma1()
Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.0")
End Sub
'---------------------------------
Das Problem ist nun dass er ständig piept.
Bei Const Ds1 = 150 steht "gegebenenfalls anpassen"
Anpassen auf welchen Wert?
Ich hoffe mir kann einer helfen weil ich echt langsam die Geduld verliere.
Danke