Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Mikrokontroller (MCU)
Ursprünglich hatte man MCUs in Assembler programmieren müssen, dann gab es GUIs, mit denen man MCUs in C programmieren konnte. Neuere MCUs werden üblicherweise mit Micropython oder auch in TinyGo programmiert.
TinyGo on an MCU
-
-
- unter anderem die folgenden:
- several tiny ARM development board based on the ST Micro STM32F405 family of microcontrollers
- several tiny development boards based on the Raspberry Pi RP2040 microcontroller, for example "Raspberry Pi Pico"
- sam Arduino boards: Mega, Nano, Uno, Zero, …
- several tiny development boards based on ESP32 family of microcontrollers
- several tiny development boards based on ESP8266 family of microcontrollers
-
- Videos:
Raspberry Pi Pico / Arduino Pico
Raspberry Pi Pico W, RP2040 + WLAN Mikrocontroller-Board - 2023-03-02: 7,20 €
Raspberry Pi Pico W ist ein Mikrocontroller-Board, das auf dem Raspberry Pi RP2040 Mikrocontroller-Chip basiert. Der Raspberry Pi Pico W wurde als kostengünstige und dennoch flexible Entwicklungsplattform für den RP2040 mit einer drahtlosen 2,4-GHz-Schnittstelle und den folgenden Hauptmerkmalen entwickelt:
- RP2040-Mikrocontroller mit 2 MB Flash-Speicher
- Integrierte drahtlose 2,4-GHz-Single-Band-Schnittstelle (802.11n)
- Micro-USB-B-Anschluss für Strom und Daten (und zum Umprogrammieren des Flash)
- 40-polige 21mmx51mm 'DIP'-Leiterplatte, 1mm dick, mit 0,1"-Durchgangslöchern, auch mit Randverzierungen
- 26 multifunktionale 3,3-V-Allzweck-Eingänge und -Ausgänge (GPIO)
- 23 GPIO sind rein digital, wobei drei auch ADC-fähig sind
- Kann als Modul oberflächenmontiert werden
- 3-poliger ARM Serial Wire Debug Port (SWD)
- Einfache, aber hochflexible Stromversorgungsarchitektur
- Verschiedene Optionen zur einfachen Stromversorgung über Micro-USB, externe Netzteile oder Batterien - Hohe Qualität, niedrige Kosten, hohe Verfügbarkeit
- Umfassendes SDK, Softwarebeispiele und Dokumentation
Ausführliche Informationen über den RP2040-Mikrocontroller finden Sie im RP2040-Datenblatt. Die wichtigsten Merkmale sind:
- Dual-Core Cortex M0+ mit bis zu 133MHz
- On-Chip-PLL ermöglicht variable Kernfrequenz
- 264kByte Multi-Bank-Hochleistungs-SRAM
- Externer Quad-SPI-Flash mit eXecute In Place (XIP) und 16kByte On-Chip-Cache
- Leistungsstarke Voll-Crossbar-Busstruktur
- On-Board USB1.1 (Gerät oder Host)
- 30 Multifunktions-E/A (vier können für ADC verwendet werden)
- 1,8-3,3 V E/A-Spannung
- 12-Bit 500ksps Analog-Digital-Wandler (ADC)
- Verschiedene digitale Peripheriegeräte
- 2 x UART, 2 × I2C, 2 × SPI, 16 x PWM-Kanäle
- 1 x Timer mit 4 Alarmen, 1 x Echtzeituhr
- 2 x programmierbare E/A-Blöcke (PIO), insgesamt 8 Zustandsautomaten
- Flexible, benutzerprogrammierbare Hochgeschwindigkeits-E/A
- Kann Schnittstellen wie SD-Karte und VGA emulieren
Weitere Informationen zum Raspberry Pi Pico und zum Start finden Sie unter https://www.raspberrypi.org/documentation/pico/getting-started/.
Atmel / Arduino
Die Controller aus dem Hause Atmel sind wegen ihres einfachen Aufbaus, ihrer leichten Programmierbarkeit, den kostenlosen Entwicklungswerkzeugen und der Verfügbarkeit in DIP-Gehäuseformen auch bei Hobby-Anwendern weit verbreitet.
Fast alle Typen können per SPI über einen ISP (AVR ISP, In-System Programmer) programmiert werden, der über simple Programmieradapter Anschluss an die serielle, parallele oder USB-Schnittstelle eines PCs findet. Die Besonderheit liegt in der Möglichkeit, den Prozessor nicht aus der Zielschaltung herausnehmen zu müssen. Stattdessen kann man ihn im eingebauten Zustand reprogrammieren.
Ein Vorteil gegenüber anderen Mikroprozessor-Familien ist, dass sich dank der RISC-Architektur die meisten Register-Befehle innerhalb eines Systemtakts abarbeiten lassen, ausgenommen Sprung- und Multiplikationsbefehle sowie Zugriffe auf das Speicherinterface (u. a. RAM und I/O-Ports). Somit ist diese Architektur sehr schnell im Vergleich zu anderen.
Durch das auf Hochsprachen wie C ausgelegte Hardware-Design können auch Compiler sehr effizienten Code erzeugen; der Entwickler braucht sich nicht zwingend auf Assembler-Ebene zu begeben. Das Design des ATMEGA8 wurde bereits in der Entwicklung des Chips für C-Compiler optimiert.
Allerdings wird der binäre Programmcode, wie bei vielen anderen Mikroprozessoren mit integriertem Programmspeicher auch, direkt aus dem Flash-Speicher heraus ausgeführt. Dadurch kommt es vor allem bei den Chipversionen für geringe Versorgungsspannungen von unter 3,3 V zu vergleichsweise geringen maximalen Taktraten des Prozessorkerns von meist unter 10 MHz. Da die Frequenz fast 1:1 den IPS entspricht, können so maximal 10 MIPS erreicht werden. Es besteht keine Möglichkeit, den internen Prozessorkern mithilfe einer PLL mit einer gegenüber dem externen Takt erhöhten Taktrate zu betreiben. Diese Einschränkung ist durch die Integration der Flash-Speichertechnik bedingt. Zum Vergleich: Mikroprozessorarchitekturen wie der Blackfin (digitalen Signalprozessoren), welche den Programmcode vor der Ausführung von dem nichtflüchtigen Flash-Speicher erst in einen internen SRAM-Speicher kopieren, verfügen über Taktraten des Prozessorkerns von über 500 MHz bei Versorgungsspannungen des CPU-Kerns von unter 2 V bei in etwa gleich geringem Stromverbrauch.
Im Gegensatz zu den PICmicro-Prozessoren wurde der AVR-Befehlssatz über alle Modelle – abgesehen vom AT90S1200 mit eingeschränktem Befehlssatz und vom ATmega mit leicht erweitertem Befehlssatz – kompatibel gehalten.
- Atmel (Microchip) Studio 7 – ein Einstieg - 05. Juli 2019
Bei einer Veranstaltung des US-amerikanischen Magazins Make im kalifornischen San Mateo am 16. Mai 2015 stellte Massimo Banzi einen neuen Markennamen für das Arduino-Projekt vor: „Genuino“. Dieser neue Markenname soll dort genutzt werden, wo die Markenrechte der eigentlichen Marke Arduino ungeklärt sind.
Die Marke Genuino soll nun für jene Microcontroller-Boards verwendet werden, die außerhalb der Vereinigten Staaten verkauft werden. Außer der neuen Marke sollen die verkauften Boards sich nicht von den ehemaligen Arduino-Boards unterscheiden. Anscheinend ist die Rechtslage um die Markenrechte von Arduino nur in den Vereinigten Staaten eindeutig.
Konzeptionell werden alle Boards über eine serielle Schnittstelle programmiert, wenn Reset aktiviert ist. Der Mikrocontroller ist mit einem Bootloader vorbereitet, wodurch die Programmierung direkt über die serielle Schnittstelle ohne externes Programmiergerät erfolgen kann. Bei älteren Boards wurde dafür die RS-232-Schnittstelle genutzt, und bei späteren Versionen geschieht die Umsetzung von USB nach seriell über einen eigens entwickelten USB-Seriell-Konverter, basierend auf dem ATmega8u2. Zuvor wurde das mit dem populären Baustein FT232RL von FTDI realisiert. Die Version Arduino Leonardo verwendet als Prozessor den ATmega32u4, der die USB-Unterstützung nativ bereitstellt und sich damit auch als Tastatur oder Maus gegenüber einem PC ausgeben kann.
Arduino bringt eine eigene integrierte Entwicklungsumgebung (IDE) mit, die auf Wiring IDE basiert. Dabei handelt es sich um eine Java-Anwendung, die für die gängigen Betriebssysteme Windows, Linux und macOS kostenlos verfügbar ist. Sie basiert auf der IDE von Processing, einer auf die Einsatzbereiche Grafik, Simulation und Animation spezialisierten Entwicklungsumgebung. Die Arduino-IDE bringt einen Code-Editor mit und bindet gcc als Compiler ein. Zusätzlich werden die avr-gcc-Library und weitere Arduino-Bibliotheken („libraries“) eingebunden, die die Programmierung in C und C++ stark vereinfachen.
Atmel
Die modernen Typen sind die Tiny (=winzig) und die Mega (=riesig). Die ATtiny haben kleinere Gehäuse als die ATmega, mit weniger Pins. Dies führt bei ähnlicher Funktionalität wie die Megas zu Mehrfachbelegungen der Pins. Die Tiny sind eher für kleine Aufgaben geeignet, wo die Einsparung über den Preis und den geringeren Aufwand beim Datenblattstudium kommt. Anfänger und Bastler sind mit den ATmega besser bedient, da es weniger Limitierungen gibt. Für ATmega gibt es zahlreiche Entwicklungsboards und Lernsysteme, wie die Arduino-Familie.
Das Arduino-Board "Arduino Due" besitzt einen "Arm Cortex-M3" 32-Bit-Prozessor vom Typ "Atmel SAM3X8E".
Nomenklatur - ATmega
Auch wenn die Namensgebung auf den ersten Blick bedingt durch die vielen verfügbaren Modelle kompliziert aussieht, so folgt sie doch immer (von wenigen Ausnahmen abgesehen) einem einfachen Schema.
- Nehmen wir einen aktuellen Baustein als Beispiel: *ATmega48PA-AU*. Der Name besteht aus 5 Teilen:
- Der Baureihe (hier: "ATmega")
- Einer Nummer, immer eine Zweierpotenz (hier: 4). Diese Zahl gibt die Größe des Flashspeichers in Kibibyte an.
- Bis zu zwei weiteren Ziffern (hier: 8). Sie definieren die Zusatzfunktionen sowie Zahl der I/O-Ports.
- Bis zu zwei Buchstaben (hier: PA), die für die Revision sowie spezielle stromsparende Architekturen stehen.
- Einem Bindestrich und zwei weiteren Buchstaben, die die Bauform angeben (hier: AU).
Python + ESP32
Über Erweiterungen können auch etliche andere Mikrocontroller, etwa der ESP8266, ESP32, STM32 oder MSP430 über die Arduino-IDE programmiert werden.
- Firmware mit Python Interpreter: https://micropython.org/download/esp32/
- main.py
from helloWorld import hello_world from led import set_pin, led, blinker def main(): hello_world() set_pin(15) led(True) blinker() if __name__ == '__main__': main()
- helloWorld.py
def hello_world(): print("Hello World!") print(f"6 * 7 = {6 * 7}")
- led.py
import time from machine import Pin global __PIN__ def set_pin(pin): global __PIN__ __PIN__ = Pin(pin, Pin.OUT) def led(on): pin = __PIN__ if on: pin.on() else: pin.off() def blinker(): pin = __PIN__ while True: pin.on() time.sleep(1) pin.off() time.sleep(1)
