mikrocontroller.net

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


Autor: Michael Brambach (michael123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Brambach (michael123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

mfg
Michael

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Brambach (michael123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard S. (bernhard)
Datum:

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

sehr schöne Idee!

Bernhard

Autor: Michael Brambach (michael123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hellmut Kohlsdorf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht 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....

(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

Autor: Hellmut Kohlsdorf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.