Forum: Mikrocontroller und Digitale Elektronik Mehrer Atmels vernetzen


von Breti (Gast)


Lesenswert?

Hi zusammen,

ich habe folgendes Problem: Ich möchte einen Atmega 128 mit 2 kleineren
Atmels (z.B. AT90S2313) vernetzen. Dabei schickt der Atmega Daten in
Richtung der kleinen Atmel Prozessoren, die daraufhin Daten am
seriellen Port generieren. Die Übertragung soll dabei zu jedem 2313er
mit mind. 110kbps laufen. Ausserdem bekommen die beiden 2313er jeweils
noch ein externes Ram (das braucht ja auch pins).
Mein Problem liegt jetzt darin, dass ich noch nie etwas mit der
Vernetzung mehrerer Atmels zu tun hatte und etwas auf dem Schlauch
stehe, weil ich nicht weiß wie man (Hardware, Protokoll) die jetzt am
Besten vernetzt.
Meine Frage lautet also (sehr allgemein), wie man diese Kommunikation
am Besten realisieren könnte.
Natürlich habe ich mich auch schon etwas schlau gelesen - leider sind
aber viele Beiträge in diesem Forum sehr spezieller Natur, was mir die
Auswahl eines bestimmten Verfahrens erschwert.

So wie ich das Sehe, kann ich das

A) über I2C/TWI machen
Der Master (Atmega) spricht dabei die einzelnen Slaves (2313) über das
Protokoll direkt an -> weniger Leitungen aber langsamer

B) über SPI machen
Master selektiert die Slaves mit separater Leitung -> schneller aber
mehr verbrauchte Pins

C) UART - geht nicht, sind schon anderweitig belegt

D) irgendwie anders machen

Das der Atmega die passenden Interfaces bereitstellt ist klar - aber
wie kann man es am einfachsten mit den kleineren 2313ern realisieren?
Müsste man dort I2C oder SPI in Software realisieren?

Danke schonmal im voraus.

von leo9 (Gast)


Lesenswert?

Wenn der Mega die Daten zu den 2313 schaufeln muss, kann er sie doch
gleich selber generieren? .. oder seh ich da was falsch?
Poste doch mal etwas über die Rahmenbedingungen.

grüsse leo9

von Breti (Gast)


Lesenswert?

Ne kann er nich, bzw. soll er nicht. Der Mega hat genug anderes zu tun
(Display, ne Menge Knöpfe, andere IO Sachen), so dass die beiden
kleineren Chips dazu gedacht sind ihn auch rechentechnisch zu entlasten
indem sie aufwendige zwischenberechnungen für die serielle ausgabe
selber machen. hinzu kommt, dass wenn der mega mal kräftig am rechnen
ist - die serielle ausgabe immer noch vorhanden ist
(ausfallsicherheit).

Gruß,
      Thomas

von Günter (Gast)


Lesenswert?

Hallo Bretti

Neben den HW-UARTS kann man auch noch mehrere Software-UARTS
programmieren.

In welcher Programmiersprache willst Du deine Aufgabe programmieren ?

Günter

von Ralph Dillhardt (Gast)


Lesenswert?

Hallo Berti

Bin dazu Verdonnert ein ähnliches Problem zu lösen.
Ich muss ein Atmega32 mit einem AT90S2313 vernetzen.
Dafür steht mir nur I2C zu Verfügung.

Sende dir ne email wenn ich ne Brauchbare Lösung habe.

Ralph

von Peter D. (peda)


Lesenswert?

Wenns schnell sein soll, geht beim 2313 nur die UART.

Alles andere frißt die komplette CPU Zeit auf, da ja kein Hardware SPI
oder I2C.

SRAM am 2313 ist auch fast unmöglich, da viel zu wenig Pins.

Wenn die UART nicht geht, dann hilft nur der Mega8 statt des 2313.
Vielleicht sind dessen 1kB RAM dann auch genug für Dich.



"Der Mega hat genug anderes zu tun (Display, ne Menge Knöpfe, andere
IO Sachen)"

Das sind alles aber keine Belastungen für einen Mega128, er dreht dabei
mindestens 99,9% nur Däumchen.

Z.B. ein Display sollte man nicht schneller als 2..5* je Sekunde
ausgeben, schließlich soll das ja ein Mensch auch ablesen können.

Und Knöpfe drehen bzw. drücken macht ein Mensch auch im absoluten
Schneckentempo, bezogen auch die Geschwindigkeit eines Mega128.


