Forum: Mikrocontroller und Digitale Elektronik atmega8 multiprozessor kommunikation rs232


von duron005 (Gast)


Lesenswert?

Hallo Zusammen,

Ich habe da ein paar Fragen bezüglich der seriellen Schnittstelle der 
atmega8.
Und zwar gibt es einen Masterkontroller an den ca. 4 atmega8 über die 
selbe serielle schnittstelle angeschlossen sind. Wenn ich 
softwaretechnisch gewährleisten kann dass immer nur einer von den 
4atmega8 daten sendet, ist das ein problem wenn sie an der selben 
seriellen hängen oder muss ich sie hardwaremässig irgendwie entkoppeln?

Prinzipiell möchte ich dass die hauptstation gewährleisten kann dass 
alle gesendeten daten an die anderen KOntroller richtig angekommen sind:
Und zwar so:

Implementierung Haupt- atmega8:
1.)  Aufrufen von "sendezeichen"
2.)  Sende die daten mit usarttransmit
3.)  Timer starten
4.)  Wird bevor der interrupt des timers kommmt ein zeichen empfangen,
     gehe zu Schritt 6.)
5.)  Werden keine daten empfangen bis der interrupt auslöst, gehe
     zurueck nach 2.)
6.)  vergleiche das byte mit dem zuvor gesendeten byte
7.)  wenn gleich--> schritt 8.), sonst gehe zurueck nach Schritt 2.)
8.)  warte bis der interrupt im slaveatmega8 ausgeloest hat,
     damit ein neues zeichen gesendet werden kann und verlass die 
routine



Implementierung Slave atmega8:

1.)  Es wird ein byte empfangen
2.)  Sende das byte gleich wieder und starte einen timer
3.)  Wird der interrupt ausgeloest bevor ein neues byte empfangen wird 
daten waren in ordnung gebe das byte frei, ansonsten gehe verwerfe das 
byte

Das ganze kann nur funktionieren, wenn ich dafür sorge dass immer nur 
ein kontroller sendet. Dies lässt sich meiner meinung nach mit dem 
multiprozessor modus der atmega8 realisieren.

Mich würde interessieren, wo ihr die Schwächen dieser Methode seht, oder 
ob man das ganze einfacher und besser aufbauen könnte.

Danke für eure beiträge.

lg sebastian

von AVRFan (Gast)


Lesenswert?

>oder ob man das ganze einfacher und besser aufbauen könnte.

Um Dir diese Frage zu beantworten, müsste man das wirkliche Ganze ja 
erstmal kennen. Ich meine diese gewissen Posts, die mit "Also eigentlich 
will ich folgendes machen" anfangen... ;-)

Ansonsten würde ich immer versuchen, eine Aufgabe - wenn es irgendwie 
geht - mit nur einem µC zu lösen, statt ein Multi-Prozessor-System zu 
kreieren. Ich setze mich nur ungern mit Fragen des Busdesigns, 
Adressmanagement, Timinggedöns, Arbitrierungsstrategien, 
Übertragungsprotokolle, Vermeidung/Handling von Zugriffskonflikten und 
Maßnahmen bei Datenverlust auseinander - daran führt aber kein Weg 
vorbei, wenn die Chose am Schluss auch zuverlässig funktionieren soll. 
Du bist ja gerade dabei, das zu merken.  Ich kann mir auch Schöneres 
vorstellen als die Software eines solchen Systems zu debuggen, oder 
glaubst Du, so etwas läuft auf Anhieb perfekt?  Nein, sowas läuft zum 
Beispiel ein paar Minuten und stürzt dann "völlig unerklärlicherweise" 
ab.  Da kann man bei der Fehlersuche dann viel Spaß haben.

"Welche Möglichkeiten gibt es, die Aufgabe mit einem µC zu 
bewältigen?" - ich fände das Gehirnschmalz in der Suche nach einer 
Antwort auf diese Frage immer besser investiert.  Das ist meine 
Meinung.  Es gibt ne Menge Leute, die mal aus irgendwelchen Gründen ein 
tolles Multi-µC-System aufbauen wollten, und in ihrer Unerfahrenheit 
dachten, wenn sie es "einfach so und so" machen, dann müsste es prima 
gehn.  Ich kenne keinen, dem es gelungen ist.

von duron005 (Gast)


Lesenswert?

