Forum: Mikrocontroller und Digitale Elektronik AVR Multiprozessorsteuerung Code "Baustein"


von Dietmar G. (malcom)


Angehängte Dateien:

Lesenswert?

Hallo und
wer kann helfen.
Ich beabsichtige eine Multiprozessorsteuerung aufzubauen, meist nutze 
ich C für meine Projekte und komme damit auch meist gut zurecht. Mit 
Interrupt-gesteuerten Routinen habe ich aber garkeine Erfahrungen.
Für die Multiprozessorsteuerung benötige ich hier eine Routine welche 
einerseits Interruptgesteuert die RX empfängt, prüft ob die Daten für 
diesen Prozessor adressiert sind und wenn nicht diese über TX (ebenfalls 
Interruptgesteuert)an den nächsten Slave weiter gibt.
Ich habe versucht aus den anderen Beiträgen schlau zu werden, leider 
ohne großen Erfolg.
Gibt es eine "Standardt-Routine" für solch ein Problem, um die ich dann 
meinen eigenen Code drum rum schreiben kann?
Vorteilhaft erscheint mir an dieser Stelle auch die Programmierung in 
Assembler um Platz und Zeit für die "Hauptanwendung" des Prozessors zu 
haben.

Gruß Malcom

PS: Ich habe ein Schema mal angehängt, um das Problem zu verdeutlichen

von Tauwetter (Gast)


Lesenswert?

Verwende einen RS-485 Bus und betreibe die ATmega im 
Multiprozessormodus. Auf Deinem Plan sehe ich einen ATM8 mit Display 
480x200; ob der Prozessor dafür geeignet ist, würde ich zuvor 
gründlichst prüfen.

von Dietmar G. (malcom)


Lesenswert?

für die Textausgabe auf dem Display funktioniert die Sache schon prima 
und mehr will ich da auch garnicht darstellen. Aber ob der Platz noch 
für das RS 485 Prozedere reicht weis ich nicht.
Das Programm habe ich hier aus dem Forum: 
Beitrag "Pollin Display Optrex F-51154NF-FW-AA" von Benedikt K. (benedikt). 
Es ist in Assembler geschrieben und unterstützt derzeit nur den RX im 
Interrupt-modus. Ob TX noch implementierbar ist weis ich leider auch 
nicht, weil der Platz wohl schon recht eng ist.

Gruß Malcom

von Tauwetter (Gast)


Lesenswert?

> weil der Platz wohl schon recht eng ist.

Dann nimm die ATmega doch alle mindestens eine Nummer größer z.B. 
ATmega168. Und auch die Tiny2313 sind ein bißchen knapp für eine 
Schrittmotoransteuerung. Wenn ich 1/8 Schritte mit Rampe erzeuge brauche 
ich auf einem Mega8 rund 5k. Und ich werde mich hüten, in Assembler zu 
programmieren, bloß um beim µC dann 10 Cent Kaufpreis zu sparen.

Klotzen, nicht kleckern :-)

von Dietmar G. (malcom)


Lesenswert?

Also, ich meine, abgesehen davon, dass die Hardware weitestgehend fertig 
aufgebaut ist... und...auch über UART (ohne Multiprozessor und ohne 
Interrupt) seine Funktion erfüllt, wollte ich hier eigendlich Tipps für 
die Programmierung des Interruptgesteuerten TX / RX bzw. für eine 
"Standardtprogrammierung" für Multiprozessorbetrieb.
Schlagworte bringen mich da nicht weiter...
Sollte sich dann bei einem guten Codevorschlag herrausstellen, dass der 
Prozessorspeicher nicht reicht, werde ich gern auf einen größeren 
Prozessor updaten.
Gruß Malcom

von Route_66 (Gast)


Lesenswert?

Ich würde beim Konzept daran denken, ALLE Nachrichten IMMER gleich 
weiter zu geben. Auch diese, die für mich bestimmt sind. Dann kann der 
Absendende sein eigenes Telegramm noch mal überprüfen, weil es ja wieder 
bei ihm ankommt. Außerdem hast du dann die Möglichkeit, Telegramme an 
mehrere oder alle Teilnehmer im Ring zu schicken.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Willst du nur empfangen oder auch senden können?
Müssen die Controller untereinander reden?

von abraxas (Gast)


Lesenswert?

Fertigen Code gibts da vermutlich nicht so wirklich, die meisten Leute 
versuchen glaube ich größere Mengen (>2) an µCs zu vermeiden wo es 
geht...
Und was für "Tips" willst du den?

von Tauwetter (Gast)


