1-Wire auf einem AVR mit Assembler

Gast #316026
Lesenswert?

Hi,

da ich momentan ein Bussystemplane, bei dem ich möglichst auf
festbelegte Pins verzichten möchte (siehe unten) wollte ich euch
fragen, ob jemand bereits eine 1-Wire Schnittstelle für AVRs (Tiny /
Mega) realisiert hat und mir sagen kann, wie aufwändig das ist. (In
Assembler versteht sich ;))

Ich möchte auf Pins (wie z.B. die vorbelegten I²C Pins) verzichten, da
ich in meinen "Modulen" nicht das I²C-Feature "zerstören" möchte.
Stellt euch es so vor: Ich habe ein Motherboard mit einem
Hauptprozessor (vermutl. Mega32), auf dieses Stecke ich jetzt mehrere
Platinen mit anderen AVRs (vermutl. Mega8 / Tiny). Der Hauptprozi soll
jetzt als Master mit den Modul-AVRs als Slaves kommunizieren. Da auf
den Modulen aber u.U. auch I²C-Chips sein sollen und die Modul-AVRs mit
diesen kommunizieren sollen, kann ich nicht die "Original"-Pins für
I²C belegen, da dann durch die intramoduläre Datenübertragung die
intermodulare gestört werden würde (die I²C Leitungen
Motherboard<>Module seien als ausgelastet angesehen...)

Vielleicht kommt euch ja noch eine andere Idee als 1-Wire (soll wohl
recht einfach sein, wie ich gehört habe) für mein Problem. Natürlich
sollte es möglichst pinsparend sein (1-Wire braucht halt auch nur one
wire ;))

Ich hoffe ihr könnt mir helfen :)

Gruß, Lasse
Gast #316029
Lesenswert?

Es ist einigermassen haarig, einen 1-Wire-Slave per Software exakt nach
Vorschrift zu implementieren. Denn so ganz von allein bleibt der Pin ja
nicht auf 0, wenn der Master ihn runterzieht aber nach 1µs wieder
loslässt. genau das muss der Slave aber tun. Kann man mit zusätzlicher
Hardware realisieren, das ist aber wohl nicht der Sinn der Sache.

Wenn das freilich nicht wirklich 1-Wire sein muss, kann man sich ja
davon lose inspirieren lassen und die Problemzonen umschiffen.
Beispielsweise indem man nur definiert, dass der Pin zum
Abfragezeitraum (z.B. 10-20µs nach dem Takt) auf 0 oder 1 sein muss,
dazwischen aber undefiniert sein darf. Dann wird's handhabbar.

Beachte ggf. die rechtliche Seite. Wenn das mehr werden soll, als
persönliche Bastelei, dann könnte Maxim/Dallas da patentrechtlich
mitmischen wollen.
Gast #316034
Lesenswert?

Was ich vorhabe:

Ich baue mir einen Roboter mit einem "Mainboard" auf das ich mehrere
Module stecken möchte. Auf dem Mainboard wird ein Mega32 sitzen, der
Daten von den Modulen bekommen soll und Daten an die Module senden
soll.

Bei UART gibt es genau das gleiche Problem, was mache ich, wenn ich
z.B. eine UART schnittstelle auf das Modul packen möchte?

Es wird also vermutlich auf jeden Fall auf was selbst programmiertes
hinauslaufen... Das sollte natürlich recht einfach und auch relativ
zeitunkritisch sein. Besonders schnell ist nicht umbedingt erforderlich
(aber es darf auch nicht total lahm sein)

Gruß, Lasse
Gast #316035
Lesenswert?

Nimm das HW-I2C nur zur Kommunikation zwischen den AVRs.

Um IO-Expander, EEPROM usw. anzusprechen reicht ein Single-Master I2C
in Software, ist außerdem viel einfacher und Du kannst beliebige Pins
nehmen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren