Hallo, kann mir jemand erklären wie im 1wirebus die Adressen vergeben werden? Ich kann mittels WINAVR und den entsprechenden Bibliotheken ohne weiteres die Temperaturen von mehreren DS18x20 auslesen. Auch die entsprechenden IDs bekomme ich heraus. Aber im Bus müssen da ja noch die Adressen vergeben werden. Ich sehe aber keine Funktion wo dies geschieht. Machen sich das die Sensoren selbst untereinander aus?? Ich möchte halt gerne gesondert die IDs auslesen und in einem anderen Programm diese Manuell eingeben und dann den einzelnen Sensoren jeweils eine spezielle Variable zuweisen. so ungefähr: Temperatur1 = Wert vom Sensor mit der ID 16,63,61,... Temperatur2 = Wert vom Sensor mit der ID xxx Hat sowas schon jemand gemacht? Bzw. wie kann ich den einzelnen Sensoren bestimmte Busadressen zuweisen? Gruß, Christian
Die IDs sind die Adressen, d.h. mit dem Match-ROM Kommando wählst Du einen bestimmten Sensor aus. Peter
Hallo nochmal, das verstehe ich jetzt nicht. Beim 1-Wire-Bus kann ich doch maximal 255 Senoren anschließen. Bzw. ich gebe ja in der onewire.h den Adressbereich von 0x00 bis 0xff an. Daraus hätte ich jetzt abgeleitet, daß die Busteilnehmer noch eine Adresse im Bus zugewiesen bekommen. Die IDs sind für mich nur so was wie eine Seriennummer. Liege ich da falsch? Bei WinAVR wird beim ow_search doch immer die aktuell gefundene Busadresse in der Variable "diff" abgelegt, ausserdem gibt er die Funktion die ID zurück bzw. beschreibt das Array id[]. Daraus wird den Sensortyp geschlossen (z.B. DS18S20 oder DS18B20). Dann wird der Befehl zum auslesen gesendet, die Empfangenen daten im Array SP abgelegt und entsprechend umgerechnet. Die ID spielt doch da nirgends eine Rolle oder? Gruß, Chris
Die IDs sind die Adressen. Arbeitsweise, auch in den Datasheets, ANs etc nachzulesen: - Reset - Per MATCH ROM die ID des gewünschten Bausteins auswählen - Mit diesem Baustein reden. Irgendein onewire.h beschreibt die konkrete Implementierung eines Software-Interfaces, nicht die 1-Wire Hardware. Es gibt genug Dokus und ANs von Dallas/Maxim und anderen.
"Bzw. ich gebe ja in der onewire.h den Adressbereich von 0x00 bis 0xff an." ??? Was ist denn die "onewire.h" ? Wenn Du Dich auf ein bestimmtes Softwarebeispiel beziehst, dann mußt Du uns das auch zeigen (z.B. als Link oder Dateianhang). Es gibt schließlich tausende 1-wire Programme, die niemand alle kennen kann. Und in einer *.h-Datei wird nichts angegeben, sondern die wird includiert und dann das zugehörende Objekt dazugelinkt. Theoretisch kannst Du 2^48 Sensoren an einen 1-wire anschließen, praktisch begrenzt die maximale Buslast und die Leitungslänge die Anzahl. Hier ist ein Beispielprogramm von mir: http://www.mikrocontroller.net/forum/read-4-84831.html#new Peter
Hallo Peter, was in deinem Beispiel die 1wire.h ist bei mir halt die onewire.h. hat prinzipiell den gleichen inhalt. Bei dir steht ja auch wie folgt drinnen: #define SEARCH_FIRST 0xFF // start new search und #define LAST_DEVICE 0x00 // last device found In deiner 1wire.c Funktion w1_rom_search zählst du dann auch von 0xff auf 0x00 runter. Wenn du bei 0x00 angekommen bist ist der letzte Teilnehmer gefunden. Die Grundfunktionen sind bei mir genau gleich. nur teilweise statt char mit uint gearbeitet usw. Aber das Prinzip ist gleich. Zunächst mal danke an euch beide. Ich bekomme mitlerweise schon böse Blicke von hinten zugeworfen. Muß also meine weiteren Tätigkeiten auf nächstes Wochenende verschieben, da ich unter der Woche nicht die Möglichkeit habe. Ich muß mir das dann nochmals alles durch den Kopf gehen lassen. Vielleicht komme ich ja dann doch noch drauf. Gruß, Chris
"In deiner 1wire.c Funktion w1_rom_search zählst du dann auch von 0xff auf 0x00 runter. Wenn du bei 0x00 angekommen bist ist der letzte Teilnehmer gefunden." Dieser Wert zählt nicht sondern geht willkürlich rauf und runter. Er ist die Nummer des Bits, welches als nächstes gewechselt werden muß. Muß kein Bit mehr gewechselt werden, d.h. sind alle Sensoren erkannt, dann bleibt er Null. Jeder Eingabewert über 56 (also z.B. 255) startet die Suche neu und allein der Ausgabewert 0 bedeutet, daß die Suche beendet ist. Alle anderen Werte sind im Bereich 1..55 und haben keine bestimmte Aussage. Er ist eben nur eine interne Variable der Suchroutine. Peter
Peter kennt sich sehr gut mit 1wire aus: Du mußt wissen, dass nach dem Befehl ow-search ein Sensor selektiert ist, eine extra Selektion ist nicht mehr notwendig. Du kannst eine Tabelle mit allen Adressen Deiner Sensoren anlegen. Du kannst aber auch im eeprom eines jeden Sensors eine "logische" von Dir vergebene Nummer programmieren, damit Du nach dem Search weißt, welcher Sensor selektiert ist.
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.