Forum: Mikrocontroller und Digitale Elektronik ATmega8 +Software Uart +Bascom +mehrer ATmegas's verbinden


von Michael B. (michael123)


Lesenswert?

Hallo,

vorab:
Alle möglichkeiten Infos darüber zu bekommen habe ich gentzt aber
nichts brauchbares gefunden.



Ich möchte mehrere ATmega8 miteinander verbinden. Die sollen dann alle
über Uarts miteinander Kommuniezieren. Es gibt einen "großen sammel"
ATmega8 der die Daten vom PC empfängt bzw zum PC sendet. So dder
ATmega8 der die Daten vom PC empfängt bzw. zum PC sendet soll 9
Software UARTS haben. Von diesen Software UARTS geht es dann zu den
sogenanten "end" ATmega's welche dann die Daten ausgeben und Andere
daten empangen. Um die "end" Megas's braucht man sich eigentlich
nicht zu kümmern weil die mit einem "echten" Uart also Hardware Uart
senden. Der "sammel" Mega braucht aber 9 SW Uart's um die Daten der
Anderen Megas zu empfangen oder zu diesen zu senden.

Nun meine Frage:
Kann mir jemand ein Beispiel Programm in BASCOM geben oder schreiben
für den ATmega8 am besten welches einen oder mehrer Software Uarts
"mchat" besser Programmiert.

Meine zweite Frage:
Muss ich irgendwas bei der Kommunikation zwischen zwei µC's beachten
wenn ja was?

mfg
Michael

von Rahul (Gast)


Lesenswert?

9 Softuarts... Gewagt... mit Bascom IMHO unmöglich.
Verbinde die "Jungs" lieber über die SPI oder einen Bus wie RS485
oder I²C.
Durch zyklisch/regelmässiges Abfragen deiner "End-Megas" kannst du
dir den Aufwand einer Softuart sparen.

von Michael B. (michael123)


Lesenswert?

Hallo,

wei würdest du das dann machen also programmieren und hardwaremäsig

mfg
Michael

von Rahul (Gast)


Lesenswert?

1. in C oder Assembler...
2. Wenn deine End-AVR nur Daten ausgeben und vielleicht noch nicht
zeitrelevante Daten einlesen sollen, dann würde ich das ganze mit der
SPI realisieren.
Die kann man auch problemlos in Software realisieren, und wenn man am
Master-Mega8 nicht zu viele Pins für die Adressierung "verschenken"
will/kann, dann bietet sich ein Adress-Dekoder auf HC-Basis an.

von Michael B. (michael123)


Lesenswert?

Hallo,

nun ja es soll mit den "end mega's" PWM gemacht werden.Über
Hardware.
Mit dem anderen soll dann in ca 1 sec abständen ein 12bit wert an jeden
mega übermittlelt werden.

Wäre es auch möglich das jeder Mega mit einem Uart des anderen
Verbunden ist also der "sammel" Mega hat nur einen Uart mit dem er am
PC hängt. Einen Software UART und das wars am "sammel" Mega. Die
anderen sind alle in einem "stern" um den "sammel" Mega angeordnet
also so:

  Mega                Mega
      \              /
       \            /
       "sammel Mega"
        /           \
       /             \
  Mega                Mega

Alle Mega's hängen also am Selben Uart. Geht das oder wird das
probleme geben?

mfg
Michael

von Bernhard S. (bernhard)


Lesenswert?

>Alle Mega's hängen also am Selben Uart. Geht das oder wird das
>probleme geben?

Hardwaremäßig kein Problem, die "Jungs" müssten nur entkoppelt werden
(z.B. Diode ==> ODER-Verknüpfung)

Softwaremäßig dafür sorgen, dass immer nur einer "spricht", sonst
versteht der Haupt-µC nicht sehr viel, oder das falsche.

Bernhard

von Roland P. (pram)


Lesenswert?

Was auch noch möglich wäre, wäre eine Art Token-Ring, d.h. der TX des
einen AVR's hängt am RX des anderen. Jeder AVR muss dann das Byte
weiter schicken, dass er gerade empfangen hat. Durch geschickte
Programmierung entstehen nicht mal Kollisionen (umkreisen des Tokens)

Gruß
Roland

von Bernhard S. (bernhard)


Lesenswert?

>Durch geschickte Programmierung entstehen nicht mal Kollisionen
>(umkreisen des Tokens)

sehr schöne Idee!

Bernhard

von Michael B. (michael123)


Lesenswert?

Hallo,

ich glaube das das was Roland meint nicht funtzen wird weil glaube ich
jder Mega eine Antwort haben möchte. Aber einen versuch ist es wert.

Die 12bit errechnen iich so: 8 bit Daten und 4 bit für die "Adresse"
d.h. man könnte rein Teoretisch 16 Mega's steuern. Werde heute oder
Morgen versuche machen und euch dann berrichten.

