Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller kommunizieren über 1 Leitung


von 006 (Gast)


Lesenswert?

Hi, ich habe fünf ATmega8 Mikrocontroller. Einer soll jedem der anderen 
vier Controller gelegtentlich 2 Byte spezifische Daten schicken.

Alle Mikrocontroller haben die gleiche Masse und ein gemeinsames Vcc. 
Ich will für die Datenübetragung nur eine oder max. zwei Leitungen 
verwenden. Ist das möglich?

SPI braucht 3 Leitungen + Chip Select. Kommt also nicht in Frage. Gibt 
es eine andere einfache Lösung?

Grüße, 006

von Heinz (Gast)


Lesenswert?

Probier mal eine Suche nach

"One Wire"
oder
"Two Wire Interface" aka TWI oder I2C

Die Dinge heissen doch schon genau nach dem was sie nutzen ...
 rolleyes

von one wire (Gast)


Lesenswert?

one wire!?

von Erich (Gast)


Lesenswert?

Sowas wie LIN machen, eine gemeinsame "open drain" Leitung mit externem 
Pullup. In SW aber nicht ganz trivial.
http://de.wikipedia.org/wiki/Local_Interconnect_Network
Gruss

von Sepp (Gast)


Lesenswert?

UART ist das Stichwort!

Einfacehe UART, Den TX des "Master ATmenga" auf die RXe der Slave-Megas.
Jeder Slave empfängt dann die Daten.
Als Sync einfach einen "Idle" Frame nehmen, fertig ist dein Protokoll!

von Georg G. (df2au)


Lesenswert?

006 schrieb:
> eine andere einfache Lösung?

Wenn es ein wenig Hardware sein darf, nimm doch die vorhandenen UARTs 
(wenn du die anderweitig brauchst, gibt es auch Soft-UART). Du musst nur 
die Tx-Leitungen per Open Drain und externem Pullup verodern (Ruhepegel 
muss dann natürlich auf HIGH am Koppelpunkt sein, ggfs noch einen 
Inverter).

Jeder Protz bekommt eine Adresse und du sendest ein Telegramm "Flag, 
Zieladresse, Absender, Daten, 8-bit Prüfsumme, Flag".

Wenn zwei gleichzeitig senden, knallt es, das Telegramm wird zerstört 
und du merkst es an der falschen Prüfsumme. Oder du baust dir noch in 
Software eine "Kanal belegt" Kontrolle ein. Auch das ist simpel.

von Alexander S. (esko) Benutzerseite


Lesenswert?

Wenn nur ein ATmega senden soll, und die anderen nur empfangen, dann 
reicht es UART zu verwenden und TX vom sendenden ATmega mit RX der 
empfangenden ATmegas zu verbinden.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

006 schrieb:
> Hi, ich habe fünf ATmega8 Mikrocontroller. Einer soll jedem der anderen
> vier Controller gelegtentlich 2 Byte spezifische Daten schicken.
>  ...
> SPI braucht 3 Leitungen + Chip Select. Kommt also nicht in Frage. Gibt
> es eine andere einfache Lösung?

Jein.
Wenn bei SPI die Übertragung nur in eine Richtung laufen muss, braucht 
man nicht unbedingt ein MISO. Und Chip-Select lässt sich auch per 
Adressierung erreichen: du verschickst nicht 2 Bytes, sondern generell 3 
Bytes, wobei das erste Byte die Zieladresse enthält. Falls die an alle 
anderen 4 Controller zu versendenden Bytes aber sowieso gleich sind, 
brauchts natürlich auch kein Chip-Select.

von Kaj (Gast)


Lesenswert?

006 schrieb:
> Ist das möglich?
Schau dir mal das ccTalk-Protokoll an: Ist eine simple UART 
kommunikation und braucht exakt einen Draht.

von Grundschüler (Gast)


Lesenswert?

jeweils 3Bytes per 1wire - Empfänger, Sender und Nutzlast, das geht ganz 
einfach.

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.