Peter

von Uli (Gast)


Lesenswert?

Hallo

verstehe ich nicht!!!

Also ob ich nun eine Vernetzung realisiere mit 110kBps oder es gleich
raus schicke ist doch egal oder nicht.
evt. ist bei einer Vernetzung die programmierung einfacher

Mfg Uli

von Breti (Gast)


Lesenswert?

Hi,

danke für die vielen Antworten.

"In welcher Programmiersprache willst Du deine Aufgabe
programmieren?"
Ob C oder Assembler ist mir eigentlich gleich (obwohl ich ASM besser
kann)

"Wenns schnell sein soll, geht beim 2313 nur die UART"
Das hatte ich befürchtet - die UART brauche ich aber für was anderes.
Das mit dem SRAM ist auch schlecht. Hatte selbst schon an den Atmega8
gedacht - ist wahrscheinlich besser insbesondere weil ich ca. 700b Ram
benötige.

"Das sind alles aber keine Belastungen für einen Mega128, er dreht
dabei mindestens 99,9% nur Däumchen"
Stimmt wohl, sind aber an die 200 Knöpfe + 200 LEDs + noch ein bischen
kleinkram. Allerdings können die Ergebnisse, wenn die Knöpfe gedrückt
werden schonmal recht rechenintensiv werden, so dass auch der Atmega
(kurzzeitig) ausgelastet sein wird. Die Ausgabe auf den UARTs wird
dabei nochmal durch viele Zwischenberechnungen ziemlich aufgebläht.
Weil diese zu jeder Zeit stabil sein muss, habe ich mich für die extra
Chip Variante entschieden. Der Preis ist dabei nicht so wichtig.
Ausserdem ist, wie schon bemerkt wurde, die Programmierung dann etwas
einfacher.

Aber wie siehts denn jetzt so mit dem eigentlichen Vernetzen aus? Ist
I2C (TWI) schnell genug, damit der Master an beide Slaves 110kbps
übertragen kann?

Gruß,
      Thomas

von Christof Krüger (Gast)


Lesenswert?

Die Ausgabe ist also unabhängig von den Berechnungen? Dazu gibt es doch
Interrupts, damit kannst du dauernd Daten raushauen und dich in
Echtzeit mit deiner Umgebung unterhalten und wenn der Interrupt zu ende
ist, dann rechnet der ATmega128 weiter. Oder verstehe ich da was falsch?

von Breti (Gast)


Lesenswert?

Schön und gut - mir geht es hier allerdings nicht darum, OB ich meine
Atmels jetzt vernetze oder nicht, sondern WIE ich sie vernetze.
Ich denke, dass ich ausreichend Gründe genannt habe, warum ich sie
vernetzen möchte. Hinzu kommt, dass ein einziger Atmel nicht
ausreichend serielle Ports bietet. Vielleicht könnte man ja wirklich
alles irgendwie in einen einzigen Chip quetschen - aber warum soll ich
mir das antun? So geht es meines erachtens einfach besser (weniger
programmieraufwand, schön klar getrennte aufgaben, spätere
erweiterbarkeit usw.).

Ich würde jetzt gern einmal über die Vor- und Nachteile der
verschiedenen Arten der Vernetzung reden, nicht darüber wann sie
sinnvoll ist.

Gruß,
       Thomas

von Peter D. (peda)


Lesenswert?

"Ausserdem ist, wie schon bemerkt wurde, die Programmierung dann etwas
einfacher."


Ich habe immer die gegenteilige Erfahrung gemacht.
Programme, die eine schnelle und sichere Kommunikation zwischen
mehreren µC benötigen sind grundsätzlich um Größenordnungen
komplizierter.

Du mußt ein Protokoll aufsetzen und auch schnelle Interrupthandler,
damit keine Daten verloren gehen bzw. eine Fehlererkennung mit
nachfolgendem Retry möglich ist.

Am einfachsten ist daher der CAN-Bus, da er viele dieser
Protokollschichten bereits in Hardware durchführt.

In einem älteren Gerät hatte ich noch den I2C-Bus benutzt (etwa 10kBit
Nutzdatenrate), aber in den neueren nur noch den CAN-Bus
(AT89C51CC01).


Aber den 2313 kannste zum Vernetzen bei 110kBit voll vergessen.
Selbst über die UART ist das mehr als haarig.


Peter

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.