hardware:mikrokontroller_mcu
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
| hardware:mikrokontroller_mcu [2023-05-17 09:37:55] – [RISC-V] manfred | hardware:mikrokontroller_mcu [2024-10-13 18:46:22] (aktuell) – [Motorola] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Mikrokontroller (MCU) ====== | ||
| + | |||
| + | Ursprünglich hatte man MCUs in [[https:// | ||
| + | Neuere MCUs werden üblicherweise mit [[https:// | ||
| + | |||
| + | |||
| + | ===== TinyGo on an MCU ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * unter anderem die folgenden: | ||
| + | * several tiny ARM development board based on the ST Micro [[https:// | ||
| + | * several tiny development boards based on the Raspberry Pi [[https:// | ||
| + | * 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 | ||
| + | * **[[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * Videos: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ===== Raspberry Pi Pico / Arduino Pico ===== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Raspberry Pi Pico W ist ein Mikrocontroller-Board, | ||
| + | Der Raspberry Pi Pico W wurde als kostengünstige und dennoch flexible Entwicklungsplattform für den RP2040 mit einer drahtlosen 2, | ||
| + | * RP2040-Mikrocontroller mit 2 MB Flash-Speicher | ||
| + | * Integrierte drahtlose 2, | ||
| + | * Micro-USB-B-Anschluss für Strom und Daten (und zum Umprogrammieren des Flash) | ||
| + | * 40-polige 21mmx51mm ' | ||
| + | * 26 multifunktionale 3, | ||
| + | * 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/ | ||
| + | * 1,8-3,3 V E/ | ||
| + | * 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/ | ||
| + | * Kann Schnittstellen wie SD-Karte und VGA emulieren | ||
| + | |||
| + | Weitere Informationen zum Raspberry Pi Pico und zum Start finden Sie unter [[https:// | ||
| + | |||
| + | |||
| + | ===== Atmel / Arduino ===== | ||
| + | |||
| + | Die Controller aus dem Hause Atmel sind wegen ihres einfachen Aufbaus, ihrer leichten Programmierbarkeit, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | Im Gegensatz zu den [[https:// | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | 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: „[[https:// | ||
| + | |||
| + | Die Marke [[https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Konzeptionell werden alle Boards über eine serielle Schnittstelle programmiert, | ||
| + | |||
| + | Arduino bringt eine eigene integrierte Entwicklungsumgebung (IDE) mit, die auf Wiring IDE basiert. Dabei handelt es sich um eine Java-Anwendung, | ||
| + | |||
| + | |||
| + | ==== 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, | ||
| + | |||
| + | __Das Arduino-Board " | ||
| + | |||
| + | |||
| + | === 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: " | ||
| + | - 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, | ||
| + | |||
| + | * Docs: [[https:// | ||
| + | * Firmware mit Python Interpreter: | ||
| + | * VS Code Extension: [[https:// | ||
| + | |||
| + | <code python 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() | ||
| + | |||
| + | </ | ||
| + | |||
| + | <code python helloWorld.py> | ||
| + | def hello_world(): | ||
| + | print(" | ||
| + | print(f" | ||
| + | |||
| + | </ | ||
| + | |||
| + | <code python 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) | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ===== RISC-V ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * **[[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * BL808 von [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ===== Motorola ===== | ||
| + | |||
| + | [[:: | ||
| + | |||