Danke für deine Antwort.
Das ganze ohne mehrere µC aufzubauen ist leider nicht möglich, es muss 
also ein Multiprozessorsystem sein. Prinzipiell brauche ich die 
Zweiwegekommunikation nur, um zu gewährleisten dass die richtigen daten 
ankommen. Datensicherheit steht also auf oberster Ebene, weil 
prinzipiell müssen die Slave-Kontroller keine Daten senden.

Ist das also hardewaremässig machbar, oder ist das hardewaremässig schon 
nicht möglich. Softwaretechnisch glaube ich nicht, dass  das so ein 
Problem sein wird. Faktor Sendezeit ist ja egal, also kann ich da genug 
große Zeitfenster einbauen, dass das ganze auch stabil läuft.

lg sebastian

von Matthias L. (Gast)


Lesenswert?

Vielleicht hilft dir das:
Beitrag "Re: RS485 - Kommunikation"

von Stefan E. (sternst)


Lesenswert?

> Wenn ich
> softwaretechnisch gewährleisten kann dass immer nur einer von den
> 4atmega8 daten sendet, ist das ein problem wenn sie an der selben
> seriellen hängen oder muss ich sie hardwaremässig irgendwie entkoppeln?

Denke daran, dass der UART auch dann, wenn er nichts sendet, die 
Tx-Leitung aktiv auf High zieht. Du musst in der Software also nicht nur 
sicherstellen, dass immer nur einer sendet, sondern auch, dass immer nur 
ein UART-Sender aktiviert ist, und der Portpin ansonsten als Eingang 
konfiguriert ist. Dann kannst du die Tx-Slave-Leitungen direkt 
zusammenschalten.

von AVRFan (Gast)


Lesenswert?

>Das ganze ohne mehrere µC aufzubauen ist leider nicht möglich, es muss
>also ein Multiprozessorsystem sein.

OK.  Dann rate ich Dir, jederzeit darauf zu achten, alles so 
unkompliziert wie möglich zu machen.  Blos keine Tricks oder 
irgendwelche "Quick and Dirty"-Mätzchen - darüber verlierst Du 
garantiert früher oder später die Kontrolle.

>Prinzipiell brauche ich die Zweiwegekommunikation nur, um zu gewährleisten
>dass die richtigen daten ankommen.  Datensicherheit steht also auf oberster
>Ebene, weil prinzipiell müssen die Slave-Kontroller keine Daten senden.

Eine starke Erleichterung würde es bedeuten, wenn die Slaves nur 
empfangen, aber wirklich nie senden müssen.  Du könntest die gewünschte 
Datensicherheit auch über Checksummen erreichen; dann könnten die Slaves 
reine Empfänger sein.  Zu jedem reinkommenden Datenpaket berechnet der 
betreffende Slave die Checksumme und vergleicht sie mit dem vom Master 
errechneten mitgesendeten Wert (wobei das dann schon wieder eine der 
"unangenehmen" Fragen nach sich zieht, nämlich was der Slave tun soll, 
wenn die Checksumme nicht übereinstimmt - er kann dem Master ja keine 
Schick-nochmal-Aufforderung senden).

Ein Zurückschicken aller empfangener Daten zum Master gewährleistet auch 
keine perfekte Datensicherheit. Es würde vielmehr dazu führen, dass der 
Master bisweilen glaubt, der Slave hätte falsche Daten, obwohl er 
richtige hat, nämlich immer dann, wenn die Daten auf dem Rückweg 
verfälscht werden.

Du hast nur vier Slaves... hm... vielleicht wäre das eine Alternative: 
Der Master sendet über den UART Daten an die Slaves, und zwar immer an 
alle.  Das Ansprechen einzelner Slaves wird über Adressen gemanagt.  Die 
UART-Rückleitung von den Slaves zum Master wird nicht genutzt. 
Stattdessen gibt es von jedem Slave eine Extra-Leitung zum Master, über 
die der Master z. B. das Vorhandensein der Slaves feststellen oder 
einfache Statusinformationen empfangen kann.  Am Master wären dann der 
Tx-Pin plus vier weitere normale Pins (als Input konfigurert) belegt, 
für jeden Slave einen.  Damit wärst Du von der "Mehrere Slaves senden 
gleichzeitig UART-Daten an den Master"-Problematik weg.

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.