Wie viel Microcontroller brauche ich?
Ich muss sagen, Microcontroller waren bisher nicht auf meinem Schirm. Sie sind für Programmierer irgendwie unsexy und sie machen ohne Hardware, die sie kontrollieren können auch wenig Sinn. Mit einem Artikel über „Hardware-Hacking“ wurde ich auf das Thema vor einiger Zeit gestoßen und weil viele digitale Meßgeber heute billig sind, genauso wie direkt abfragebare Chip-Kameras, GPS Sensoren oder Bewegungssensoren gibt es etliches, was man heute auch las Privatperson mit einem Microcontroller anstellen kann.
Ich hatte mich als nützliches Projekt für eine Wetterstation entschieden. Das ist programmtechnisch was relativ einfaches: in regelmäßigen Abständen Sensoren abfragen. Die Daten speichern und auf einen Reset warten der signalisiert das man sie abgeholt hat und man von neuem anfangen kann, eventuell noch ergänzt um Routinen fürs Übertragen.
Meine Wetterstation sollte die Daten jede Minute aufzeichnen. Von den Sensoren bin ich inzwischen vom Drucksensor abgekommen und denke eher an Feuchtigkeit, Temperatur und Licht. Dafür gibt es auch preiswerte Sensoren, während die meisten Drucksensoren eher zur Gewichtsbestimmung als zur Bestimmung des Luftdrucks gedacht sind.
Nun soll aber meine Wetterstation auf dem Balkon sein, das heißt der Controller ist nicht direkt an den Computer angeschlossen. Das bedeutet: der Microcontroller muss die Daten zwischenspeichern können und es muss eine bequemer Übertragungsmöglichkeit geben. Entweder WLAN oder ein Speichermedium. Da ich auch mal in Urlaub fahre, sollten die Daten auch zwei Wochen vorgehalten werden. Daraus kann man leicht folgende Rechnung anstellen: 1440 Minuten x 14 Tage x 3 Sensoren x 2 Bytes pro Wert = 120 kByte Speicher benötigt.
Das knockte die meisten der Arduino Plattformen aus. Wenn ein Sensor nur 8-Bit Werte liefert oder man z. B. drei 12 Bit Werte zusammen packt würde ein Arduino Due ausreichen. Ich habe mich dann an einen ct‘ Artikel erinnert dort wurde ein um einen Microcontroller herum entwickelter Retro-Heimcomputer erwähnt. Der Color Maximite hat ARduino kompatible Anschlüsse aber auch 128 kbyte Speicher, er kann einen Monitor ansteuern, ein Keyboard kann angeschlossen werden, es gibt eine Echtzeituhr und einen SD-Slot. das heißt er erfüllt von der Hardware her die Anforderungen.
Er setzt den PIC32 Microcontroller ein, der hat einen MIPS M4K-Kern und läuft mit 80 MHz, was selbst einen BASIC Interpreter rund 30-mal schneller als ein C64 laufen lässt. Ich bin ja noch mit 8 Bit Rechnern groß geworden und habe die auch in Assembler programmiert und irgendwie sehe ich das für diese Aufgabe als „Verschwendung“ an. Im Prinzip brauche ich die Rechenleistung nicht, von der Rechenleistung würde ein ATMega, ein 8 Bit Prozessor wie er in den meisten Arduinos steckt vollkommen ausreichen. Doch der kleine Speicher von 2-8 Kbyte schließt diese aus, und wenn man einen Massenspeicher wie einen SD-Kartenanschluss anschließt ist man im Preis auch gleich bei dem Color Maximite.
Ich habe das nach hinten geschoben, weil ich gerade noch so viel zu tun habe, (das habe ich eigentlich immer). Doch dann kam die Meldung, dass nun Intel auch ein Arduino-kompatibles Entwicklungsbaord namens Galileo herausbringt. Es basiert auf dem Quarks X1000 SOC. Der Name wird keinem was sagen, doch es ist ein alter Bekannter: Ein 486DX Kern mit 16 kbyte Cache. er versteht aber den Pentium Befehlssatz. Er ist mit 400 MHz getaktet und anhand der veröffentlichten Daten kann man ableiten das er in etwa so schnell wie ein 150 MHz Pentium ist. Dazu kommen 512 Kbyte OnBoard RAM und 8 MByte Flash-RAM. Auf dem Board dann noch 256 MByte RAM. Das ist dann nochmals eine Stufe höher. Die Rechenleistung hängt alle anderen Arduinos ab, aber die Abfrage der Pins verläuft langsamer selbst als bei den 8-Bit ATMegas. Ich habe mir in Gedanken überlegt wofür man so viel Rechenleistung braucht, kombiniert mit der Langsamkeit bei I/O Operationen. Vielleicht für eine Überwachungskamera, die Räume überwacht und nur Aufnahmen mit Bewegungen speichert, sich aber nicht von wechselnden Lichtverhältnissen irreführen lässt. Da müsste man einige Megapixel verarbeiten. Doch auch hier könnte man das Problem einfacher lösen wenn man einen Bewegungsmelder zusätzlich anschließt.
Boch eine stufe höher ist ein Raspberry Pi mit einem ARM Prozessor mit 700 MHz und bis zu 512 MByte RAM, doch er ist nicht direkt ein Microcontroller, auch wenn es Erweiterungen dafür gibt, sondern mehr ein Mini-PC.
Der klassische Microcontroller verarbeitet die Daten einiger Sensoren und steuert einige Aktoren. Er kommt daher mit wenig RAM aus. Weder ist das Verarbeiten großer Daten, noch das Speichern eine Domäne von Microcontroller. Daher sitzen RAM und FLAH-ROM meist auf dem Chip. Das ist zum einen eine Herausforderung für die Fertigung, es ist aber auch der Grund warum es so wenig RAM ist. Es wird als SRAM ausgelegt. Da braucht man pro Bit sechs Transistoren, was bei einem Kbyte Speicher schon 49152 Transistoren sind – bei rund 5000 bis 7000 Transistoren, die ein 8 Bit CPU Kern hat, eine durchaus nicht vernachlässigbare Größe.
Die Lösung wäre es die Kits mit externem RAM und externem Flash ROM auszuliefern. Beides ist heute billig zu haben. Ein Speicherchip hat heute rund 64 MByte Größe und kostet unter 2 Euro, Große Flash Speicher für SSD haben heute 4 und 8 GB Kapazität, aber es gibt auch kleinere ab 1 MB Größe. Bei den ATMega scheint externes RAM aber nicht vorgesehen zu sein, anders als beim Intel X1000. Dasselbe gilt für den PIC32. Die Architekturen sind geschlossen, nicht auf externes RAM und ROM ausgelegt.
So könnte für Hardware-Hacking die eigentlich überdimensionieren ARM und 486DX Prozessoren doch die besseren Lösungen sein, zumindest wenn eine Anwendung mal mehr als 100 KByte Speicher braucht. Ich bin ja mal gespannt ob jemand um den Rechner von Intel herum auch so was wie einen Raspberry Pi baut – Mit der Leistung eines 150 MHz Pentium 256 MByte RAM und einem SD-Kartenanschluss für das Betriebssystem könnte man ohne Probleme ein älteres Windows (Windows 98) oder Linux drauf laufen lassen. Das wäre dann ein neuer Mini-PC oder Thin Client. So was könnte ich mir auch zulegen fürs Surfen in den Werbepausen (an den Fernseher angeschlossen). Ein Notebook ist mir dafür zu umständlich und teuer. Eigentlich schriet das System nach einer solchen Nutzung.
Noch ein Blick zur Raumfahrt. Die 80 bzw. 84 MHz 32-Bit Microcontroller in einem Arduiono Duo oder Color Maximite sind leistungsfähiger als der ERC-32, dem derzeitigen Stahdardrechner in europäischen Raumfahrtprojekten und die Quark SOC bzw. der ARM im Rapberry Pi dürften den weltweit schnellsten Prozessor RAD 750 in der Leistung weit übertreffen. Der verarbeitet immerhin die Bilder des hochauflösenden Satelliten Wourldview in Echtzeit ….
> Bei den ATMega scheint externes RAM aber nicht vorgesehen zu sein,
Das stimmt so aber nicht. Externes RAM wird, wenn benötigt, über die normalen I/O-Ports angesteuert. Als Atmel die AVR-Controller Ende der 90er Jahre auf den Markt brachte, haben die auch eine Application Note heraus gegeben, die genau erklärt, wie man das macht. Und dann gibt es auch noch RAM-Bausteine mit seriellem Interface, so dass man mit 2-3 I/O-Pins auskommt, um Daten zu speichern; – Das wäre für die Wetterstation sogar ausreichend, weil es ja auch nicht so sehr auf Geschwindigkeit ankommt. Der Haken ist allerdings, dass man dann wahrscheinlich nicht um Elektronikarbeiten herum kommt. – Nun hab ich keine Ahnung von den Arduinos, aber ich vermute mal, dass da auch einige Portpins frei verfügbar sind, so dass sich da auch ein Speicherchip anschliessen lässt.
Ich fand es war sehr einfach, einen oder mehrere serielle EEProms an den Atmega anzuschließen und zu füllen. Gerade für wenig speicherintensive Anwendungen ist das eine gute Lösung.
Ausgelesen habe ich ihn dann über RS232.
Einen Flash-Chip zu beschreiben ist mir aber damals nicht gelungen. Hat irgendwie nicht geklappt.
Na ja wenn ich mich auf das zurückziehe kann ich über I/O Pins alles ansprechen. Bei meinem CPC wurde so das Bankswitching realisiert also mehr als 64 kb Speicher. Dabei ging das noch einfacher, man musste nur die unteren Adrressen vom Adressbus nehmen und die oberen vom I/O Bus.
Wenn ich externen Speicher meine, dann im herkömmlichen Sinn über adress- und Datenbus angebunden.
Moin,
ich verwende für bestimmte Aufgaben einen Arduino Mega + Ethernet Shield. Der Mega ist bei mir nötig weil ich bis zu 16 Analoge Eingänge brauche. Das Ethernet Shield bietet SSD + Ethernet.
Für Arduino+Ethernet gibts ein passende Gehäuse, dass sich mit etwas Sika auch Wasserdicht machen lässt.
ciao,Michael
PS: Auch das WiFi Shield bietet zusätzlich ne SSD.
bl> Wenn ich externen Speicher meine, dann im herkömmlichen Sinn über adress- und Datenbus angebunden.
Das war bei Microcontrollern in der Regel nur bei den großen Typen üblich. z.B. 68302.
Der Preis von Microcontrollern hängt (linear ?) von der Anzahl der PINs ab.
Die Microcontroler in Handys sind auch ein Beispiel dafür. Dort werden vier Chips verbaut:
– 1x Microcontroler
– 1x RAM
– 1x Flash
– 1x Analog bzw. HF
Schon klar. Die Lösung die ich meine geht auch so, dass dann ein Port als Adress- und ein weiterer als Datenbus benutzt wird. Solange die Speicherkapazität des externen Chips nicht zu gross wird, kann man das machen. Problematisch wird das erst, wenn die Adressen mehr als 8 Bit (256KB) umfassen. Aber für Mikrokntrollerapplikatioen gibt es auch noch Speicherchips, mit weniger als 256KB.
Ach ja, und bei den AVR-Controllern ist es auch so wie beim 6502 und dessen Ablegern, das I/O Ports und deren Steuerregister in den RAM-Bereich gemappt werden. D.h. wenn Du einen Wert in eine bestimmte Speicheradresse schreibst, dann beschreibst Du damit automatisch ein Steuer- oder Datenregister. Zum Beispiel bewirkt ein Schreibzugriff auf Adresse 0x23 beim ATmega48 eine sofortige Änderung der I/O-Pins von Port B, weil die Pins über das Register gesteuert werden, das sich hinter der Adresse $23 (0x23) verbirgt.
Gerade gefunden: Powerprojekte mit Arduino und C
Das Buch könnte doch noch was für Bernd sein, um die Vorbereitung zur Wetterstation zu erleichtern. Im Zweifelsfall auch erst mal aus der Bibliothek.
Hab auf der unten verlinkten Seite mit der Buchrezi noch ein bischen gestöbert und dabei folgendes zu Tage gefördert: Es gibt bereits Adapter für SD-Karten, die sich am Arduino-Board anschliessen lassen und eine Bibliothek, mit der man auf die Karten zugreifen kann. Eine SD Speicherkarte am Arduino betreiben geht also, wie man hier sieht; da ist auch ein Link zur Arduino-Homepage, wo die Sache noch genauer beschrieben wird. Also sollte der datenloggenden Wetterstation nicht mehr so ganz viel im Wege stehen, denn eine SD-Karte mit 1 MB Speicher zu füllen, dürfte selbst bei 5 Sensoren, die 4 Byte pro Messwert liefern, einige Monate dauern. Stattdessen könnte man dann auch Metadaten zu den Messwerten abspeichern, beispielsweise Datum und Uhrzeit, aber das wäre dann eine Frage der Programmierung.
Also ich sehe das ganz pragmatisch: Beim Color Maximite ist eine SD-Karte dabei, eine echtzeituhr. Beim Arduino ist das alles Extra das man hinzukaufen muss und erst mal in Betrieb nehmen, während es beim Maximite schon Bestandteil der Platine ist und von der Software unterstützt wird. Warum sollte ich also den Umweg beschreiten. Nach meinen derzeitigen Recherchen ist übrigens der billigste Weg derzeit der:
Eine ALDI Wetterstation
ein Rasberry Pi
eine 5 MP Kamera für den Rasberry PI
Dann muss man nur pro Minute ein Bild von der Wetterstation aufnehmen und über OCD die Daten digitalisieren….
Ah ja. Vom Color Maximite hatte ich bisher noch nichts gehört, oder wenn hier schon was darüber stand, dann hab ich’s wieder vergessen. Nun hab ich auch keine Ahnung, was der Arduino samt den Zusatzboards kostet, und wie der Preis im Vergleich zu den anderen Möglichkeiten da steht. Aber das bischen schrauben, das dabei anfällt, wäre für mich erst mal kein Grund, der gegen diese Konfiguration spricht. Aber das ist wahrscheinlich wieder einer der Unterschiede zwischen uns. Ausserdem hatte ich ja auch mehr die Programmierung im Kopf, worum es bei dem Projekt ja gehen soll.
Wenn ich so ein Projekt ernsthaft für mich selbst entwerfen würde, würde ich wohl eine eigene Platine entwickeln, und wenn mir dabei der Speicher des Controllers nicht ausreichen würde, dann käme ein externer Speicherchip wie dieser dazu… 😉
Mein Ansatz ist der dass ich schon in den Sensoren genügend Herausforderungen sehe. Wenn man bei Conrad da mal den Suchbegriff „Tempeatursensor“ eingibt bekommt man 100 Treffer, vom Einbau ml ganz zu schweigen, da sollte die Hardware schon komplett sein. Der Color Maximite hat eine Echtzeituhr, damit kann man jede Messung zeitlich markieren und eine SD-Karte als Datenspeicher. Beim Arduino muss ich das erst dazukaufen, irgendwie noch verbinden und dann höchstwahrscheinlich auch noch Programmieren damit ich es überhaupt nutzen kann. Okay, wenn ich will kann ich alles selbst machen, in Assembler programmieren und noch das Betriebssystem entwickel, doch das ist nicht mein Vorhaben.