mfg
Michael

von Hellmut Kohlsdorf (Gast)


Lesenswert?

Die Anwendung mit einem "Sammel mega8" per rs232 Kommunikation zu
machen erscheint mir eine nicht sehr praktische Lösung. Für solche
Anwendungen ist ja der I2C-Bus ideal, diesen unter Bascom zu nutzen ist
mindestens so trivial wie das Protokoll per rs232 zu implementieren!

Vielleicht kann Michael mir erklären warum er die Kommunikation der
mega8 untereinander mit rs232 lösen will? Die Kommunikation zum PC ist
sicher sinnvoll!

von Roland P. (pram)


Lesenswert?

Hi Michael, du müsstest dir mal die Grundlagen zum Token Ring Verfahren
"reinziehen", z.B. von hier:
http://lrs2.fmi.uni-passau.de/online/EZKom/index2.html?group=student&intensity=expert&form=script&page=78&toc=yes&head=yes&anc=_3420:&tocanc=78

(ich geb zu, das das alles nicht sehr einfach ist zum Programmieren,
dafür müsste es zuverlässig funktionieren, wenn man alles richtig
gemacht hat)

Ansonsten würd ich dir auch die I2C Lösung empfehlen. Man kann hier
aber (soweit ich weiß, falls das nicht stimmt bitte korrigieren) nur
einen Master haben damit es keine Kollisionen gibt. Dann muss man
regelmäßig pollen der man spendiert noch eine Leitung, welche am
Sammel-Mega anzeigt, dass das Modul Daten hat (eine Art IRQ)

Gruß
Roland

von Hellmut Kohlsdorf (Gast)


Lesenswert?

Hallo Roland

Gerade das es von der Software z.B. bei BASCOM extrem einfach ist
spricht für I2C. Bei I2C kann jedes am Bus angeschlossene System Master
sein, dürfte aber in dieser Anwendung nicht das Thema sein.

Wie periphere Systeme der "Sammelstelle", also wohl der Master, sich
mitteilen können gibt es unterschiedliche Verfahren. Von der
Einfachheit und damit letztlich auch damit das System robust ist, würde
ich nicht eine Multimaster-Lösung implementieren.

Das Pollen der 8 peripheren Systeme in dieser Anwendung nimmt praktisch
keine Zeit in Anspruch, Kollisionen auf demBus könnte es auch keine
geben wenn das System die Sammelstelle als Master betreibt, da nur ein
Master den Bus beanspruchen kann.

Ein Verfahren wäre bei jedem peripheren System, das jeweils eine eigene
Adresse, unter Softwaresteuerung festgelegt, ein Flag zu setzen ob Daten
zum Abrufen zur Verfügung stehen. Wenn nein, einfach weiter pollen, wenn
ja, so kann der Master wissen welche Daten wie und wo abzuholen sind.

Ein dem pollen alternatives sytem würde eine weitere Leitung, also 3
Leitungen, im I2C-Bus vorsehen, eine Interrupt Leitung. Sobald ein
peripheres System diese Leitung zum Beispiel auf Low zieht wäre dem
Master bekannt das daten bei einem der peripheren systeme zur Verfügung
stehen und das Pollen beginnen.

Da Michael ursprünglich 9 Software rs232 vorsah, könnte er auch für
jedes periphere System die Interrupt-Leitung an einen eigenen Pin des
zentralen mega8 legen. Dann wüßte der zentrale mega8 auch sofort
welches periphere System Daten bereitstehen hat.

Obwohl offensichtlich, mit Interrupt-Leitung meine ich nicht die
Interrupt-Funktion, sondern jedes x-beliebige Pin das der jeweilige
mega8 als Ausgang konfiguriert auf low, bzw high setzt und damit dem
zentralen mega8 ein Signal sendet!

von Martin (Gast)


Lesenswert?

Hallo,

ich als Anfänger versuch mal meine Gedanken los zu werden.
Ich würde dem Master nur eine SW Uart verpassen weil so wie ich das 
verstehe weiss der master ja wohin die Bytes gehören.

Bau dir doch einfach Transistor Schalter für jeden Sub Mega ein und wenn 
du an  Sub Mega4  was schicken willst schaltest du den Pin auf High der 
diese Schaltung durchverbindet. und wenn er fertig ist soll er sie 
wieder aus schalten.

Anders rum wenn einer deiner sub Megas was zu sagen hat erst prüfen ob 
die Leitung nicht gerade benützt wird(einen Status pin von allen Megas 
durchverbinden welcher auf High gesetzt wird wenn einer was sagt und 
danach wieder auf low gesetzt wird). Sich selbst zuschalten, sprechen, 
wieder wegschalten.

Ich würde versuchen das so zu realisieren.Kann natürlich auch stumpfsinn 
sein

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.