PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 Atmegas verknüpfen



Motorburner
21.04.2012, 19:49
Hallo,
ich hab mal irgendwo gelesen, dass man die Atmegas untereinander verbinden kann, um z.B. mehr I/Os zu erhalten.
Das würde ich auch gern so machen. Aber erstmal: Mit welchen Leitungen werden die µP miteinander verbunden? UART? iSP?
Was müsste ich softwaretechnisch machen? Ich benutze Bascom.
Hauptprozessor sollte ein Atmega32 oder AT90S8535 sein, jeweils im DIP-Gehäuse.
Danke schonmal!

Besserwessi
21.04.2012, 20:57
Für die Verbindung hat man verschiedene Möglichkeiten, halt die üblichen Schnittstellen die die µCs so haben und wenn es sein muss auch noch eine Software Version.

Uart ist recht einfach, braucht aber in der Regel Quarze oder gleichen Takt, damit es zuverlässig läuft.
SPI ist schnell braucht aber 3 oder gar 4 Leitungen. Für einfach nur mehr IOs könnte man da ggf. auch gleich Schieberegister nehmen.
TWI bzw. I2C ist als Bus für mehr Teile geeignet, aber nicht ganz so einfach von der Software.

Motorburner
21.04.2012, 21:40
Hallo,
welche Möglichkeiten bieten sich noch, wenn man 2 µP miteinander verknüpft? Ich hab schonmal ein bisschen gegooglet, bis jetzt aber nichts brauchbares gefunden..
gleicher Takt bei UART wäre ja kein Problem, evtl könnte ich beide µP über einen Quarzoszillator laufen lassen.

Besserwessi
21.04.2012, 21:58
Wenn man Leitungen Sparen muss, z.B. weil die µCs weit auseinander sind, kann man noch ein 1-Wire Interface nutzen, ggf. auch mit einer Leitung für beiden Richtungen. Das müsste man dann aber wohl in SW machen, wird also eher langsam.
Möglichkeiten gibt es viele, aber einfacher wird es wenn die Schnittstelle von der Hardware Unterstützt wird. Das sind halt UART,TWI oder SPI beim Mega32.

Wenn das mit dem Takt kein Problem ist, ist die UART schon nicht schlecht und kann wenn nötig auch über längere Kabel gehen. TWI bietet sich an, wenn man es ohnehin schon hat für andere Hardware.

wkrug
22.04.2012, 08:07
Alle Methoden haben auch Vor- und Nachteile:
1wire Interface: Ist nur in Software implementierbar. Für 1 wire Master gibts Librarys für 1wire slaves nicht - Soweit ich weiß. Da das Timing nicht lapidar ist wür ich diese Schnittstelle nicht verwenden.
TWI bzw I²C: Ist im Prinzip langsam, aber durch den Quittierungs algorithmus relativ zuverlässig und wird von den meisten ATMEGA Controllern in Hardware unterstützt.
USART Verbindung: Relativ einfaches Protokoll, die Geschwindigkeit ist in Grenzen frei wählbar, die Schnittstelle wird von Hardware unterstützt und wenn man Bustreiber Bausteine benutzt geht das auch über sehr lange Verbindungen bis zu 1km.
SPI:Eigentlich die klassische Verbindung die von Hardware unterstützt wird. Geht schnell Ein Controller ist Master, der andere Slave. Auch die Schnittstelle wird von Hardware unterstützt. Aufpassen muß man lediglich bei der ISP, da die bei den meisten Controllern die gleichen Ports benutzt wie die SPI Verbindung.
Hie muß man also mit Jumpern oder Lötbrücken arbeiten, oder auf die ISP Schnittstelle verzichten.

Wenn es nur um eine Erweiterung von Portleitungen geht würde ich aber auch eine Schieberegister Lösung oder einen I²C Port Baustein verwenden.

Neutro
22.04.2012, 08:36
wkrug hat ja schon die Vor und Nachteile ganz gut beschrieben, in deinem Fall für mehr IO Ports würde ich auf I2C Port expander setzen, hier im Wiki ist das recht gut beschrieben:
http://www.rn-wissen.de/index.php/Bascom_I2C_Master

