PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie viel Sachen kann ein Atmega 2560 "gleichzeitig" machen



super-robman
04.09.2011, 10:47
Hallo,

ich habe bereits eine Maschine, die durch Interrupts zeitgesteuert einen Motor antreibt. Daneben besitzt das Board ein LCD Display und ein paar Taster zur "Programmierung" wann der Motor sich bewegt, wie weit und so weiter.

Nun möchte ich sie über RS232 mit einer Waage verbinden, die ständig die aktuellen Werte sendet und auf eine SD-Karte aufzeichnen. Daneben möchte ich die Steuerung über das Display und die Tasten durch ein XBee Modul ersetzt um die Einstellungen für den Motor per Funk vornehmen zu können.

Ist es möglich, dass ein Atmega "gleichzeitig" (ich weiß multitasking kann er nicht) zwei UARTS (eins für das XBee und eins für die Daten von der Wage) abhört, aller x Minuten einen Schrittmotor Befehle gibt und auf SD aufzeichnet was die Wage an Daten sendet?

Ich habe gelesen, dass das schreiben in den EEPROM durch Interrupts gestört werden kann. Ist das beim Schreiben auf die SD genauso? Ich könnte die Interrupt gesteuerte Motorbewegung auch durch eine Echtzeituhr ersetzten und diese konstant auslesen um den Interrupt zu umgehen.

Sollte ich das SD-Modul und die Auslesung der RS232 Schnittstelle einem separaten Controler übergeben?

Danke für Euche Hilfe.

Robert

Kampi
04.09.2011, 11:20
Wenn du FAT32 oder so auf der SD-Karte haben möchtest kannst du das mit einem Mega32 schon knicken. Für ne SD-Karte die man ohne Probleme am PC Auslesen kann brauchst du mindestens einen Mega128, da der die mind. Anforderungen an die RAM-Größe erfüllt.
Generell kann alles durch Interrupts gestört werden, da ein Interrupt das laufende Programm unterbricht. Und wenn du nicht nur 1 Zeichen auf die Karte schreiben willst dauert das schreiben etwas länger. Du musst bedenken der Controller schreibt jedes zeigen einzelnt und wenn zwischendurch ein Interrupt kommt ist der ganze Schreibvorgang gestört.
Die Frage ob du für die UART und die SD-Karte nen einzelnen Controller nimmst kann man nicht so direkt beantworten, da man nicht weiß wie oft der UART benutzt werden soll. Für die SD-Karte brauchst du definitiv mind. nen Mega128 und wenn die UART Kommunikation nur etwa 1x alle paar Sekunden ist, ebenso wie das beschreiben der Karte(die man eh nur alle paar Minuten oder Stunden beschreiben sollte oder auf Abruf, da so eine Karte nur max. 10000x beschrieben werden kann) sollte das für einen Mega128 kein Problem darstellen. Das übergeben der Daten vom UART und für die SD-Karte zwischen den Controllern würde ich dann in I2C machen.

Richard
04.09.2011, 15:24
Wenn du FAT32 oder so auf der SD-Karte haben möchtest kannst du das mit einem Mega32 schon knicken. Für ne SD-Karte die man ohne Probleme am PC Auslesen kann brauchst du mindestens einen Mega128, da der die mind. Anforderungen an die RAM-Größe erfüllt.
Generell kann alles durch Interrupts gestört werden, da ein Interrupt das laufende Programm unterbricht. Und wenn du nicht nur 1 Zeichen auf die Karte schreiben willst dauert das schreiben etwas länger. Du musst bedenken der Controller schreibt jedes zeigen einzelnt und wenn zwischendurch ein Interrupt kommt ist der ganze Schreibvorgang gestört.
Die Frage ob du für die UART und die SD-Karte nen einzelnen Controller nimmst kann man nicht so direkt beantworten, da man nicht weiß wie oft der UART benutzt werden soll. Für die SD-Karte brauchst du definitiv mind. nen Mega128 und wenn die UART Kommunikation nur etwa 1x alle paar Sekunden ist, ebenso wie das beschreiben der Karte(die man eh nur alle paar Minuten oder Stunden beschreiben sollte oder auf Abruf, da so eine Karte nur max. 10000x beschrieben werden kann) sollte das für einen Mega128 kein Problem darstellen. Das übergeben der Daten vom UART und für die SD-Karte zwischen den Controllern würde ich dann in I2C machen.

