Die Arduino-Hardware :o)

Arduinos sind fertig bestückte Leiterplatten mit USB-Schnittstelle, 8-Bit-Microcontroller (AVR) und der notwendigen Minimalbeschaltung um sofort mit dem Programmieren loslegen zu können. Größere Typen haben manchmal sogar Bluetooth oder W-Lan on board. Eine großartige Lösung um auch mit wenig Elektronikerfahrung und für oft nichtmal 2€ Kosten eigene Projekte zu realisieren!

Wozu ich ín diesem Tutorial verleiten will ist sich etwas näher mit dem Controller zu beschäftigen um die Nachteile und Beschränkungen der zugehörigen Arduino-Programmierumgebung zu umgehen. Ein weiterer Vorteil: wenn Sie gelernt haben den Controller direkt zu programmieren, können sie jeden beliebigen AVR auch als losen Chip, ohne Arduino-Platine programmieren und verwenden, benötigen den Arduino-Bootloader nicht mehr und verschaffen sich Zugang zu neuen, sehr schnellen Hardwarefunktionen.

8-Bit-Controller heißt, er verarbeitet Ein-/Ausgaben an 8 zu einem "Port" zusammengefassten Pins gleichzeitig und löst ganzzahlige Rechenoperationen bis 255 oft in nur einem einzigen Prozessortakt. Welche anderen Hardwarefunktionen an den Pins zusätzlich zur Verfügung stehen und was diese können schlägt man direkt im Datenblatt des Controllers nach, der auf der Arduino-Platine verwendet wird.

Am Beispiel des Arduino-Nano ist das der AVR "ATmega328" (Datenblatt)

Wichtiger als die Pinbelegung des ICs ist aber welcher dieser Pins mit welchem nach außen geführten Anschluß des Arduino verbunden ist:

 

ATmega328p PinoutArduino-Nano: ATmega328 pinout

Man sieht, daß die Anschlüsse A0 bis A7 größtenteils dem Port C (PC0 - PC5) des Controllers entspechen, PC6 ist mit Reset fest verbunden und damit praktisch nicht mehr anders nutzbar. Die Pins PD0 und PD1 sind im Controller als Zweitfunktion mit den Kommunikationssignalen RXD und TXT belegt. Am "losen" Controller könnte man diese verwenden, beim Arduino ist hier aber schon der boardeigene USB-Wandler angeschlossen, der für die Programmierung erforderlich ist (solange man kein Programmiergerät besitzt).

 

Die Arduino-Software  ;o(

Wohl um die Eingewöhnung für Laien zu vereinfachen ignoriert die Arduinosoftware die beschränkten Resourcen und die 8-Bit-Natur des Controllers und tut so als hätte man es mit einem PC zu tun. Durchnummerierte Anschlüsse befinden sich z.B. auf verschiedenen Ports ( D7/ D8  -> PD7 / PB0) und müßen im Hintergrund in mehreren Rechenschritten verarbeitet werden, Standardvariablen nutzen pauschal mehr als 8 Bit und das Kommazahlen eigentlich gar nichts in µControllern zu suchen haben ist auch keine Erwähnung wert. Das die eine serielle Schnittstelle (UART) rein garnichts mit Software-emulierten Notlösungen gemein hat, scheint auch nicht wesentlich zu sein, wenn die Art (soft/hard) nur ein Parameter ist. Der Controller besitzt außerdem einen umfangreich konfigurierbaren 16Bit-Timer, der sehr genaue Takte, Zeitbasen oder präzise Analogwerte per PWM generieren kann und außerdem als extrem schneller Zähler oder vollautomatsierter Hardware-Teiler für Eingangstakte verwendbar wäre, wenn die Arduino-IDE ihn nicht selbst für den Basistakt ver(sch)wenden würde. Die Verwendung der interruptgesteuerten Eingänge, die sofortige, priorisierte Reaktionen auf Signale ohne Pin-Abfrage ermöglichen könnten den Basistakt beeinflussen und wird vermieden.

Kurz: Um den Anwender nicht mit technischen Details zu nerven benutzt Arduino µController mit viel Speicher und macht sinnlose Resourcen- und Geschwindigkeitsverschwendung zum Standard. Schnelle Hardwarefunktionen mit höherer Priorität werden zugunsten der eigenen Zeitbasis ígnoriert.

Um zu zeigen, daß es genau so einfach und laienfreundlich, aber ganz ohne irgendwelche Beschränkungen geht verwende ich hier in allen Beispielen BASCOM, das schnelle Erfolge ermöglicht und dabei noch das Verständnis für die Funktionalität des Controllers fördert.