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
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
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
??
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
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
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
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.
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.
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!
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
Schaut doch mal rein bei http://www.hth.com/snap/
S.N.A.P ist leicht in AVR zu implementieren und sehr offen für alle
Anwendugen. Könnte eine Lösung für euch sein.
MFG
Dieter