Re: mehrere DS18S20 Kategorie: Programmierung Basic (von Sepp - 29.02.2012 19:38) | |
Als Antwort auf Re: mehrere DS18S20 von Joerg - 27.02.2012 10:49
| |
> > Hallo, > > weis bzw. hat jemand Democode (vorzugsweise in Basic) um mehrere one-Wire Temperaturfühler DS18S20 an einem Port auszulesen? > > Das Demoprogram für einen Fühler funktioniert. > > Die suche hier im Forum hat leider auch nicht wirklich geholfen. > > > > Viele Grü�e und Danke im voraus > > Sepp > > Hallo Sepp, > > hier ein paar Infos die ich mir hier aus dem forum kopiert habe: > > > Meine Lösung (nach deinen Tip)hier. > Funktioniert mit getesteten 5 Fühlern. > > Start Initialisierung > OneWire_Reset(31) > OneWire_Write(0xcc) 'SkipROM Messung für alle gleichzeitig starten > OneWire_Write(0x44) 'Temperatur Messung im Byte 0/1 speichern > > Fühler 1 > OneWire_Reset(31) > OneWire_Write(0x55) 'MatchRom - Slave auswählen > OneWire_Write(16) 'Code Bytes 0 'mein fühler > OneWire_Write(21) 'Code Bytes 1 > OneWire_Write(27) 'Code Bytes 2 > OneWire_Write(221) 'Code Bytes 3 > OneWire_Write(1) 'Code Bytes 4 > OneWire_Write(8) 'Code Bytes 5 > OneWire_Write(0) 'Code Bytes 6 > OneWire_Write(6) 'Code Bytes 7 > OneWire_Write(0xbe) 'Scrachpad lesen > Fühler 2 > usw. > > > oder > > > > > > 1. Ausgabe eines OneWire_Reset > > 2. Ausgabe OneWire_Write(0x55) (Match ROM) > > 3. sequenzielle Ausgabe der 64 Bit als 8 Bytes mit: > > OneWire_Write(Code Bytes 0) > > OneWire_Write(Code Bytes 1) > > ... > > OneWire_Write(Code Bytes 7) > > > > 3. Gewünschten Befehl ausgeben mit > > OneWire_Write(0xYY) > > > > Das funktioniert bei mir mit 6 Sensoren am Bus. > > > > > Grü�e Jörg > Hallo, nachdem ich hier auch schon öfters für mich brauchbare Programteile gefunden habe stelle ich nun auch etwas zur Verfügung. Vielleicht hilft es ja dem Ein oder Anderem weiter. Das ganze 1-Wire Thema ist hier sehr gut in deutsch erklärt. Der erste Teil liest die Romadresse des Temperatursensors DS18S20 bzw DS18B20 und schreibt Diese in das Ausgabefenster. ' Auslesen der 64 Bit Romadresse von DS18S20 bzw DS18B20 'Es darf nur 1 Fühler angeschlossen sein Dim Text(40) As Char Dim ret,i As Integer Dim Adressbyte As Byte 'einzelnes Byte der Romaddresse Dim Sensorport As Byte 'Port an dem der Fühler sitzt Sub main() Sensorport = 23 'Port C7 Portnummer 23(jeder freie Port ist möglich) ret = OneWire_Reset(Sensorport) 'Starten des Fühlers, 'gibt 1 zurück falls ein 'Fühler geantwortet hat If ret = 0 Then Text= "Kein Sensor gefunden" Msg_WriteText(Text) Goto Ende End If OneWire_Write(0x33) 'starten des auslesens der Romadresse For i = 0 To 7 Adressbyte= OneWire_Read() 'die einzelnen 8 Bytes werden ausgelesen Msg_WriteWord(Adressbyte) 'und in das Ausgabefenster geschrieben Msg_WriteChar(13) 'neue Zeile Next Msg_WriteChar(13) Lab Ende End Sub Die 8 ausgelesenen Adressbytes müssen im Program eintgetragen werden. 'für Fühler DS18B20 Umrechnungsfaktor 0,06255 für DS18B20 0,5 Dim Text(40) As Char Dim ret,i As Integer Dim tempFuehler1 As Single Dim tempFuehler2 As Single Dim scratch_pad(9) As Byte Dim Sensorport As Byte 'Port an dem der Fühler sitzt 'jeder freie Port möglich Sub main() Sensorport = 23 'Port A7 ret = OneWire_Reset(Sensorport) 'starten aller Fühler, If ret = 0 Then Text= "Kein Sensor gefunden" Msg_WriteText(Text) Goto Ende End If OneWire_Write(0xcc) ' ROM überspringen Kommando OneWire_Write(0x44) ' starte Temperaturmessung aller Fühler AbsDelay(3000) ' warten bis Temperatur im Sensor gemessen ' und abgespeichert wird 'Auslesen Fühler 1 OneWire_Reset(Sensorport) ' starten aller Fühler OneWire_Write(0x55) 'Fühler bereitmachen zum Empfang der Adressbytes OneWire_Write(40) 'Adressbyte 0 von Fühler 1 hier die Bytes OneWire_Write(191) 'Adressbyte 1 von Fühler 1 eintragen OneWire_Write(234) ' usw OneWire_Write(147) OneWire_Write(3) OneWire_Write(0) OneWire_Write(0) OneWire_Write(215) OneWire_Write(0xbe) 'Befehl zum Scratchpad lesen '(nur der angesprochene Fühler) For i = 0 To 9 ' komplettes Scratchpad des angesprochenen scratch_pad(i)= OneWire_Read() ' Fühlers lesen Next Text = "Temperatur Fühler 1: " Msg_WriteText(Text) tempFuehler1 = (scratch_pad(1) * 256 + scratch_pad(0)) * 0.06255 'Umrechnugsfaktor DS18B20 Msg_WriteFloat(tempFuehler1) Msg_WriteChar(13) 'Auslesen Fühler 2 OneWire_Reset(Sensorport) ' starten aller Fühler OneWire_Write(0x55) 'Fühler bereitmachen zum Empfang der Adressbytes OneWire_Write(40) 'Adressbyte 0 von Fühler 2 OneWire_Write(67) 'Adressbyte 1 von Fühler 2 OneWire_Write(233) ' usw OneWire_Write(147) OneWire_Write(3) OneWire_Write(0) OneWire_Write(0) OneWire_Write(150) OneWire_Write(0xbe) 'Befehl zum Scratchpad lesen '(nur der angesprochene Fühler) For i = 0 To 9 scratch_pad(i)= OneWire_Read() Next Text = "Temperatur Fühler 2 :" Msg_WriteText(Text) tempFuehler2 = (scratch_pad(1) * 256 + scratch_pad(0)) * 0.06255 Msg_WriteFloat(tempFuehler2) Msg_WriteChar(13) 'Auslesen Fühler 3 'usw Lab Ende End Sub MfG Sepp | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum