ATTiny85's USI und Empfangen von Daten mit interner Clock - wie?

#2237282
Lesenswert?

Hallo zusammen,

wir haben hier ein Netzwerk von ATTiny85 (jeder getaktet durch internen 
Oszillator bei 8MHz), die über eine einzige gemeinsame Leitung seriell 
kommunizieren. In Software sieht das so aus:

Master: sendet einen Startpuls, dann (nach einer kurzen, fixen Pause) 8 
Bits, von denen jedes 8 Takte lang ist.

Slave: Pin Change Interrupt wird durch Startpuls ausgelöst, dann liest 
die ISR achtmal den Bus aus. NOPs halten die Sache zusammen.

Jetzt würden wir gerne dieses oder ein vergleichbares Protokoll mit der 
USI umsetzen, jedoch habe ich nirgends ein Beispiel gefunden, wo 
sämtliche Busteilnehmer zum Senden und Empfangen nur ihre eigene interne 
Clock zur Verfügung haben. Ist das überhaupt möglich? Sicher kann man 
mit Hilfe des Startpulses eine "start condition" schaffen, aber der 
freilaufende serielle Takt scheint mir alles weitere sehr schwierig bis 
unmöglich zu machen.

Nein, wir können uns keine zweite Leitung leisten :-)

Viele Grüße,
Matthias
#2238067
Lesenswert?

Matthias H. schrieb:
> Ob man das dem USI so beibringen kann?

Eher nicht.

> Softwaremäßig haben wir ja schon
> was am Laufen, was einigermaßen schnell und auch mit zig Slaves noch
> sehr zuverlässig funktioniert.

Aber hart auf Kante genäht ist, denn es synchronisiert ja nur einmal je 
Byte. Da kann es bei Takt-Toleranzen ab 2% schon zu Fehlern kommen. Ist 
vergleichbar mit UART-Betrieb ohne Quarz.

Bitsynchronisierende (Software-)Lösungen laufen auch noch fehlerfrei, 
wenn der Taktunterschied mehr als 20% beträgt. Sie sind somit für 
quarzlose Systeme besser geeignet.

Um etwas Konkretes vorschlagen zu können, müsste man wissen, ob 
bidirektionale Kommunikation nötig ist und (wenn ja) wie die Senderechte 
verwaltet werden.

...

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