-         

Ergebnis 1 bis 6 von 6

Thema: DS1820, suche ID-Nummern der Sensoren die Alarm Flag gesetz

  1. #1
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20

    DS1820, suche ID-Nummern der Sensoren die Alarm Flag gesetz

    Anzeige

    Wie kann ich gezielt diejenigen Sensoren herausfinden, bei denen ein Alarmflag gesetzt ist? Auch hier sind mehrere Sensoren vom Typ DS1820 am 1-Drahtbus.
    .
    .
    .
    1WRESET
    1WWRITE Alarm_search [&HEC]
    ?
    ?
    ?

    …jetzt sollten die ID-Nrn. der Sensoren anstehen bei denen ein Alarmtemperaturwert (Scratchpad Byte 2 und 3) überschritten wurde...


    Aber wie kann ich sie lesen bzw. speichern ??


    Giebt es vielleicht ein Beispiel?

    Beste Gruesse
    Claus Mehrholz

  2. #2
    Gast
    natürlich mit nem 1wread befehl, aber ich muss erstmal drüber nachdenken, wie man mehrere id-s gleichzeitig ausliest, die teile senden dann ja ihre id....
    ne aushilfslösung wenns dringend wäre, wäre sicherlich, das du es entweder manuell machst, oder aber, das du jedem einzeln sagst, er soll ne temp-conv machen, und danach fragst, ob er nen alarm hat, dann wüsstest du ja erstmal wer, ich werd mir aber nochmal gedanken machen

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    sorry, war ich ^^
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  4. #4
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20
    tja, das dachte ich auch, das der 1wread befehl der richtige ist...
    ist er auch, und doch kriege ich es nicht hin. Habe mal den Code
    wie ich ihn bisher habe angehängt.

    Wie bring ich denn den Code hier in ein Fenster?
    Beste Grüße Claus
    Angehängte Dateien Angehängte Dateien

  5. #5
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20
    Code:
    ' #############################################################################
    ' Zweck         :  Lesen der Alarm ID Nummern der DS1820 Sensoren am 1-Draht Bus
    '               :  mit AVR Mega 32 auf STK 500 Bord
    '
    ' Programm Name :  C:\CMH\Eigene Dateien\AVRs\AVR_Bascom\...
    ' noch Progname :  ...\Test_Progs\DS1820_Alarm_Sens_suchen.bas
    ' Stand         :  28.10.2005
    '
    '
    ' Beschreibung  :  Den mittl. Pin des Temperatursensors mit PortD.0 verbinden.
    '                  Pull Up Widerstand 4,7 kOhm zwischen PortA.0 und + 5 Volt
    '                  nicht vergessen!
    ' ____________________________________________________________________________
    
    $regfile = "m32def.dat"
    ' Crystal = Taktfrequenz in Hz
    
    $crystal = 3686400
    $baud = 9600
    Config 1wire = Porta.0                  ' config  PORTD.0 as 1-Wire Bus pin
    
    ' Definition der Konstanten zum Aufruf der DS1820 Befehle
    Const Read_rom = &H33                   'Read Rom
    Const Skip_rom = &HCC                   'Skip Rom
    Const Convert_t = &H44                  'Convert T
    Const Read_ram = &HBE                   'Read Sratchpad
    Const Write_ram = &H4E                  'Write Scratchpad
    Const Copy_ram = &H48                   'Copy Scratchpad
    Const Recall_ee = &HB8                  'Recall E²
    Const Read_power = &HB4                 'Read Power Supply
    Const Match_rom = &H55                  'Match Rom
    Const Alarm_search = &HEC               'Alarm Search
    Const Search_rom = &HF0                 'Search Rom
    '
    Dim I As Byte                           ' Index für Zählschleife
    Dim Anz_dev As Byte                     ' Anzahl der angeschlossenen Sensoren
    Dim Busy As Byte                        ' Warte-Variable
    Dim Sens_id_1(8) As Byte                ' Sensor No 1 ID
    Dim Sens_id_2(8) As Byte                ' Sensor No 2 ID
    Dim Sens_id_3(8) As Byte                ' Sensor No 3 ID
    Dim Alarm_id_1(8) As Byte                ' Sensor No 1 Alarm ID
    Dim Alarm_id_2(8) As Byte                ' Sensor No 2 Alarm ID
    Dim Alarm_id_3(8) As Byte               ' Sensor No 3 Alarm ID
    Dim Scrp1(9) As Byte                    ' Sceatchpad Sensor 1
    Dim Scrp2(9) As Byte                    ' Sceatchpad Sensor 2
    Dim Scrp3(9) As Byte                    ' Sceatchpad Sensor 3
    
    
    ' --- P r o g r a m m   A n f a n g --- lesen der ID Nrn. am Bus ---
    
    Anz_dev = 1wirecount()
    Print                                   ' nur Zeilenvorschub
    Print                                   ' nur Zeilenvorschub
    Print " Folgende - " ; Anz_dev ; " - Sensoren sind am Bus: "
    Print
    Print " Sens ID von Temperatur Sensor 1 =  ";
    Sens_id_1(1) = 1wsearchfirst()          ' 64 Bit-ID des ersten Sensors ermitteln
    For I = 1 To 8
       Print Hex(sens_id_1(i)) ;            ' Print Id Nr. von Sensor 1
    Next
    Print
    Print " Sens ID von Temperatur Sensor 2 =  ";
    Sens_id_2(1) = 1wsearchnext()           ' 64 Bit-ID d. weiteren Sens. ermitteln
    For I = 1 To 8
       Print Hex(sens_id_2(i));             ' Print Id Nr. von Sensor 2
    Next
    Print
    Print " Sens ID von Temperatur Sensor 3 =  ";
    Sens_id_3(1) = 1wsearchnext()
    For I = 1 To 8
       Print Hex(sens_id_3(i));             ' Print Id Nr. von Sensor 3
    Next
    Print
    
    '----- Setzen von drei Alarm Werten --------------------------------------
    '----- die Werte sollen so gewählt sein, dass mind. ein Alarm ansteht ----
    1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
    1wverify Sens_id_1(1)                   ' gezieltes ansprechen von Sensor 1
    1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
    1wwrite 27                              ' Alarm wenn Temp höher als 27
    1wwrite 23                              ' Alarm wenn Temp tiefer als 23
    
    1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
    1wverify Sens_id_2(1)                   ' gezieltes ansprechen von Sensor 2
    1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
    1wwrite 52                              ' Alarm wenn Temp höher als 52
    1wwrite 50                              ' Alarm wenn Temp tiefer als 50
    
    1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
    1wverify Sens_id_3(1)                   ' gezieltes ansprechen von Sensor 3
    1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
    1wwrite 11                              ' Alarm wenn Temp höher als 11
    1wwrite 44                              ' Alarm wenn Temp tiefer als 44
    1wreset
    1wwrite Skip_rom
    1wwrite Convert_t
       Do                                   ' Warteschleife um Temp. Wandlung im DS1820 abzuwarten
          Busy = 1wread()                   ' Solange Busy ungleich &HFF; Wandlung läuft noch
       Loop Until Busy = &HFF               ' Temperaturwandlung fertig wenn Busy = &HFF
    1wreset
    
    
    '----- Suchen der Sensoren mit gesetztem Alarmflag ------------------
    
    '----- A b -- h i e r -- k l a p p t -- e s -- n i c h t !!! --------
    '--------------------------------------------------------------------
    1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
    1wwrite Alarm_search                    ' Alarm ID's feststellen
    Alarm_id_1(1) = 1wread(8)               ' speichern der Alarm ID's 8 Bytes
    Alarm_id_2(1) = 1wread(8)               ' von evtl. allen Sensoren
    Alarm_id_3(1) = 1wread(8)               '  --- " ---"
    1wreset
    
    '----- Printen der ID-Nummern mit gesetztem Alarmflag ---------------
    '----- Es kommt nur FF FF FF FF FF FF FF FF heraus ------------------
    For I = 1 To 8
    Print Hex(Alarm_id_1(i)) ; " ";          ' Print ID's der Sensoren mit Alarn
    Next
    Print
    For I = 1 To 8
    Print Hex(Alarm_id_2(i)) ; " ";
    Next
    Print
    For I = 1 To 8
    Print Hex(Alarm_id_3(i)) ; " ";
    Next
    Print
    
    End

  6. #6
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20
    Hallo zusammen,

    klappt noch immer nicht, hat denn niemend hier mal diese Alarmflag setzerei bei Temperatur Über- oder Unterschreitung mit mehreren Sensoren DS 1820 genutzt bzw. ausprobiert?

    Ich quäle mich schon zeit drei Wochen fast täglich damit herrum und kommme einfach nicht weiter.

    Meine allerbesten Sonntagsgrüße aus Bad Honnef
    Claus Mehrholz

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •