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

OP #2237282
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
OP #2237929
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.
#2238067
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.