Kommunikation mit AVR´s

Gast #1198
Hallo Leute,

kann man eigentlich mit den TX/RX Anschlüssen direkt an den CPU´s, 
untereinander mit den CPU´s kommunizieren ??.

Ich denke da an einen Strang von ca. 4 CPU´s, wo ich Vaiablen oder 
sonstige Werte austauschen möchte.

Wenn Ja, eine kurze Beschreibung, oder ein Link wäre nett

Gruß

Jens
Gast
Hi,

mit TX/RX wird das nichts, da du so nur 2 AVRs verbinden kannst. Mit SPI 
kannst du soviele aneinander hängen wie du willst, allerdings wird das 
mit dem "untereinander kommunizieren" nicht ganz so einfach, da du einen 
Master brauchst der die Daten von den Slaves liest / sie an diese 
weiterleitet.

MfG
Andreas
Gast
H i Andreas,

In welchem Datenblatt meinst Du ?

Vom Mikrokontroller selber oder ist das ein eigenes IC.


MFG

Jens


PS: gibt es die ganzen Datenblätter vielleicht irgendwo auch auf Deutsch 
??
Gast
Nicht alle AVRs haben ein SPI-Interface.
Genauer: ISP haben schon alle (für serielles Programmieren), aber nur 
einige AVRs haben die "SPI-Vollversion" - z.B. der AT90S4433.
SPI heißt "Serial Peripheral Interface". Das ist ein serielles 
Bus-System, bei dem Du bequem und schnell einen Datenaustausch zwischen 
etlichen AVRs machen kannst.
Schau Dir also einfach mal die Doku zum AT90S4433 an.
Tschüß von Roland
Gast
Hi Roland,

OK, Ich hab mir das Datenblatt angeschaut, aber so großzügig beschrieben
ist das leider auch nicht.

zB: wie realisiere ich das, wenn ich angenommen eine Variable "int xx"
laufend an die Master CPU senden möchte ?

Und von den Anschlüssen ist auch nicht sehr viel beschrieben, oder weis 
jemand einen Link wo das genauer beschrieben ist ???


mfg

Jens
Gast
Also die Hardware SPI hab ich auch nicht zum laufen gebracht, aber 
egal...

Das ganze lässt sich auch per Software realisieren.
Vom Verständniss her solltest du wissen, das der Master sagt, welcher 
Slave wann senden kann!

Und die Übertragung ist recht einfach:
-Master wählt Slave aus (chipselect)
-Entweder sendet Master jetzt einen speziellen Befehl an den Slave 
(Bitfolge) oder Slave hat nur eine Funktion und sende sein Ergebniss
-Master deselektiert den Slave
Gast
Als ich noch nichts von SPI wußte, habe ich mal eine Schleife gebaut 
TxD1 zu RxD2, TxD2 zu RxD3 und TxD3 wieder zu RxD1. Ähnlich wie auch bei 
der MIDI-Übertragung hat das das erste zu übertragende Byte die Aufgabe, 
mitzuteilen für welchen AVR die Nachricht gilt. Das folgende Byte ist 
dann die eigentliche Information. Merkt der erste AVR, daß die Info 
nicht für ihn bestimmt ist wird sie sofort wieder versendet, an den 
nächsten. Die Synchronisation bekommt man hin, indem man auch so eine 
Art Master einrichtet, der immer festlegt, wann gesendet wird, ist ein 
bißchen aufwendig - für MIDI, wo es meistens nur in eine Richtung geht, 
ganz gut und ja auch gar nicht anders als über den UART zu lösen.
Gast
Hallo,

so stelle ich mir das auch vor erst mal ne 2Bit Info(4 Atmels) für wenn 
die Info ist danach ne kurze Pause (20 Takte) und dann die Nachricht. 
Allerdings den Ausgang(Tx) des 1ten Atmels mit den 3 anderen Atmels 
(EingängeRx) verbinden dadurch braucht nur der erste Atmel etwas 
verschicken und die anderer brauchen es nicht weiterleiten falls es 
nicht für sie war, weil die anderen es genauso empfangen haben. Die 
anderen bekommen halt ein Prog das sie nur bei den entsprechenden 2 Bits 
was mit diesen Daten anfangen oder nicht.
Gast
Hi,

man kann auch eine 9Bit asynchrone Übertragung verwenden:

Der Kommunikations-Master schickt die Zieladresse des Proz. mit 9.Bit =1 
und dann die Daten mit 9.Bit=0.
Der Abschluß bildet eine 0x00 mit 9.Bit=1.

Die Zielproz. warten auf ein gesetztes 9.Bit und überprüfen die Adresse 
mit der eigenen. Stimmt die Adresse, wird der Datensatz bis zur 0x00 
empfangen, andern falls wird bis zur 0x00 'weggehört'.

Das System stammt von den 8051'ern. Dort heißt das Muilti-Proz.-Modus 
mit WakeUpBit. Ist bei den Proz. allerdings eleganter, da dort nur ein 
Interrupt erzeugt wird, wenn auch 9.Bit=1.

Bis dann,
                 Ingo!
Gast
Hi,

So ähnlich wie Erwin das beschrieben hat (Schleife von TxD1 zu RxD2, 
TxD2 zu RxD3 und TxD3 wieder zu RxD1) usw. hatte ich das auch vor. 
Allerdings wollte ich anstelle des ersten ATMELs einen PC hinstellen, 
der auch den Master spielen soll.

Unabhängig davon, ob ein PC oder ATMEL zur Steuerung in dieses System 
eingebaut wird, hat eine Übertragung per serieller Schnittstelle noch 
den Vorteil, das man zu Testzwecken einen PC an diesem 
"Übertragungs-Ring" ankoppeln kann. Damit sieht man den gesammten 
Datenverkehr zwischen den ATMELS, wenn auf dem PC ein Terminal-Programm 
läuft. Das ist zur Fehlersuche, oder Langzeitdianose sehr hilfreich.

An welche Übertragungsrate habt Ihr denn bisher eingestellt?

Siegfried

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 24 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.