Lesenswert?

>Schlagworte bringen mich da nicht weiter...

Man hilft ja immer gerne, eigendlicht.

von Dietmar G. (malcom)


Lesenswert?

Hallo und danke für die rege Beteiligung,
Route_66 (Gast) hat die Proplematik gut wieder gegeben.....
Der Master schickt Daten an einen Slave....dieser sendet dann die 
Antwort über den Ring wieder zum Master. Will heisen....Nachrichten die 
nicht für einen Slave bestimmt sind werden über TX sofort weiter 
gegeben.....Daten die für Ihn bestimmt sind werden Empfangen verarbeitet 
und eine "Empfangsbestätigung" zum Master geschickt. So ist es gedacht.

Läubi .. (laeubi) schön wäre es schon, wenn Fehler oder Statusmeldungen 
vom Slave an den Master gegeben werden können, leider weis ich nicht in 
wie weit dies vom "Multiprozessorprotokoll" unterstützt wird. Eine 
Communikation der Slaves ist nicht vorgesehen. Chef ist der Master.

abraxas (Gast) Ich habe in verschiedenen I-Net Beiträgen Codebeispiele 
gesehen, diese waren aber immer nur fragmentarisch. Aufgeschnappt habe 
ich daraus, dass einige Interruptaufrufe "fest" definiert sind. Leider 
habe ich keinen blasen Schimmer wie ich diese Codeschnipsel zu einem 
Ganzen zusammenfügen kann, da mir hierfür einfach die Erfahrungen 
fehlen. Sprich der Prozessor macht hier ein paar Sachen automatisch, wo 
ich einfach nicht weis, was wann in welchem Umfang passiert. Die meisten 
diesbezüglichen Beiträge lesen sich als wären sie für Leute geschrieben, 
die eh wissen wie es geht und nur noch paar einzelne Details bräuchten.

abraxas schrieb weiter: "Und was für "Tips" willst du den?"
Nun ich kann mir nicht vorstellen, dass sich der Code für den 
Einzelprozessor in meinem Beispiel nennenswert unterscheiden soll. Ein 
Byte wird vom Master gesendet für Slave 2, 3, 4 oder 5 die nicht 
Adressierten Slaves geben das Empfangene Byte immer gleich über TX 
weiter, der Adressierte schreibt es in den Speicher und sendet eine 
Quittung. Wie schreibe ich solchen Code für Interrupt gesteuerten 
RX/TX....oder gibt es vielleicht "vollständige Beispiele" die gut 
dokumentiert sind????

Gruß Malcom

von Dietmar G. (malcom)


Lesenswert?

Hallochen noch mal,
vielen Dank noch mal für die bisherigen Beiträge....aber gibt es 
niemanden, der Erfahrungen mit Interruptprogrammierung hat und mir über 
die ersten "Stolpersteine" (in C) helfen könnte?

Gruß Malcom

von Falk B. (falk)


Lesenswert?

@  Dietmar G. (malcom)

>Ich beabsichtige eine Multiprozessorsteuerung aufzubauen, meist nutze
>ich C für meine Projekte und komme damit auch meist gut zurecht. Mit
>Interrupt-gesteuerten Routinen habe ich aber garkeine Erfahrungen.
>Für die Multiprozessorsteuerung benötige ich hier eine Routine welche
>einerseits Interruptgesteuert die RX empfängt, prüft ob die Daten für
>diesen Prozessor adressiert sind und wenn nicht diese über TX (ebenfalls
>Interruptgesteuert)an den nächsten Slave weiter gibt.

Auch was? Keine Erfahrung mit Interrupts aber eine 
Multiprozessorsteuerung bauen wollen? Du siehst mich schmunzeln. ;-)

Mach dich erstmal schlau über das Thema Interrupt, versuch es dann 
in eigenen Projekten erfolgreich umzusetzen. Dann solltest du was über 
Multitasking lernen und ebenfalls selber umsetzen.

>Vorteilhaft erscheint mir an dieser Stelle auch die Programmierung in
>Assembler um Platz und Zeit für die "Hauptanwendung" des Prozessors zu
>haben.

Nööö, vollkommen unsinning. Lies die Artikel oben und denk drüber nach.
Dann wirst du merken, das man dein Projekt höchstwahrscheinlich locker 
mit EINEM AVR durchziehen kann. Denn deine Multiprozessorsteuerung ist 
was für Leute, die EINEN Prozessor bestens im Griff haben. Und nix für 
Leute, die nicht mal über Interrupts Bescheid wissen.

MfG
Falk

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.