Hallo zusammen, Ich stehe unglaublich auf dem Schlauch im moment, also bitte entschuldigt schon jetzt die Frage :-) ! Recherchiere schon ziemlich lange und werd mir immer unsicherer... Ich beschäftige mich im moment mit dem 1 Wire Bus. Eigentlich ist mir alles klar bzw. ich werde mich noch in die Thematik einarbeiten, der Punkt wo ich schon jetzt nicht 100% sicher bin ist, was für anforderungen der Pin des Masters (ich würde gerne den ATmega328 verwenden, da ich den noch rumliegen habe) haben muss. Nach meinem wissen muss es ein I/O Pin mit open collector oder tristate sein (weil beim 1 wire extern ein pull up platziert werden muss) ?! Im datenblatt des ATmega328 steht bei den I/O's dass diese Konfigurierbar sind... aber das sind dann auch schon alle infos, die ich gefunden habe !? Irgendwas stimmt doch hier nicht :) ?! kann mir jemand auf die sprünge helfen ? vielen dank
Der AVR kann ein Pin 1. auf 0 ziehen 2. auf 1 ziehen 3. in ruhe lassen 4. Hochohmig auf 1 ziehen 1+2 ist ein normaler logic Ausgang. Variante 3 für Eingänge (tristate), die 4. wenn man eine Pullup habe möchte. Wenn man Zwischen 1 und 3 umschaltet hat man einen open collector. Also PORT auf 0 und DDR umschalten. Wobei dann DDR = 1 0V am Pin ergibt.
Im Prizip ist es einfach. Die Busleitung ist eine über Pull-Up-Widerstand auf +5 Volt liegende Leitung. Alle Teilnehmer am Bus sind Open-Collektor-Ausgänge und ziehen den Bus auf GND. Deren Eingänge sollten, damit diese den Bus nicht auch ein bisschen runterziehen, CMOS-Eingänge sein. Kondensatoren auf dem Bus sind nicht erlaubt. Wenn ein Teilnehmer eine Kommunikation einleiten will, legt er für eine bestimmte Zeit den Bus auf NULL -> Bus-Reset, dann sendet er als "Master" eine serielle Adresse an natürlich alle Teilnehmer und wartet danach eine bestimmte Zeit, bis sich der entsprechende Partner mit einer NULL für eine bestimmte Zeit meldet. Dann können diese Beiden sich "frei" unterhalten mit oder ohne Protokoll. Alle NULLen auf dem Bus sind recht kurz (usec), weil über dem Bus u.u. auch die Versorgung der Teilnehmer stattfindet. Und damit die Teilnehmer nicht in den "IDLE"-Mode (abgeschaltet gewesen) gehen, darf eine NULL eine bestimmte Zeit nicht überschreiten. Wenn der Bus für längere Zeit konstant auf 5 Volt liegt, ist er frei für irgendeine andere Verbindung zwischen zwei Partnern. Übrigens, der two-wire-bus (mit GND natürlich drei Leitungen) ist das gleiche, nur mit dem Unterschied, dass auf einer Leitung konstant 5 Volt liegen (Versorgung der periferen Teilnehmer). Macht mann wenn recht viele Teilnehmer am Bus hängen. Ich hoffe, das bringt dich etwas weiter.
im klartextr heisst das, dass ich den ATmega328 für den 1 wire bus verwenden kann ?! Hab ich denn das falsche Datenblatt (siehe 1. Post), oder wo finde ich die befehlssätze, damit ich diese IO's konfigurieren kann ? eine andere frage, gibt es bzw. kennt jemand eine bibliothek , wo "fertige" kommunikations- codes vorhanden sind ? @steffen, der 2 wire bus ist also der 1 wire mit zusätzlicher speiseleitung (gleiches Protokoll ?) vielen dank an beide !
Michi M. schrieb: > @steffen, der 2 wire bus ist also der 1 wire mit zusätzlicher > speiseleitung (gleiches Protokoll ?) 1-Wire-Bus besteht aus einem gemeinsamen Postenzial (GND) einer Versorgungsspannung (+5V) und dem Datenbus. Da man Versorgungen nicht zählt, sagt man 1-Wire-Bus. Man braucht nicht immer alle drei Leitungen, sondern kann teilweise auch auf einen sogenannten parasitären Modus ausweichen. Hierbei wird die Versorgungsspannung von dem Datenbus geholt (Gleichrichter, Kondensator). Es bleibt aber immer der selbe 1-Wire-Bus (und kein 2-Wire). Das 2-Wire-Interface (TWI) ist I2C. Da hast Du, neben der Versorgung und Masse, ein Taktsignal und ein Datensignal. Das Protokoll ist grundverschieden zum 1-Wire-Bus.
Noch was: Michi M. schrieb: > im klartextr heisst das, dass ich den ATmega328 für den 1 wire bus > verwenden kann ?! Ja. Es geht jeder AVR (und sicherlich auch PICs - kenne mich damit nicht aus). > Hab ich denn das falsche Datenblatt (siehe 1. Post), oder wo finde ich > die befehlssätze, damit ich diese IO's konfigurieren kann ? Tim schrieb: > Der AVR kann ein Pin > 1. auf 0 ziehen > 2. auf 1 ziehen > 3. in ruhe lassen > 4. Hochohmig auf 1 ziehen Ich glaube schon, dass Du das richtige DB hast. 1 und 2 bedeutet, dass der Pin als Ausgang geschaltet wird. 3 und 4 auf Eingang. 3 = Pullup aus; 4 = Pullup ein. Für 1-Wire schaltest Du die erforderlichen Signale mittels Datenrichtungsregister um - nicht über das Portregister. PORT = 0 High bedeutet Pin in Ruhe lassen (also 3 = DDR auf Eingang) Low bedeutet Pin auf 0 ziehen (also 1 = DDR auf Ausgang) Des weiteren ist noch ein Pullup-Widerstand notwendig.
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.