oderlachs
30.05.2014, 09:34
Hallo !
Weil ich in Sachen 1-Wire in "C" nicht so gut bin , habe ich mal ein paar Beispiele aus den Foren gesucht, auch eines aus unserer Bascom Ecke hier... Wenn ich nicht wüsste das die DS18x20 intakt sind (Test mit Arduino) würde ich sagen sie sind Schrott, Temperaturen um -600, -88 oder so um +500...680 Grad sind die Anzeigen. Es kann doch nicht jedes Beispiel Irrsinnig sein.
Ich arbeite mit dem STK500 +Atmega644 , das Steckbord mit Sensor + PullUp 4,7k (o.3,3k) ist mit ca 10cm Drahtverbindern am Stk500 verbunden.
Nach einem anderen Bascom Beispiel aus dem Buch von K.Cühnel DS1920.bas, wird mir angezeigt:
þDer Temperaturwert ist 1360 Counts.
Die gemessene Temperatur ist 680 Grad Celsius
Die exakt gemessene Temperatur ist 680.00 Grad Celsius
Wo und wie kann ich nach den Fallstricken suchen ? Hat wer noch ein funktionierendes Bsp in Bascom...oder C, mir raucht es nur noch im Kopfe... ;)
Gruss und Dank
Gerhard
Anhang noch verwendetes Beispiel, ist aus diesem Forum
Es liefert NUR -88.0 Grad C
'################################################# #############
'BeispielDS18S20.bas
'
'Ein Programm für die Universalplatine RN-AVR UNIVERSAL
'
'Das Programm zeigt wie man den 3 poligen Temperatursensor
'DS18S20 ausliest. Nach dem Aufruf wird die Temperatur alle 5 Sekunden
'ausgegen. Es können auch mehrere Sensoren auf einer Leitung
'angesprochen werden.
'
' (c) 2013 Frank
'Bezug für Board und Sensor und DVD: www.robotikhardware.de (http://www.robotikhardware.de)
'Weitere Beispiele auf der Robotikhardware DVD oder
'im www.Roboternetz.de (http://www.Roboternetz.de) und rn-wissen.de
'################################################# #####################
'Portbelegung bzw. Modulverbindung
'PD3 Sensor Daten DS18S20 (nicht vergessen ein 4,7k Widerstand von PD3 nach +3,3V)
'GND Sensor GND
'3V Sensor 3V
Declare Sub Ds1820_seriennummer()
Declare Sub Ds1820_alleseriennummern()
Declare Sub Ds1820_temperatur_ausgeben()
Declare Sub Ds1820_sensor_temperatur()
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 16000000 'QuarzFrequenzuenz
$baud = 9600
Baud = 9600
Config Pind.6 = Output 'LED
Led1 Alias Portd.6
Led1 = 0 'ein
Config 1wire = Portb.0
Dim Sensordaten(9) As Byte
Dim Sensornummer(8) As Byte
Wait 2
Print "Beispielprogramm fuer RN-Avr Universal um Temperatur mit DS18S20 auszulesen"
Print "Serienummer notieren!"
Print "Einzelabruf:"
Ds1820_seriennummer
Print
Print
Print "Temperatur ausgeben:"
Do
Ds1820_temperatur_ausgeben 'Diese Funktion wenn nur ein Sensor am Bus
'Ds1820_sensor_temperatur 'Diese Funktion wenn man mehrere an gleicher
'Leitung hat und einen davon ansprechen möchte
Wait 2
Loop
' ************ Hilfsfunktionen zur Kommunikation mit dem temperatursensor DS18S20 (c) Robotikhardware.de *********
' (nähere Infos im Datenblatt des Sensors auf der www.Robotikhardeware.de (http://www.Robotikhardeware.de) DVD)
' Hilfreich auch der RN-Wissen Artikel unter http://www.rn-wissen.de/index.php/Bascom_und_1-Wire
' ************ ************** ************ ************** ************ ************** ************ **********
'Gibt die Seriennummer über RS232 aus
'diese ist in jedem Sensor eindeutig vorhanden
'sie wird nur benötigt wenn mehrere Sensoren an einer Leitung hängen
Sub Ds1820_seriennummer()
Local I As Integer
Local Crc As Byte
1wreset
1wwrite &H33 ' ROM-Befehl zum lesen der SerienNr
Sensornummer(1) = 1wread(8) ' 8 Bytes lesen
Crc = Crc8(sensornummer(1) , 7)
If Crc <> Sensornummer(8) Then Print "Daten fehlerhaft gelesen (CRC-Fehler)!"
For I = 1 To 8
Print Hex(sensornummer(i)); ' Ausgeben
Print " ";
Next
Print
End Sub
'Diese Funktion gibt Temperaturbereich +85 bis -55 mit Vorzeichen auf ein halbes Grad genau aus
'Diese Funktion ist nur geeignet, wenn nur ein Sensor am Bus liegt
'Auf Fließkommazahlen wird verzichtet
Sub Ds1820_temperatur_ausgeben()
Local Temp As Integer
Local S As String * 5
Local Crc As Byte
1wreset ' Initialisierung
1wwrite &HCC ' SKIP ROM
1wwrite &H44 ' CONVERT T / Temperaturmessung starten
Waitms 500 ' warten
1wreset ' Initialisierung
1wwrite &HCC ' SKIP ROM
1wwrite &HBE ' READ SCRATCHPAD
Sensordaten(1) = 1wread(9) ' Daten lesen
Temp = Sensordaten(1)
If Sensordaten(2) > 0 Then 'Minus Temperatur
Temp = 256 - Temp
Temp = Temp * 10
Temp = Temp / 2
Temp = 0 - Temp 'Vorzeichen -
Else
Temp = Temp * 10
Temp = Temp / 2
End If
S = Str(temp)
Print Format(s , "0.0") ; " Grad in C"
Crc = Crc8(sensordaten(1) , 8)
If Crc <> Sensordaten(9) Then Print "Daten fehlerhaft gelesen (CRC-Fehler)!"
End Sub
Weil ich in Sachen 1-Wire in "C" nicht so gut bin , habe ich mal ein paar Beispiele aus den Foren gesucht, auch eines aus unserer Bascom Ecke hier... Wenn ich nicht wüsste das die DS18x20 intakt sind (Test mit Arduino) würde ich sagen sie sind Schrott, Temperaturen um -600, -88 oder so um +500...680 Grad sind die Anzeigen. Es kann doch nicht jedes Beispiel Irrsinnig sein.
Ich arbeite mit dem STK500 +Atmega644 , das Steckbord mit Sensor + PullUp 4,7k (o.3,3k) ist mit ca 10cm Drahtverbindern am Stk500 verbunden.
Nach einem anderen Bascom Beispiel aus dem Buch von K.Cühnel DS1920.bas, wird mir angezeigt:
þDer Temperaturwert ist 1360 Counts.
Die gemessene Temperatur ist 680 Grad Celsius
Die exakt gemessene Temperatur ist 680.00 Grad Celsius
Wo und wie kann ich nach den Fallstricken suchen ? Hat wer noch ein funktionierendes Bsp in Bascom...oder C, mir raucht es nur noch im Kopfe... ;)
Gruss und Dank
Gerhard
Anhang noch verwendetes Beispiel, ist aus diesem Forum
Es liefert NUR -88.0 Grad C
'################################################# #############
'BeispielDS18S20.bas
'
'Ein Programm für die Universalplatine RN-AVR UNIVERSAL
'
'Das Programm zeigt wie man den 3 poligen Temperatursensor
'DS18S20 ausliest. Nach dem Aufruf wird die Temperatur alle 5 Sekunden
'ausgegen. Es können auch mehrere Sensoren auf einer Leitung
'angesprochen werden.
'
' (c) 2013 Frank
'Bezug für Board und Sensor und DVD: www.robotikhardware.de (http://www.robotikhardware.de)
'Weitere Beispiele auf der Robotikhardware DVD oder
'im www.Roboternetz.de (http://www.Roboternetz.de) und rn-wissen.de
'################################################# #####################
'Portbelegung bzw. Modulverbindung
'PD3 Sensor Daten DS18S20 (nicht vergessen ein 4,7k Widerstand von PD3 nach +3,3V)
'GND Sensor GND
'3V Sensor 3V
Declare Sub Ds1820_seriennummer()
Declare Sub Ds1820_alleseriennummern()
Declare Sub Ds1820_temperatur_ausgeben()
Declare Sub Ds1820_sensor_temperatur()
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 16000000 'QuarzFrequenzuenz
$baud = 9600
Baud = 9600
Config Pind.6 = Output 'LED
Led1 Alias Portd.6
Led1 = 0 'ein
Config 1wire = Portb.0
Dim Sensordaten(9) As Byte
Dim Sensornummer(8) As Byte
Wait 2
Print "Beispielprogramm fuer RN-Avr Universal um Temperatur mit DS18S20 auszulesen"
Print "Serienummer notieren!"
Print "Einzelabruf:"
Ds1820_seriennummer
Print "Temperatur ausgeben:"
Do
Ds1820_temperatur_ausgeben 'Diese Funktion wenn nur ein Sensor am Bus
'Ds1820_sensor_temperatur 'Diese Funktion wenn man mehrere an gleicher
'Leitung hat und einen davon ansprechen möchte
Wait 2
Loop
' ************ Hilfsfunktionen zur Kommunikation mit dem temperatursensor DS18S20 (c) Robotikhardware.de *********
' (nähere Infos im Datenblatt des Sensors auf der www.Robotikhardeware.de (http://www.Robotikhardeware.de) DVD)
' Hilfreich auch der RN-Wissen Artikel unter http://www.rn-wissen.de/index.php/Bascom_und_1-Wire
' ************ ************** ************ ************** ************ ************** ************ **********
'Gibt die Seriennummer über RS232 aus
'diese ist in jedem Sensor eindeutig vorhanden
'sie wird nur benötigt wenn mehrere Sensoren an einer Leitung hängen
Sub Ds1820_seriennummer()
Local I As Integer
Local Crc As Byte
1wreset
1wwrite &H33 ' ROM-Befehl zum lesen der SerienNr
Sensornummer(1) = 1wread(8) ' 8 Bytes lesen
Crc = Crc8(sensornummer(1) , 7)
If Crc <> Sensornummer(8) Then Print "Daten fehlerhaft gelesen (CRC-Fehler)!"
For I = 1 To 8
Print Hex(sensornummer(i)); ' Ausgeben
Print " ";
Next
End Sub
'Diese Funktion gibt Temperaturbereich +85 bis -55 mit Vorzeichen auf ein halbes Grad genau aus
'Diese Funktion ist nur geeignet, wenn nur ein Sensor am Bus liegt
'Auf Fließkommazahlen wird verzichtet
Sub Ds1820_temperatur_ausgeben()
Local Temp As Integer
Local S As String * 5
Local Crc As Byte
1wreset ' Initialisierung
1wwrite &HCC ' SKIP ROM
1wwrite &H44 ' CONVERT T / Temperaturmessung starten
Waitms 500 ' warten
1wreset ' Initialisierung
1wwrite &HCC ' SKIP ROM
1wwrite &HBE ' READ SCRATCHPAD
Sensordaten(1) = 1wread(9) ' Daten lesen
Temp = Sensordaten(1)
If Sensordaten(2) > 0 Then 'Minus Temperatur
Temp = 256 - Temp
Temp = Temp * 10
Temp = Temp / 2
Temp = 0 - Temp 'Vorzeichen -
Else
Temp = Temp * 10
Temp = Temp / 2
End If
S = Str(temp)
Print Format(s , "0.0") ; " Grad in C"
Crc = Crc8(sensordaten(1) , 8)
If Crc <> Sensordaten(9) Then Print "Daten fehlerhaft gelesen (CRC-Fehler)!"
End Sub