Grüße
Neutro

Motorburner
22.04.2012, 21:12
Hallo,
Ich weiß ja nicht, was sich noch so für Möglichkeiten anbieten, wenn man 2 µP miteinander verbindet. Die Porterweiterung war nur ein Bsp. Auf welchen Pins liegt beim 32er denn TWI? Ich kenn den Bus nichtmal. Von I²C hab ich gehört, vorallem im Bereich der EEPROMs.

TheDarkRose
22.04.2012, 21:36
TWI = I2C btw. Porterweiterung würde ich nicht mit einen zweiten µC! machen. Ein zweiter µC bietet sich zur Arbeitsteilung an, zb. wenn der Hauptcontroller schon mit seinen Hauptaufgaben schon relativ ausgelastet ist und man will aber eine Ethernetschnittstelle einbauen, dann übernimmt ein zweiter Controller diese Aufgabe mit dem Kommunikationschip.

Motorburner
23.04.2012, 15:29
Hallo,
würde es auch gehen, den Coprozessor als Speichercontroller für z.B. RAM, ROM oder Flash zu benutzen?

TheDarkRose
23.04.2012, 16:27
Alles was du machen willst. Das war nur ein Beispielszenario von mir ;)

oberallgeier
23.04.2012, 18:52
... den Coprozessor als Speichercontroller für z.B. RAM, ROM oder Flash ...Na ja, gehen tut ja viel. Vielleicht habe ich Deine Frage nicht kapiert, aber ich versuch mal trotzdem ne Antwort. Mal der Reihe nach:

a) einen Coprozessor als Flash(speicher) zu benutzen, müsste mal diskutiert werden, ganz klar ist Deine Frage nicht. Vermutlich hilft es Dir aber weiter, wenn Du weißt, dass der Flashinhalt eigentlich nur im Programmierstatus in den Controller geschoben werden kann - nicht aber zur üblichen Laufzeit. Damit ist es vermutlich weder zweckmässig noch sinnvoll, den ganzen Flash oder Teile davon auszulagern. Noch dazu recht aufwändig über einen zweiten Controller.
b) ROM oder RAM. Jeder Controller hat je nach Typ mehr oder weniger davon. Daten erst zum Coprozessor zu senden und dort abzuspeichern hat ja noch folgenden Beigeschmack: Du müsstest nicht nur die Daten senden sondern auch die Bezeichnung. Beispiel: als Wert "135" und als Bezeichnung "aktuelle Drehzahl linksrum des Motors 1". Wenn Du den Wert wieder brauchst, dann geht das andersrum ebenso aufwändig/kompliziert. Du würdest damit eigentlich nur Zeit verbraten - - und Energie für den Coprozessor. Sinn macht es hier, gleich einen "größeren" Controller zu nehmen, sprich einen, der on board gleich entsprechen mehr ROM oder RAM hat. Oder Du hängst ein EEPROM über I²C dran.

