1-Wire-Busadressen

Gast #282953
Lesenswert?
• ▲
▼
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
Gast #282956
Lesenswert?
• ▲
▼
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
Gast #282957
Lesenswert?
• ▲
▼
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.
Gast #282958
Lesenswert?
• ▲
▼
"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
Gast #282959
Lesenswert?
• ▲
▼
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
Gast #282960
Lesenswert?
• ▲
▼
"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
Gast #282961
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.