PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zwei Atmega32 oder gleich einen größeren Atmega?



Zeroeightfifteen
02.01.2006, 09:53
Hallo
was findet ihr besser?
soll ich zwei Atmega32 über den I2C Bus verbinden damit ich mehr Ein und Ausgänge habe oder soll ich einen größeren Atmega nehmen?

bertl100
02.01.2006, 09:55
Warum nicht mit RS232 verbinden?
Dann kannst mit Strings arbeiten.

MFG

Bertl

Grusim
02.01.2006, 10:00
Ist abhängig von der Problemstellung die du hast. Wenn du alle Eingänge und Ausgänge so schnell wie möglich abarbeiten muss und reagieren musst,nimm einen. Ansonsten kannst du zwei nehmen, wenn du einen Teil sehr schnell reagieren muss der Rest halt nur langsam. Weil I2C braucht ja auch immer ein bisschen Zeit die Daten zusammezustellen und zu versendne bzw. zu verarbeiten wenn sie empfangen wurden.

Ich zum Beispiel, wenn ich einen BOT bauen würde, was ich noch vorhabe dieses Jahrzent *gg* werde einen Chip nur für die Motorsteuerung benutzen und fast-response-Sensoren (Bumper) einen nur für die Sensoren (Auswertung) und einen Masterchip für Kartenerstellung und Koordination. So kann ich immer einen Teilbereich aufbauen und kann so fast-response und rechenintensive Arbeiten auslagern udn nur die relevanten Ergebnisse austauschen.

chr-mt
02.01.2006, 10:00
Hi,
das kommt immer drauf an, was du damit machen willst.
wenn beide Controller gleichzeitig Aufgaben verrichten können (oder müssen), sind 2 Controller natürlich besser.
Wenn's nur um die Zahl der Eingänge geht, ist ein großer Chip einfacher, da du dir die Kommunikation zwischen den Controllern sparst.
Größer als MEGA 32 gibt's aber nur noch in TQFP oder PLCC..

Die ganz großen (Mega1280/1281 etc.) sind leider noch nicht gut lieferbar.
86 IO's (!) bei den 100 Pin Versionen und 4 UARTs dürften dann aber erst mal genug sein ;)

Gruß
Christopher

Zeroeightfifteen
02.01.2006, 10:10
Ich bin gerade noch am entwerfen meines Bots. Ich dachte mir, dass der eine Controller die Motorsteuerung und die Kolisionssensoren verwalten soll. Der andere dann noch Akkustand Tastatureingabe und LCD. Wobei ich mir überlege ob ich nicht einen I2C LCD kaufen sollte. Meint ihr, dass diese Zusammenstellung einen Sinn ergibt? Weil ich dachte mir Wenn einer die Sensoren übernimmt und der andere die Motoren dann muss ich ja ständig etwas über den Bus übertragen.

Marco78
02.01.2006, 10:15
Warum ein I2C-LCD? Die sind teurer als "normale". Es ist ja vom Material her schon bald günstiger noch einen dritten AVR zu kaufen und damit ein I2C-LCD zu bauen. Oder RS232-LCD, was wohl noch einfacher ist.

Wenn du zu wenig Pins hast, kannst du die auch erweitern. Ist aber im Einzelfall zu prüfen. Kommt halt drauf an, wie schnell alles arbeiten muss.

Zeroeightfifteen
02.01.2006, 10:34
Dann werd ich das doch so machen dass ich zwei Atmegas verwende. Mit dem erweitern von Pins find ich nicht so gut. So kann der zweite Atmega die Sensoren oder Tasten schon mal verarbeiten und nur noch das wesentliche an den Master senden. Somit wird auch der Master entlasstet denk ich.

Marco78
02.01.2006, 10:49
Mit dem erweitern von Pins find ich nicht so gut.
Ich meinte selbst wenn dir bei zwei Mega32 noch Pins fehlen, kannst du sie erweitern.

Zeroeightfifteen
02.01.2006, 10:52
Achso ja aber ich denke fürs erste reichen mir meine Pins schon aus. Die Tastatur werde ich über einen A/D Pin ansteuern, da benötige ich dann auch nur einen.

