- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 88

Thema: mehrere DS18S20 an einem 1 wire Bus

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    39
    Beiträge
    685
    Anzeige

    Powerstation Test
    Hallo Berni28,

    ich habe leider sogut wie keine Ahnung von Bascom (für solche komplizierteren Aufgaben) und arbeite mich erstmal in C ein.

    Das o.g. Programme habe ich rein aus logischen Aspekten aus den 2 einzelnen Programmen zusammenbekommen.
    Mit dem ersten Programm konnte man einen DS18S20 auf Kommastelle genau anzeigen lassen (durch auslesen der einzelnen Bit's und einer Tabelle) und mit dem 2. Programm 2 Sensoren ohne Kommastelle. Warum man aber genau den Sensor so ausliest, kann ich dir (noch )nicht sagen

    Gruß
    Stefan

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    52
    Beiträge
    97
    Aha,
    sieht aber richtig professionell aus

    Ich verwende Bascom, da ich seinerzeit unheimlich viel mit VisualBasic programmiert hatte. Die Befehle sind sich sehr ähnlich. Dafür tu ich mir mit C sehr schwer (Buch mit sieben Siegeln und so ...).

    Mal sehen, vielleicht weiß noch jemand was dazu.
    Gruß, Berni.
    www.befi-tec.de

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    52
    Beiträge
    97
    Hab gerde bei den Application Notes bei Maxim etwas gestöbert und nützliche Programm-Code-Schnipsel (allerdings dürfte das C sein) gefunden !
    Hier kommt Ihr dorthin:
    http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2815
    Gruß, Berni.
    www.befi-tec.de

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo zusammen,
    in meiner Heizungsteuerung habe ich auch mehrere DS1820 verbaut.
    Dazu habe ich auch die angegebenen Codeschnipsel verwendet, die jemand dankenswerter Weise eingestellt hat.

    Allerdings sieht man in allen Programmen, die ich gesehen habe, dass in einem Loop die Sensoren abgefragt werden. Das geht immer mit resetten, ID übertragen, Konvertierung starten, WARTEN, resetten, ID übertragen, Werte einlesen.
    Warten fällt mir immer schwer, besonders weil mein Controller was tun soll. Also habe ich das so abgeändert, dass ich zu Anfang alle Sensoren konvertieren lasse. In meinem Loop wird dann erst eingelesen und dann sofort wieder die Konvertierung gestartet. -> keine Wartezeit. Der Loop ist bei mir der SecTic der Uhr, also jede Sekunde!

    Außerdem frage ich nicht jedesmal ab, welche Sensoren auf dem Bus liegen. Wenn man das einmal gemacht hat, kann man die IDs auch fest ins EEPROM schreiben. Ich möchte ja schließlich sicher sein, welchen der Sensoren ich gerade abfrage. Dazu vergleiche ich entweder seine ID mit einer vorgegebenen oder ich gebe die direkt an. Ansonsten fehlt mal einer wegen Wackler und schon sind alle Werte durcheinander.

    Gruß Rolf

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    52
    Beiträge
    97
    Hallo for_ro,
    hab das gestern mal mit 3 Sensoren und 'nacheinanderkopieren' ausprobiert:
    Es funktioniert zwar, ist aber nicht wirklich einfach. Ich bin noch nicht dahintergekommen, wie er die Sensoren sortiert. Da werde ich mal Deinen Gedanken auffassen und die entsprechenden Seriennummern hinterlegen. Erst dann kann ich definitiv sagen: Sensor 1 ist Temperatur 1 usw.
    Das mit den Wartezeiten ist auch so 'ne Sache. Für eine Heizungssteuerung reicht das zwar leicht, wenn ich aber eine schnellere Rückmeldung oder höhere Temperaturen brauche, muß ich auf ein anderes Meßsystem übergehen. Ich hab mir mal einen PT1000 in einer Wheastone-Brücke durchgerechnet. Der macht bei einem Temperaturunterschied von -30...+100°C (=130K) eine Spannungsänderung von 0,0713...1,3563V bei 5V Nennspannung.
    Aber irgendwie werde ich da jetzt auch nicht wirklich schlau draus. Hab ich zehn Sensoren auszuwerten, brauch ich ja einen imensen Vorschaltungsaufwand. Unsere Heizungssteuerung kann bis zu 15 Sensoren verarbeiten und hat auf einer Eurokarte platz. Nur wie die das machen kann ich leider nicht sehen (wg. Garantie versiegelt).

    Ps.: Kannst du mir mal deinen Code posten ?
    Gruß, Berni.
    www.befi-tec.de

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Berni,
    irgendwo habe ich mal gelesen, dass man höchstens 16 Sensoren an einen 1wire-Bus hängen kann. Aber der Controller kann ja mehrere Busse ansprechen. Schau mal hier http://s-huehn.de/elektronik/tempmess/tempmess-sm.htm

    Zur Sortierung habe ich ehrlich gesagt keine Ahnung wie das geht, ist auch völlig egal. Du willst in der Regel immer wissen, welcher Sensor dir gerade welche Temperatur liefert. Also kannst du dich nicht auf die Sortierung verlassen. Lass dir in dem Loop die Temperaturen ausprinten und erwärme dann einen Sensor nach dem anderen. Dann weißt du welcher Sensor welche ID hat und schreib einen eindeutigen Teil auf jeden drauf.

    Bei den Wartezeiten geht es mir mehr darum, die Reihenfolge umzudrehen. Nicht Konvertierung anfragen, warten, Wert übertragen sondern Wert übertragen, Konvertierung anfragen und dann sinnvolle andere Sachen tun. Dazu muss natürlich ganz am Anfang zuerst einmal konvertiert werden, sonst ist die erste Anzeige Müll.

    Die schnellere Rückmeldung ist doch mehr eine Frage der Trägheit des Sensors, was sehr stark vom Gehäuse abhängt, das ja mit erhitzt oder gekühlt werden muss. Ich kann jede Sekunde einen Wert bekommen und nebenbei noch vieles andere tun. Und dafür brauche ich nur einen Pin des Controllers. Die PT1000 kannst du nur über die AD Eingänge abfragen. Wenn du das mal mit vernünftiger Genauigkeit versucht hast, lernst du die DS1820 schätzen. Und kalibriert sind die auch schon. Meine 5 habe eine Abweichung von 0.2 Grad, wenn ich sie alle nebeneinander halte. Das wirst du mit den PTs kaum schaffen. Den einzigen Nachteil, den ich wirklich sehe ist die Beschränkung auf 125°, was bei der Heizung aber uninteressant ist.
    Interessant sind übrigens auch die I²C Sensoren, wie der LM75, allerdings mit viel mehr Leitungen. Die habe ich aber noch nicht ausprobiert.

    Ich schau mal, ob ich die relevanten Teile aus dem Programm kopieren kann. Allerdings weiß ich auch noch nicht, wie man den Code hier einstellt. Kann also etwas dauern.

    Gruß Rolf

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    52
    Beiträge
    97
    ... interessante Schaltung. Danke für den Tipp !

    Das mit der Trägheit ist klar, die habe ich ja bei jedem Sensor. Für eine erste Messung habe ich gestern mal zwei Sensoren mit 'nem Kabelbinder auf die Kühlkörper (KK) geschnallt. Soweit hat das auch gut funktioniert, da sich die KK's langsam erwärmt hatten.

    Für die PT's (multi Analaogmessung) werden die AVR's wohl eh zu langsam sein. Da wird man ARM's nehmen müssen (allein schon wegen der Mittelwertberechnungen um einen halbwegs stabilen Meßwert zu bekommen).

    Ich hab aber auch was gelesen, daß man die DS's in einen continous conversation Betrieb versetzen kann. Sprich die konvertieren laufend und man muß nur den Rom auslesen. Bei welcher Serie das geht, müsste ich aber nochmal explizit nachlesen (hab nur DS1820er).

    Das mit der Seriennummer draufschreiben ist bei einem schwarzen TO-92 Gehäuse eine kitzlige Angelegenheit. Ich hab mir deshalb einen Silberstift besorgt und eine laufende Nummern auf den Kopf geschrieben. Das geht gerade so daß mann's noch lesen kann. Seitlich macht's wenig Sinn, da man diese Fläche sinnvoller Weise als Kontaktfläche verwendet.

    Was den Code anbelangt:
    Du klickst einfach oben auf den Knopf CODE fügst den Programmcode hier ein und drückst wieder auf CODE. Das wird zwar in dem Eingabefenster ein riesen Text, wenn du's gepostet hast siehts aber so wie weiter oben in diesem Thread aus.
    Gruß, Berni.
    www.befi-tec.de

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    so hier mal der Code. Ich habe alles rausgeschmissen, was uninteressant ist.

    Code:
    $crystal = 16000000
    $regfile = "m128def.dat"
    
    Config 1wire = Portd.5                                      'DS1820
    
    Match_rom Alias &H55
    Read_scratchpad Alias &HBE
    Start_conversion Alias &H44
    Aussen Alias 0
    Boiler Alias 1
    Kessel Alias 2
    Rücklauf Alias 3
    Vorlauf Alias 4
    
    Dim Read_temp As Integer
    Dim Sensor_ids(40) As Byte
    Dim Id As Byte
    Dim Offset As Byte
    Dim Ds_array(7) As Byte
    Dim Bruchteil As Single
    Dim Temperatur As Single
    Dim I As Integer
    
    Config Graphlcd = 240 * 128 , Dataport = Portc , Controlport = Porta , Ce = 4 , Cd = 5 , Wr = 2 , Rd = 3 , Reset = 7 , Fs = 6 , Mode = 6
    Cursor Off
    Cls
    
    For Id = 1 To 40                                            'Einlesen der 5 Sensoren IDs (5*8 Byte)
       I = Id - 1
       Readeeprom Sensor_ids(id) , I
    Next Id
    
    Do
       Wait 1
       For Id = Aussen To Vorlauf
          Offset = Id * 8
          Offset = Offset + 1                                   'Offset geht auf 1, 9, 17, 25 und 33
          1wreset                                               'hier wird der Temperaturwert eingelesen
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8                        '8 Byte ID wird übertragen
          1wwrite Read_scratchpad
          For I = 1 To 7                                        'nur bis 7, weil 8 und 9 uninteressant
             Ds_array(i) = 1wread()
          Next I
          Read_temp = Makeint(ds_array(1) , Ds_array(2))
          1wreset                                               'jetzt wird wieder die Konvertierung gestartet
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8
          1wwrite Start_conversion
          Shift Read_temp , Right
          If 127 < Read_temp Then Read_temp = Read_temp - 32767
          Bruchteil = 16 - Ds_array(7)
          Bruchteil = Bruchteil / 16
          Bruchteil = Bruchteil - 0.25
          Temperatur = Read_temp + Bruchteil
          Locate 11 , 1 : Lcd "  Auss Boil Kess Rück Vorl "
          Select Case Id
          Case Aussen:
             Locate 12 , 2 : Lcd Fusing(temperatur , "#.#")
          Case Boiler:                                          'ausgabe im Display ist dann z.B.
             Locate 12 , 8 : Lcd Fusing(temperatur , "#.#")     '  Auss Boil Kess Rück Vorl
          Case Kessel:                                          ' 14.4  52.4 67.3 43.0 62.8
             Locate 12 , 13 : Lcd Fusing(temperatur , "#.#")
          Case Rücklauf:
             Locate 12 , 18 : Lcd Fusing(temperatur , "#.#")
          Case Vorlauf:
             Locate 12 , 23 : Lcd Fusing(temperatur , "#.#")
          End Select
       Next Id
    Loop
    End
    
    $eeprom
    
    Data &H10 , &H50 , &H4F , &HE3 , &H00 , &H08 , &H00 , &HE4
    Data &H10 , &HFD , &HE8 , &HE2 , &H00 , &H08 , &H00 , &H1F
    Data &H10 , &H44 , &H42 , &HFF , &H00 , &H08 , &H00 , &HA5
    Data &H10 , &H1D , &H14 , &HE3 , &H00 , &H08 , &H00 , &H3E
    Data &H10 , &HB0 , &HEF , &HE2 , &H00 , &H08 , &H00 , &H71
    Vielleicht kann jemand was damit anfangen.
    Wie gesagt, bei mir wird das Ganze aus der SecTic Int -Routine aufgerufen. Da will ich dann lieber keine Zeit verschwenden.

    Gruß Rolf

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    $eeprom?

    Hallo,
    ich habe noch nichts mit eeProm gemacht. Kann mir einer kurz erklären was es mit $eeprom auf sich hat? Ist das irgendwie eine Speicherzuordnung? Welche Daten werden dort wofür gespeichert?

    vielen Dank, Tobias


    $eeprom

    Data &H10 , &H50 , &H4F , &HE3 , &H00 , &H08 , &H00 , &HE4
    Data &H10 , &HFD , &HE8 , &HE2 , &H00 , &H08 , &H00 , &H1F
    Data &H10 , &H44 , &H42 , &HFF , &H00 , &H08 , &H00 , &HA5
    Data &H10 , &H1D , &H14 , &HE3 , &H00 , &H08 , &H00 , &H3E
    Data &H10 , &HB0 , &HEF , &HE2 , &H00 , &H08 , &H00 , &H71

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Ach so,
    noch eine Frage:

    wozu ist diese Tabelle?

    Crc8:
    Data 0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156
    Data 126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127
    Data 252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96
    Data 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160
    Data 225 , 191 , 93 , 3 , 128 , 222 , 60 , 98 , 190 , 224
    Data 2 , 92 , 223 , 129 , 99 , 61 , 124 , 34 , 192 , 158
    Data 29 , 67 , 161 , 255 , 70 , 24 , 250 , 164 , 39 , 121
    Data 155 , 197 , 132 , 218 , 56 , 102 , 229 , 187 , 89 , 7
    Data 219 , 133 , 103 , 57 , 186 , 228 , 6 , 88 , 25 , 71
    Data 165 , 251 , 120 , 38 , 196 , 154 , 101 , 59 , 217 , 135
    Data 4 , 90 , 184 , 230 , 167 , 249 , 27 , 69 , 198 , 152
    Data 122 , 36 , 248 , 166 , 68 , 26 , 153 , 199 , 37 , 123
    Data 58 , 100 , 134 , 216 , 91 , 5 , 231 , 185 , 140 , 210
    Data 48 , 110 , 237 , 179 , 81 , 15 , 78 , 16 , 242 , 172
    Data 47 , 113 , 147 , 205 , 17 , 79 , 173 , 243 , 112 , 46
    Data 204 , 146 , 211 , 141 , 111 , 49 , 178 , 236 , 14 , 80
    Data 175 , 241 , 19 , 77 , 206 , 144 , 114 , 44 , 109 , 51
    Data 209 , 143 , 12 , 82 , 176 , 238 , 50 , 108 , 142 , 208
    Data 83 , 13 , 239 , 177 , 240 , 174 , 76 , 18 , 145 , 207
    Data 45 , 115 , 202 , 148 , 118 , 40 , 171 , 245 , 23 , 73
    Data 8 , 86 , 180 , 234 , 105 , 55 , 213 , 139 , 87 , 9
    Data 235 , 181 , 54 , 104 , 138 , 212 , 149 , 203 , 41 , 119
    Data 244 , 170 , 72 , 22 , 233 , 183 , 85 , 11 , 136 , 214
    Data 52 , 106 , 43 , 117 , 151 , 201 , 74 , 20 , 246 , 168
    Data 116 , 42 , 200 , 150 , 21 , 75 , 169 , 21 , 75 , 169

Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests