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.