Ratber
02.01.2006, 14:16
@Zeroeightfifteen

du willst also nen Robbie basteln und hast angst das die Ports nicht reichen ja ?

Nun,es ist ja so das nicht jede zu steuernde Funktion gleich mit Lichtgechwindigkeit ausgeführt werden muß.
Dh. man kann die nichtzeitkritischen Schalt udn Steuervorgänge auch gut auslagern.

Statusbits,Tastatureingaben,Anzeigen und sonstige Signalisierungen kann man gut auf ein Schieberegister oder z.b I2C auslagern.

Für Bascom und I2C gibts ja die Lib für LCD und Matrixtastatur da sparste schonmal ne menge Portpinne.
Für andere Sprachen gibts natürlich analog das gleiche.


also Portmangel ist kein Problem.
Da kannste fast beliebig erweitern.

Schnapp dir mal deinen M32 und probier etwas damit rum dann merkste wie gut das geht.

Zeroeightfifteen
02.01.2006, 18:30
Ja aber um zwei M32 zu verbinden benötige ich ja die I2CSlave.lib.
Kann ich auch ohne dieser Library etwas mit zwei Atmegas machen?

Zeroeightfifteen
02.01.2006, 18:40
In meinem anderem Thread Diskutieren wir auch gerade Ob ich mir eine Library selber schreiben soll oder ob ich sie mir kaufen soll. Ich weis aber noch nicht was mir die genau bringen soll. Aber wenn das sonst nicht möglich ist zwei Atmegas miteinander zu verknüpen werde ich sie mir doch kaufen müssen.

Ratber
02.01.2006, 18:52
Ja,wenn du es so machen willst dann gibts nur Kaufen oder selber schreiben.

Philli
02.01.2006, 19:09
Hallo,
ich kann dir aus Erfahrung empfehlen auf keinen Fall 2 Atmega zu verwenden, da es da bei mir und auch bei einigen anderen schon oft zu Komplikationen kam!

Zeroeightfifteen
02.01.2006, 19:15
was für Komplikationen soll es da geben? Ich dachte mir wenn ich die I2CSlave Library habe ist doch eine Master Slave Verbindung ohne Probleme möglich.

Marco78
02.01.2006, 20:27
Du kannst die AVRs ja auch über einen anderen Bus verbinden. RS232 geht ja auch per Software. Oder du "erfindest" selbst ein Protokoll.
Alles was superschnell geschaltet werden muss, kann der eine AVR übernehmen. Und alles was ein paar hundert mS Zeit hat kann über RS232 vom anderen gemacht werden.

So sparst du dir schonmal die 15€ für die Lib.

Ratber
02.01.2006, 20:31
Einfachste Alternative:

Nimm nen M128 dann haste von allem erstmal reichlich :wink:

Zeroeightfifteen
02.01.2006, 20:32
und was brauche ich da für eine RS232 verbidung? kann ich da zwei Controller direkt miteinander verbinden? kann ich da auch eine Master Slave Verbindung herstellen und gibt es da auch Beispielprogramme?

Marco78
02.01.2006, 20:35
Ja. Rx an Tx und Tx an RX. Einfach über Kreuz.
Und dann kannst du was senden und empfangen, als ob es vom PC komt, falls du das schonmal probiert hast.
Wenn du es per RS232 machst, brauchst du noch nichteinmal einen Pegelwandler.

Marco78
02.01.2006, 20:36
Jetzt hast du deinen Beitrag editiert.

Zu Master-Slave:
Wozu?
Beispiele gibt es in der Hilfe von Bascom und im Samplesordner von Bascom

Zeroeightfifteen
02.01.2006, 20:47
kann ich dann den PC über den Max232 zur kontrolle auch noch dazu hängen? oder stört der die übertragung der beiden Controller? Aber wenn ich 3 Controller miteinander verbinden will geht das nicht mehr oder?

Ratber
02.01.2006, 20:51
Über die Serielle gehen immer nur Zwei Teilnehmer.