Vermutlich ist Dir aber die Arbeitsweise der Controller noch nicht wirklich klar. Dann könnte Dir dieses Tutorial helfen (klick hier) (http://www.mikrocontroller.net/articles/AVR-Tutorial) - oder vielleicht auch dieses (klick).


... irgendwo gelesen ... Atmegas ... verbinden ... um z.B. mehr I/Os zu erhalten ...Wenn Du Flash, RAM oder ROM auslagerst - dann haste aber auch keinen einzigen I/O mehr. Das ist Dir doch hoffentlich klar.

Viel Erfolg.

Motorburner
24.04.2012, 10:32
Hallo,
nein, so war das nicht gemeint.
Ich meinte das so, dass ich die I/Os des Coprozessors für Die Speicherbausteine verbrate, um I/Os bei dem Hauptprozessor zu sparen.
Aber wie gesagt, das ist erstmal aus reinem Interesse.
Mir ist aber gerade aufgefallen, dass meine LED-Leiste ganze 20mA pro LED zieht. Das könnte dem 32er zu viel werden. Ich finde aber leider auch keine passende 74er Teile, die ich als Treiber nehmen könnte & Transistoren verbrauchen zu viel Platz.. da hab ich dran gedacht, einen zweiten Prozessor zu missbrauchen..aber ohne ihn zu auf 'Gehorsam' des Hauptprozessors zu programmieren, sondern ihn über den Hauptprozessor anzusteuern.
Ich hab z.Z. viele sinnlose Ideen, aber ich bin am perfektionieren meines Evaluationsboards..da kommen solche Ideen von alleine :D
tut mir leid, wenn ich klinge, als hätte ich keine Ahnung. Aber Neues zu probieren finde ich immer besser.

wkrug
24.04.2012, 11:23
Üblicherweise verwendet man für sowas Schieberegister mit Latches. Guck mal unter 74HC595.
Als Treiber kannst Du dann ULN2803 Chips nachsetzten. So eine Kombo kann dann bis zu 8 LED's direkt treiben.
Wenn Du Multiplex Betrieb machen kannst oder willst, kannst du zusätzlich einen UDN2981 High side Treiber einsetzen und somit bis zu 64LED's im Multiplexbetrieb ansteuern.
Irgendwo ist dann aber auch Schluss, weil die LED's sonst zu dunkel werden.

Motorburner
24.04.2012, 16:48
Hallo,
wie wäre es mit Puffer zwischen µP & LED?

wkrug
24.04.2012, 17:02
Lies doch mal was ein UDN2981 und ein ULN2803 ist ( Datenblatt )!

021aet04
24.04.2012, 18:40
Transistoren sid zu groß? Es gibt Transistoren die kann man nichtmal per Hand richtig löten.
Als Beispiel http://pdf1.alldatasheet.net/datasheet-pdf/view/311598/IRF/IRFH3702TRPBF.html
Es gibt aber auch normale Kleinsinaltransistoren (ich habe einen hier der hat die ungefähren Maße von 3*1mm ohne Anschluss)

MfG Hannes

Motorburner
24.04.2012, 19:19
Hallo,
ich habs zu spät gelesen, sorry :D
..021aet04, ich rede von THT-Bauteilen.

Besserwessi
24.04.2012, 20:10
Auch bei den THT Teilen geht es schon recht klein, auf der Platine eigentlich nur 3 Löcher mit 2,5 mm Abstand, ggf. auch weniger. Der BC148 ist da schon mal ein Beispiel das es auch kleiner als TO92 geht. Die ggf. nötigen Widerstände kann man gut als SMD einlöten, auch wenn der Rest THT ist. Das wird mit einem extra µC im DIP Gehäuse ggf. schon größer, und dann kann man auch nicht alle Pins mit 20 mA belasten, es gibt da auch noch ein Limit für den ganzen Chip. Wenn der Platz knapp ist gibt es von Ti auch gleich Schieberegister, ähnlich den HC595 mit Treiber Ausgang.

Ein passende Treiber IC als 74xxx wäre ggf. ein 74AC240, ist aber nicht unbedingt zu empfehlen.

Motorburner
25.04.2012, 14:10
Hallo,
ich werde es mit ULN2803 oder UDN2981 machen.
Aber zurück zum Thema..ich weiß nicht, ob ich vielleicht doch auf die 5. Version meines Evalboards für Atmega16 & kompatible noch einen Attiny draufmache..

trekko
25.04.2012, 22:44
Hallo,
Aber zurück zum Thema..ich weiß nicht, ob ich vielleicht doch auf die 5. Version meines Evalboards für Atmega16 & kompatible noch einen Attiny draufmache..

Also, ich mag ATtinys. :-)
Welchen wirst du dir aussuchen?

Motorburner
26.04.2012, 12:18
Hallo,
als USB-Controller wahrscheinlich den 45er oder 2313. Platz ist knapp, deshalb wohl eher 2313 und Pinleisten zum aufstecken.
Aber mehr dazu in dem Evaluationsboard-Thread ;)