Ich habe einen RS232 > USB Stick Adapter (Vilcum)der hat eine FAT intern, klappt ganz gut. Ach und kein µC kann etwas "gleichzeitig" die Arbeiten alle sequenziell, wenn einige Aufgaben nicht gestört werden dürfen muss der Programmierer mit geschickten Code dafür sorgen. Einige Daten Abrufen, Speichern u.s.w. ist aber nicht wirklich ein Problem, zur Not kann man im Simulator sehen was wie fiel Zeit braucht und die Programm Abschnitte entsprechend "sortieren".

Gruß Richard

Besserwessi
04.09.2011, 15:48
Das klingt alles nicht so als würde es viel Rechenzeit brauchen. Damit sollte es eigentlich so funktionieren, erfordert aber wohl eine gute Planung des Programms. Eigentlich wird das EEPROM nicht durch einen Interrupt gestört - es ist so das man in einer ISR nicht gut auf das EEPROM zugreifen kann, weil der Zugriff relativ langsam ist. Das ist aber ein lösbares Problem, erfordert aber ggf. eine zusätzliche ISR für das EEPROM.

Es könnte mit dem RAM knapp werden, weil die SD Karte oft viel RAM für Puffer (z.B. FAT) braucht.

Kampi
04.09.2011, 16:10
Ich meine ich hätte bei Watterrot auch nen SD Adapter gesehen wo bereits ein Controller drauf sitzt der die Sachen auf Karte schreibt. Sicher bin ich aber nicht, müsste ich nochmal suchen. Und Richard den Adapter den du meinst kenn ich, ich benutz ihn selber ;)
Der wäre natürlich eine alternative wenn man statt Karte lieber nen USB-Stick benutzen will da der Adapter nur eine UART-Schnittstelle braucht und man den mit einfachen Textbefehlen bedienen kann.

Edit:
Hab's gefunden. Hier das meint ich:
http://www.watterott.com/de/uALFAT-MicroSD-Board

Vitis
05.09.2011, 17:07
Kein Computer kann irgendwas gleichzeitig ... es läuft immer auf Multitasking hinaus. Bei den kleinen µC spricht man da von einer State-Machine.
Davon abgesehen sind die Interrupts schon sehr mächtig, also ne rs232 abhören macht der AVR nebenher in Hardware, das Verarbeiten dann in Software
und das Senden ggf. auch wieder in Hardware ... ich halte die Geschichte für machbar.

Beispiel: In meinem "größten" Projekt macht n Mega128 das Multiplexing von 5 16-Segemnent-Anzeigen, RS485-Protokoll, externen AD-Wander, Externe RTC, 2 PWM-16Bit 400Hz, Tastenabfrage 2x3-Matrix, diverse Regelungen usw. usw. ... Die Dinger können schon was wuppen.

super-robman
06.09.2011, 10:12
Danke für die Antworten! Es scheint also schon machbar zu sein (abhängig von meinen Fähigkeiten :-)). Da kommt mir noch eine Idee in den Sinn, die neuen Atxmega Chips habe doch einen DMA support. Würde das Schreiben auf SD-Karten dadurch weniger "kompliziert" werden?

Für jetzt (da ich den ATMEGA 2560 schon habe) finde ich das uALFAT-MicroSD-Board das Kampi vorgeschlagen hat eine sehr gute Idee.

Dank Euch.

Viele Grüße

Robert

Kampi
06.09.2011, 11:13
Nein soweit ich weiß ist dieser DMA Support nur für RAMs da. Die SD-Karte wird per SPI beschrieben. Wichtig ist auch das du daran denkst das die Karte mit 3,3V arbeitet. Nicht vergessen!

Ceos
06.09.2011, 14:21
moment ist der DMA Mode nicht für einen Beipass von Daten gedacht um sie nicht lästig über die CPU laufen zu lassen sondern direkt aus dem Speicher an einen Port zu geben oder an das SPI ??? Interessanter Gedanke zumindest aber macht die Übertragung nur minderschneller, weil man nur Blockweise schreiben kann und danach immer wieder die Befehlssequenz fürs Schreiben neu senden muss

Kampi
06.09.2011, 15:20
Stimmt hast recht.....habs mir gerade nochmal im Datenblatt durchgelesen. Sorry mein Fehler hatte es falsch in Erinnerung.
Das hier steht im Datenblatt:

The XMEGA A1 has a Direct Memory Access (DMA) Controller to move data between memories
and peripherals in the data space. The DMA controller uses the same data bus as the CPU to
transfer data.

Aber der Gedanke ist gut....mal morgen einen Arbeitskollegen fragen ob das möglich ist..... ;)