Hallo zusammen Ich brauche für eine Temperaturregelung 2 Temperatursensoren des Typs DS1820. Ich bin schon soweit, dass ich die beiden Adressen der 2 Sensoren herausfinden konnte. In ASCII Code lauten die: 1010734AB40108002C 10102F129D01080037 $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0 Config 1wire = Porta.0 Dim A(8) As String * 20 Dim B(8) As Byte Dim I As Byte A(1) = 1010734ab40108002c Do 1wverify A(1) If Err = 0 Then Cls Lcd "DS1820 angeschlossen" End If Loop End So, was mach ich falsch?:D weil wenn das hier klappt kann ich endlich weitermachen:D Liebe Grüsse
Hallo Marius M. schrieb: > Ich bin schon soweit, dass ich die beiden Adressen der 2 > Sensoren herausfinden konnte. In ASCII Code lauten die: > > 1010734AB40108002C > 10102F129D01080037 Das sind keine ASCII Codes sondern Hex-Zahlen. Dem entsprechend muss A() ein Byte-Arry sein und nicht String. Gruß John
Hi John
ich bekomms nicht gebacken. Hab jetzt A in ein Byte umgewandelt, jetzzt
siehts so aus:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 ,
Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0
Config 1wire = Porta.0
Dim A(8) As Byte
A(1) = 1010734ab40108002c
Do
1wverify A(1)
If Err = 0 Then
Cls
Print "DS1820 angeschlossen"
Else
Print "Nicht angeschlossen"
Wait 3
End If
Loop
End
Natürlich bekomm ich jetzt aber ne fehlermeldung...
Kannst du mir nicht mal einen Fehlerfreien Codeschnipsel geben und
erläutern?:) wär echt super:)
Hier mal Codeschnipsel aus meinem Datenlogger. Es sind nicht alle
Variablen deklariert, sollte aber reichen zum Verständnis.
' Variablen für Sensoren
Dim Reg_no(10) As Byte
Dim Chip_data(8) As Byte
Dim Chip As Byte
Dim Temperatur As Integer
Dim Chip_anz As Byte
$eeprom
Data 0
Chiplist:
' 3 Chips mit Seriennummer defaultmässig im EEPROM
Data 3
Data &H10 , &HB0 , &H9A , &H65 , &H01 , &H08 , &H00 , &H3A
Data &H10 , &H7E , &HD8 , &H7E , &H01 , &H08 , &H00 , &H70
Data &H10 , &HA1 , &H0A , &H7F , &H01 , &H08 , &H00 , &HC2
$data
'################## Messung anstossen
1wreset ' reset the bus
1wwrite &HCC ' skip rom
1wwrite &H44 ' Start Convert
Temperatur
Waitms 500 ' etwas warten
' dann wollen wir mal die 1W-Chips auslesen
Readeeprom Chip_anz , Chiplist
If Chip_anz = 255 Then Chip_anz = 0
For Chip = 1 To Chip_anz
Gl_temp = Chip - 1
Gl_temp = Gl_temp * 8
Incr Gl_temp
For Gl_count = 1 To 8
Incr Gl_temp
Readeeprom Chip_data(gl_count) , Gl_temp
Next Gl_temp
1wverify Chip_data(1)
If Err = 0 Then
1wwrite &HBE
Reg_no(1) = 1wread(9) 'read bytes into
ar
Temperatur = Makeint(reg_no(1) , Reg_no(2))
Temperatur = Abs(temperatur)
Temperatur = Temperatur / 2
End If
Next Chip_anz
#####################
' SCANNING 1WIRE-BUS
Chip_anz = 0
Gl_errorcount = 0
Do
If Chip_anz = 0 Then
Chip_data(1) = 1wsearchfirst()
Else
Chip_data(1) = 1wsearchnext()
End If
If Err = 0 Then
1wverify Chip_data(1)
If Err = 0 Then
Incr Chip_anz
Print "Chip " ; Chip_anz ; " ID: ";
Gl_temp = Chip_anz - 1
Gl_temp = Gl_temp * 8
Incr Gl_temp
For Gl_count = 1 To 8
Print Hex(chip_data(gl_count)) ; " ";
Incr Gl_temp
Writeeeprom Chip_data(gl_count) , Gl_temp
Next Gl_temp
Gl_errorcount = 0
Print ""
Else
Print "ERROR VERIFY, CHIP IGNORED " ; Gl_errorcount
Err = 0
Incr Gl_errorcount
If Gl_errorcount = 100 Then Err = 1
End If
Else
Incr Gl_errorcount
If Gl_errorcount = 100 Then Err = 1
End If
Loop Until Err = 1
Print "FOUND " ; Chip_anz ; " DEVICES"
Writeeeprom Chip_anz , Chiplist
Hallo Bastelbaer, leider nicht Aber vielleicht kannst du mir ja eine, für dich sicher einfache, Frage beantworten: mit dem Codeschnipsel bekomm ich ja die Adresse des Chips und zwar im Hex-Format Dim A(8) As Byte Dim I As Byte A(1) = 1wsearchfirst() For I = 1 To 8 ' Print A(i); Next End soweit richtig? Das Programm liefert mir: 1?161157418018044 (was macht das fragezeichen da?) In meinem fertigen Programmm will ich dann ja auswählen können, mit welchem Chip ich gerade kommunizieren möchte. Wieso klappt es nicht, wenn ich schreibe: A(1) = 1?161157418018044 Kannst du mir sagen, wie ich das schreiben muss, dass ich oben in meinem Programm definieren kann A=chip 1 B= Chip 2 usw? bin leider aus deinen schnipseln nicht schlau geworden;)
Hallo Marius, ich kenne mich mit BASCOM nicht so aus, aber sollte es nicht A(1) = &H1010734ab40108002c heissen, damit der Compiler weiß, dass es sich um einem Hex-Wert handelt? (Ist es in BASOM überhaupt möglich einem Byte-Arry direkt einen n-Byte Hex-Wert zuzuweisen?) Was für eine Fehlermeldung bekommst Du? Die BASCOM Kenner können bestimmt etwas damit anfangen und Dir dann weiterhelfen. Hier gibt es ein Beispiel: http://www.rn-wissen.de/index.php/Bascom_und_1-Wire Gruß John
Also das Fragezeichen macht mich jetzt etwas stutzig. Sollte nicht
kommen.
Probier mal folgendes
A(1) = 1wsearchfirst()
For I = 1 To 8 '
Print hex(A(i));" ";
Next
Print
End
Dann solltest du die Adresse des 1820 in Hex-Darstellung sehen.
' Zum Auslesen folgender Code. Bei den Variablen die einzelnen Werte der
' obrigen Ausgabe eintragen.
A(1)=&H10
A(2)=&HB0
A(3)=&H9A
A(4)=&H65
A(5)=&H01
A(6)=&H08
A(7)=&H00
A(8)=&H3A
' Hier wird der Chip angesprochen
1wverify A(1)
If Err=0 Then
' Hier das Auslesen anwerfen
1wwrite &HBE
' und auslesen
Reg_no(1) = 1wread(9)
' CRC-Check 9.Byte ist CRC-Summe der Daten
If Reg_no(9) = Crc8(reg_no(1) , 8) Then
' Hier auswerten
End If
Else
Print "Error"
End If
Hast du auch den Widerstand der 1wire-Leitung richtig dimensioniert? Ich
musste schon je nach Leitungslänge und Anzahl der Sensoren auf bis zu 1k
runtergehen.
Hi john und joachim
am eende hats dann der Code von Joachim, gebracht:) danke vielmals euch
beiden, hab zwar nen ganzen Tag für sone einfache Aufgabe gebraucht,
dafür läufts jetzt:D
Danke:D
hier der "fertige" Code, wobei der Teil zum herausfinden der Adresse
ausser Gefecht gesetzt ist, indem er als Kommentar markiert wurde
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 ,
Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0
Config 1wire = Porta.0
Dim A(8) As Byte
Dim B As String * 20
Dim I As Byte
A(1) = &H10
A(2) = &H73
A(3) = &H4A
A(4) = &HB4
A(5)=&H01
A(6)=&H08
A(7)=&H00
A(8) = &H2C
'A(1) = 1wsearchfirst()
'For I = 1 To 8 '
' Print hex(A(i));" ";
'Next
'Print
'
'End
Do
1wverify A(1)
If Err = 0 Then
Cls
Lcd "DS1820 angeschlossen"
Wait 3
Else
Cls
Lcd "Nicht angeschlossen"
Wait 3
End If
Loop
End
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.