Wenn du mehr verbinden willst dann mußte entweder mit 2 Seriellen Pro Controller eine art Tokenring aufbauen oder gleich einen Bus einsetzen.

Zeroeightfifteen
02.01.2006, 21:00
Die RS232 Verbindung bräuchte ich scho weil ich dort die Variablen kontrolliere.

Ratber
02.01.2006, 21:03
Ja dann überleg dir nen Bus.

Kannst ja was eigenes Stricken sofern du nicht an was anderes gebunden bist.

Zeroeightfifteen
02.01.2006, 21:04
ich werde dann doch erst mal an die i2cslave zurückgreifen bevor ich mir jetzt einen neuen Bus überlege.

Ratber
02.01.2006, 21:08
Yo,mnach mal.

Versuch es mal bei gelegenheit mit nem eigenen Bus.
Macht spaß. :D

Zeroeightfifteen
03.01.2006, 11:33
Geht das nicht wenn ich vom ersten Atmega daten in ein externen Eeprom speichere und diesen dann vom zweiten Atmega auslese? Oder ist das zu umständlich? Geht das überhaupt?

Ratber
03.01.2006, 12:51
Sicher geht das aber dann mußte bei I2C den Multimastermode nutzen also die Arbitration mit einbeziehen sonst gibt es auffem Bus nur Müll.

Zeroeightfifteen
03.01.2006, 18:51
Ich seh schon das wird nicht einfach. Das muss ich mir noch überlegen wie ich das mache. Aber besser wäre schon mit Slave und Master oder?

Marco78
03.01.2006, 19:39
Slave und Master brauchst du ja nur bei IIC. RS232 braucht sowas nicht.
Und RS232 kannst du per Software so viel wie du Pins hast auf jeden anderen Pin legen.
Mir soll es egal sein. Ich muss nicht 15€ ausgeben. Die könnte man sich sparen, wenn man etwas mehr Arbeit investiert. Und das ist eigentlich nur geistige Arbeit. Das körperlichste dadran ist nur das Tippen. Und das hast du bei I²C auch.

Der PC kann ja über Software-RS232 angeschlossen werden und die beiden AVRs über die Hardware. Somit hast du für den hauptsächlichen Anwendungsfall die meiste Leistung was die Übertragung angeht.

Irgendwo habe ich hier auch gelesen, das man mehrere AVR mit RS232 auch einfach im Ring verbinden kann. Ob das geht eiss ich nicht. Aber wenn, wird das ganze noch einfacher.

Marco78
03.01.2006, 19:39
Sorry, Doppelpost :(

Du hast noch auf die Frage nicht geantwortet, warum du einen Master und Slave brauchst.
Selbst bei RS232 kann einer eine höhere Priorität haben.
Master/Slave bei I²C gibt es auch nur, damit der Bus weiss was los ist.
Genau so wie es im Netzwerk nur einen Server geben kann, der die IP vergibt.

Ratber
04.01.2006, 01:26
Ich seh schon das wird nicht einfach. Das muss ich mir noch überlegen wie ich das mache. Aber besser wäre schon mit Slave und Master oder?

Ja Marco sagte es mit seinem Beitrag im grunde schon.
Ohne Fleiß wirst du nicht weiterkommen egal welche Möglichkeit du nutzt.

Ich würde wie gesagt einfach einige Ports erweitern (Schieberegister oder I2C).
Soviele Zeitkritische Ports braucht man eigentlich garnicht.

Zeroeightfifteen
04.01.2006, 14:13
Ich hab mir jetzt mal die I2CSlave bestellt. Damit seh ich dann schon was da alles möglich ist. Ich werde jetzt erst mal den I2C Bus ausprobieren. mit Porterweiterung hab ich halt das ganze Programm in einem Atmega. So kann ich es auf zwei aufteilen und jedem seine Aufgabe geben. Den Bus brauch ich ja nur um Tastatureingabe und LCD zu übermitteln. Wobei das der erste Atmega verarbeitet und dem anderen dann sagt was er mit den Motoren machen soll.

Ratber
04.01.2006, 14:34
Yo,schau erstmal wies klappt.