Bascom: Brauche Hilfe bei bestimmten DS1820 auswählen

OP #1890231
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
Gast
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
OP
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
OP
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;)
Gast
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.
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.