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
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.
Hallo, wei würdest du das dann machen also programmieren und hardwaremäsig mfg Michael
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.
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
>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
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
>Durch geschickte Programmierung entstehen nicht mal Kollisionen >(umkreisen des Tokens) sehr schöne Idee! Bernhard
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
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!
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.