Forum: Mikrocontroller und Digitale Elektronik ATTiny85's USI und Empfangen von Daten mit interner Clock - wie?


von Matthias H. (retrode)


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

von Hannes L. (hannes)


Lesenswert?

Matthias H. schrieb:
> Nein, wir können uns keine zweite Leitung leisten :-)

Wie wär's mit einem bitsynchronisierenden Protokoll?

Z.B. Dallas-1wire-ähnlich oder einfach die Bitinfo in den Zeitabstand 
der Flanken codiern.

...

von Matthias H. (retrode)


Lesenswert?

Hannes Lux schrieb:
> Wie wär's mit einem bitsynchronisierenden Protokoll?
>
> Z.B. Dallas-1wire-ähnlich oder einfach die Bitinfo in den Zeitabstand
> der Flanken codiern.

Ob man das dem USI so beibringen kann? Softwaremäßig haben wir ja schon 
was am Laufen, was einigermaßen schnell und auch mit zig Slaves noch 
sehr zuverlässig funktioniert.

von Hannes L. (hannes)


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.

...

von Peter D. (peda)


Lesenswert?


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
Noch kein Account? Hier anmelden.