Archiv der Kategorie: Benchmark

ESP32Forth – eine alternative Programmierumgebung

Für den ESP32 steht mit MicroPython eine interaktive Programmiersprache zur Verfügung. Das ist aber nicht die einzige Möglichkeit der interaktiven Programmierung, denn mit ESP32Forth steht auch eine Portierung von eForth (Arduino and eForth) für den ESP32 zur Verfügung.

Wenn Ihnen Forth unbekannt sein sollte, dann erlätert ChatGPT Ihnen FORTH wie folgt:

Die Programmiersprache FORTH ist eine ungewöhnliche und spezielle Programmiersprache, die sich von C++ und MicroPython in vielerlei Hinsicht unterscheidet, insbesondere beim Einsatz auf Mikrocontrollern. Hier sind einige der wichtigsten Eigenschaften und Unterschiede:

Eigenschaften von FORTH:

  1. Stack-basierte Sprache: FORTH verwendet einen Stapelspeicher (Stack) als zentrales Konzept. Operationen und Daten werden auf den Stapel verschoben und von dort verarbeitet. Dies macht FORTH sehr leichtgewichtig und effizient.
  2. Interaktivität: FORTH ist eine interaktive Programmiersprache. Sie können Code direkt in die FORTH-Umgebung eingeben und ausführen, was sie ideal für den schnellen Prototypenbau und das Debugging macht.
  3. Minimalistische Syntax: Die Syntax von FORTH ist extrem einfach, bestehend aus Wörtern (FORTH-Befehlen), die von Leerzeichen getrennt sind. Dies führt zu sehr kompaktem Code.
  4. Keine strikte Typisierung: FORTH ist schwach typisiert und flexibel. Dies kann sowohl ein Vor- als auch ein Nachteil sein, je nach Anwendungsfall.
  5. Direkter Hardwarezugriff: FORTH ermöglicht einen sehr direkten Zugriff auf die Hardware, was in eingebetteten Systemen nützlich sein kann.

Unterschiede zu C++:

  1. Sprachparadigma: C++ ist eine objektorientierte Programmiersprache, während FORTH als stapelbasierte Programmiersprache betrachtet wird. Dies bedeutet, dass die Herangehensweise an die Programmierung grundlegend unterschiedlich ist.
  2. Komplexität: C++ ist eine umfangreiche und komplexe Sprache mit einer Vielzahl von Funktionen und Bibliotheken. FORTH hingegen ist extrem minimalistisch und erfordert oft mehr Zeilen Code, um ähnliche Aufgaben zu erledigen.
  3. Typisierung: C++ ist stark typisiert, was bedeutet, dass Datentypen streng überprüft werden. FORTH ist schwach typisiert und erlaubt mehr Flexibilität bei der Verwendung von Daten.

Unterschiede zu MicroPython:

  1. Syntax: MicroPython ist eine Python-Variante für Mikrocontroller und verwendet eine Python-ähnliche Syntax, während FORTH seine eigene einzigartige Syntax hat.
  2. Abstraktionsebene: MicroPython bietet eine höhere Abstraktionsebene und mehr Konventionalität im Vergleich zu FORTH. Das macht MicroPython oft einfacher zu erlernen und zu verwenden.
  3. Gemeinschaft und Bibliotheken: MicroPython hat eine aktive Gemeinschaft und eine breite Palette von Bibliotheken und Modulen, die speziell für Mikrocontroller entwickelt wurden. FORTH hat weniger Ressourcen und Unterstützung in dieser Hinsicht.
  4. Entwicklungsumgebungen: MicroPython wird oft mit modernen integrierten Entwicklungsumgebungen (IDEs) verwendet, die die Entwicklung und das Debugging erleichtern. FORTH erfordert häufig eine tiefere Einarbeitung in die Arbeitsweise des Stapels und der FORTH-Umgebung.

Insgesamt hängt die Wahl zwischen FORTH, C++ und MicroPython für Mikrocontroller-Anwendungen von den spezifischen Anforderungen Ihres Projekts, Ihrer Programmierpräferenz und Ihrer Erfahrung ab. FORTH ist eine leistungsfähige, aber unkonventionelle Option, die für bestimmte Anwendungen geeignet sein kann, während C++ und MicroPython aufgrund ihrer weitverbreiteten Akzeptanz und ihrer Entwicklungsunterstützung oft bevorzugt werden.

OpenAI. (2023). ChatGPT (August 3 Version) [Large language model]. https://chat.openai.com

Wenn Sie sich mit ESP32Forth auseinandersetzen wollen, dann finden Sie die notwendigen Informationen von Installation bis hin zur Anwendung unter https://esp32.forth2020.org/ oder https://www.facebook.com/groups/esp32forth/

Ich möchte Ihnen hier zwei Beispiele zur Arbeit mit ESP32Forth zeigen, die vielleicht helfen Neugier zu wecken.

Benchmarks sind eine beliebte Vergleichsmöglichkeit für Hard- und Software. Um einen Eindruck von der Performance von ESP32Forth auf einem ESP32 zu bekommen, habe ich den DDBench(mark) herangezogen (https://theultimatebenchmark.org/).

Das Resultat des Benchmarks sind eine Laufzeit von 5.5 Sekunden.

Vergleichen Sie das Resultat mit den unter https://theultimatebenchmark.org/ veröffentlichten Daten, dann können Sie sich ein Bild von der Leistungsfähigkeit dieser Hard- und Softwarekombination machen.

Im Blogpost ESP32 ADC & DAC hatte ich die Performance des DAC-ADC-Subsystems des ESP32 untersucht.

Wenige Zeilen ESP32Forth Code ermöglichen die Ansteuerung eines DACs und das Erfassen dessen Ausgangsspannung durch einen Kanal des ADC. GPIO25 und GPIO33 werden hierzu miteinander verbunden.

( Test ESP32-DAC-ADC-Subsystem w/ ESP32Forth )

25 CONSTANT DAC1 \ GPIO25
33 CONSTANT ADC1_CH5 \ GPIO33

: wait100ms 100 ms ;
: readADC1_CH5 ADC1_CH5 adc . ;
: readADC readADC1_CH5 ;
: writeDAC1 DAC1 swap dacWrite ; ( 0-255 -- )
: test dup writeDAC1 wait100ms readADC . cr ; ( 0-255 -- )
: testloop 255 for i test next ;

Die seriellen Ausgaben habe ich geloggt, um diese für die folgenden Grafiken aufzubereiten.

Das Verhalten des analogen Subsystems entspricht den Erwartungen und ist ohne Anpassungen nur bedingt einsatzfähig.

Der einfache Test mit dieser interaktiven Programmierumgebungen wird aber deutlich.


2023-09-14/CK

ESP32-C3 – RV32IMC von Espressif

Ende letzten Jahres kündigte Espressif bereits den ESP32-C3 an – einen kostengünstigen, RISC-V-basierten Mikrocontroller mit Wi-Fi- und Bluetooth 5 (LE)-Konnektivität für sichere IoT-Anwendungen.

Der ESP32-C3 ist eine 32-Bit-Single-Core-MCU auf RISC-V-Basis (RV32IMC) mit 400 KB SRAM, die mit bis zu 160 MHz getaktet werden kann. Neben integriertem 2,4-GHz-WiFi und Bluetooth 5 (LE) mit Long-Range-Unterstützung verfügt der ESP32-C3 über 22 GPIOs mit Unterstützung für ADC, SPI, UART, I2C, I2S, RMT, TWAI und PWM. Das ausführliche ESP32-C3-Datenblatt finden Sie hier.

Nun ist seit November reichlich Zeit vergangen und Module auf Basis des ESP32-C3 sind jetzt bestellbar.

Bei Schukat habe ich ein ESP32-C3-DEVKITM-1 und ein ESP32-C3-DEVKITC02 zu je € 9.65 bestellt. Andere Distributoren hatten wesentlich längere Lieferzeiten.

Beide DevKits unterscheiden sich nur durch das jeweils eingesetzte ESP32-C3-Modul und die resultierende Pinbelegung.

Das im ESP32-C3-DevKitM-1 eingesetzte ESP32-C3-MINI-1 ist ein universelles Wi-Fi- und Bluetooth LE-Kombimodul mit einer PCB-Antenne. Kern des Moduls ist ESP32-C3FN4 mit 4 MB embedded Flash Memory. Da das Flash Memory im ESP32-C3FN4-Chip verpackt ist hat das ESP32-C3-MINI-1 ein kompakteres Gehäuse.

ESP32-C3-DevKitM-1 Pin Mapping

Das im ESP32-C3-DevKitC-02 eingesetzte ESP32-C3-WROOM-02 ist ebenfalls ein universelles Wi-Fi- und Bluetooth LE-Kombimodul mit einer PCB-Antenne. Das Flash Memory ist ein externes 4 MB SPI-Flash.

ESP32-C3-DevKitC-02 Pin Mapping

Sollten Sie noch nicht mit RISC-V konfrontiert worden sein, dann hilft Ihnen vielleicht die in der Zeitschrift Design&Elektronik veröffentlichte Übersicht weiter:

Neustart mit RISC-V Design & Elektronik 1/2020, S. 29-35
https://www.elektroniknet.de/design-elektronik/halbleiter/neustart-mit-risc-v-173910.html

Wenn meiner Bestellung von Schukat eintrifft , werde ich erste Tests und Benchmarks in der mittlerweile ebenfalls vorhandenen Arduino-Umgebung vornehmen und darüber berichten.

In der Zwischenzeit kann ich Ihnen den folgenden Beitrag von Elliot Williams empfehlen: HANDS-ON: THE RISC-V ESP32-C3 WILL BE YOUR NEW ESP8266.

Den dort enthaltenen Benchmark habe ich in meine Benchmark-Übersicht mit aufgenommen.

Aus Sicht des Anwenders möchte ich seinem Schlussgedanken zustimmen:

„Aber es ist schön, RISC-V-Kerne in mehr Geräten zu sehen, nicht zuletzt, weil die standardisierte Befehlssatzarchitektur – die im Wesentlichen einem Standardsatz von maschinensprachlichen Befehlen gleichkommt – das Schreiben von optimierenden Compilern einfacher und schneller macht. Für den Endbenutzer ist das nicht so wichtig, aber wenn es Espressif durch das Einsparen von IP-Lizenzgebühren ermöglicht, ein moderneres Peripherieset zum ESP8266-Preis hinzuzufügen, dann sind wir alle dafür.“

An manchen Stellen wird der ESP32-C3 schon als ESP8266-Killer bezeichnet. Das bleibt abzuwarten, noch muss sich dieser neue Mikrocontroller erst behaupten.

Seeeduino XIAO

Seeeduino XIAO ist das kleinste Arduino-kompatible Board in der Seeeduino-Familie. Basis des XIAO ist ein Microchip-SAMD21 (ARM Cortex-M0+ CPU (SAMD21G18)). Der Controller weist 256 KB Flash Memory und 32 KB RAM auf und wird mit 48 MHz getaktet.

Aus dem Pinout des Seeeduino XIAO ist die Ausstattung des kleinen Boards mit Schnittstellen ersichtlich. Durch den mit 48 MHz getakteten Cortex-M0+ weist das kleine Board eine gute Performance auf. Der Dhrystone Benchmark liefert einen Wert von 41589 Dhrystone/sec und das VAX MIPS Rating beträgt 23.67. Für raumsparende Aufbauten und Wearables ist das Board sehr geeignet, wenn auch die On-Board LEDs und die Stromaufnahme von ca. 350 uA im Sleep Mode weniger optimal sind.

Pinout Seeeduino XIAO
Dhrystone Benchmark Resultate Seeeduino XIAO

Weiterführende Informationen: http://wiki.seeedstudio.com/Seeeduino-XIAO/

Neustart mit RISC-V

Damit sich eine neue Befehlssatzarchitektur für Controller oder Prozessoren durchsetzt, ist viel Aufwand erforderlich. Hardware-Hersteller müssen überzeugt, Entwicklungswerkzeuge müssen angepasst und Entwickler eingearbeitet werden. Entsprechend selten kommt ein neuer Befehlssatz auf den Markt. Aber RISC-V hat die Anfangshürden genommen und ist auf dem Weg zum Erfolg.

Unter dem Titel „Neustart mit RISC-V“ ist eine Beitrag zu RISC-V in der Zeitschrift Design & Elektronik Heft 1/2020 angekündigt.

Um die Performance des Maixduino, einem Arduino-kompatiblen Kendryte K210 Dual-Core 64-bit RISC-V Prozessor (RV64IMAFDC), gegenüber anderen Arduinos resp. Arduino-kompatiblen Mikrocontrollern zu vergleichen, habe ich zwei Benchmarks laufen lassen:

  • Sieve of Eratosthenes
  • CoreMark

Den ersten Benchmark habe ich zu Vergleichszwecken verwendet, da ich in der Vergangenheit damit bereits zahlreiche Tests vorgenommen habe.

Erweiterung der Arduino-Familie: ESP32 – wie gut ist es?
https://www.elektroniknet.de/design-elektronik/embedded/erweiterung-der-arduino-familie-esp32-wie-gut-ist-es-160294.html

Arduino32: Die jungen Wilden.
http://www.elektroniknet.de/embedded/arduino32-die-jungen-wilden-131502.html

CoreMark 1.0 hingegen ist ein vom EEMBC empfohlener Test und zudem an die Arduino-Umgebung angepasst (https://www.eembc.org/coremark/). Beide Benchmarks stehen unter https://github.com/ckuehnel/newArduino/tree/master/Maixduino zum Download zur Verfügung.

Die Resultate der beiden Benchmarks zeigen die folgenden Abbildungen. Verglichen wurden ein Arduino Due (AT91SAM3X8E@84 MHz), ein ESPduino-32 (ESP-Wroom-32@80 MHz) und ein Maixduino (Kendryte K210 RISC-V@400 MHz).

Teensy 4.0 – NXP’s i.MX RT1062 für alle

Teensy 4.0

Mit dem Teensy 4.0 steht ein kompaktes, aber dennoch handliches Boards mit NXP’s i.MX RT1062 (Arm Cortex-M7), einem sogenannten Crossover Processor (Kombination aus Mikrocontroller & Application Processor) , zur Evaluation bereit.

Die Ausstattungsliste im Datenblatt liest sich wie der Wunschzettel eines Embedded Entwicklers in der Vor-Weihnachtszeit. Ein Blick ins Datenblatt (https://www.nxp.com/part/MIMXRT1062CVL5A ) zeigt das.

Paul Stoffregen hat dafür gesorgt, dass der Teensy 4.0 auch als Arduino-kompatibler Mikrocontroller gehandhabt werden kann ( https://www.pjrc.com/teensy-4-0/ ) und somit der derzeit wohl leistungsfähigste Arduino zu einem sehr moderaten Preis von USD 19.95 zur Verfügung steht.

Den ersten Eindruck möchte ich mit den erweiterten Benchmarks aus meinem letzten Post https://ckblog2016.net/2019/08/19/maixduino/ beschließen.

Verglichen wurden eine Arduino Due (AT91SAM3X8E@ 84 MHz), eine ESPduino-32 (ESP-Wroom-32@80 MHz), ein Maixduino (Kendryte K210 RISC-V@400 MHz) und ein Teensy 4.0 ( i.MX RT1062@600 MHz). Hier sind die Resultate der beiden Benchmarks:

Benchmarkergebnisse Sieve of Erastothenes
Benchmarkergebnisse Coremark 1.0

Wie die beiden Benchmarks deutlich zeigen, hat Teensy 4.0 mit seinem mit 600 MHz getakteten i.MX RT1062 die Performance des Maixduino wesentlich überboten und kann als derzeit leistungsfähigster Arduino-kompatibler Mikrocontroller (oder eben als Crossover Processor) angesehen werden.

Maixduino – Arduino-kompatibel auf Basis RISC-V

Das ganze $23.90 kostende Sipeed Maixduino Kit for RISC-V AI + IoT ist seit geraume Zeit im Haus und hat auf die Inbetriebnahme gewartet. Ziel für mich war, das Board in der Arduino-Umgebung in Betrieb zu nehmen, um einen direkten Vergleich zu anderen Arduinos zu bekommen.

Zum Lieferumfang des Maixduino Kits gehören die folgenden Komponenten:

  • Maixduino Board (rechts)
  • 2.4 inch TFT Display (Mitte)
  • OV2640 camera module (links)
Komponenten des Maixduino Kits

Die Frontseite des Maixduino Boards zeigt an Hand der Buchsenleisten Kompatibilität zum Arduino-Formfaktor und die Rückseite zeigt in einem Blockdiagramm die zur Verfügung stehenden Ressourcen.

Neben der eigentlichen Inbetriebnahme in der Arduino IDE hat mich vor allem die zu erwartende Performance interessiert.

Um das Maixduino Board der Arduino IDE bekannt zu machen ist der folgende Eintrag in den Preferences vorzunehmen.

File -> Preferences: Eintrag der URL http://dl.sipeed.com/MAIX/Maixduino/package_Maixduino_k210_index.json unter Additional Boards Manager URLs. Einträge durch Komma separieren.

Im Boards Manager dann Maixduino (K210) selektieren und die folgenden Board Settings einstellen:

  • Board: Maixduino
  • Burn Tool Firmware: open-ec
  • Burn Baudrate: 1.5 M
  • Port: Serial port
  • Programmer: k-flash

Die Programmer Software k-flash wird vom Norton SONAR entfernt. Norton muss hier entsprechend eingerichtet resp. „entschärft“ werden. Die komplette Installation ist unter https://maixduino.sipeed.com/en/get_started/install.html beschrieben.

Um die Performance des Maixduino gegenüber anderen Arduinos resp. Arduino-kompatiblen Mikrocontrollern zu vergleichen, habe ich zwei Benchmarks laufen lassen:

  • Sieve of Eratosthenes
  • CoreMark

Den ersten Benchmark habe ich zu Vergleichszwecken verwendet, da ich in der Vergangenheit damit bereits zahlreiche Tests vorgenommen habe:

CoreMark 1.0 ist ein vom EEMBC empfohlener Test und zudem an die Arduino-Umgebung angepasst ( https://www.eembc.org/coremark/ ). Beide Benchmarks stehen unter https://github.com/ckuehnel/newArduino/tree/master/Maixduino zum Download zur Verfügung.

Hier nun die Resultate der beiden Benchmarks. Verglichen wurden eine Arduino Due (AT91SAM3X8E@ 84 MHz), eine ESPduino-32 (ESP-Wroom-32@80 MHz) und ein Maixduino (Kendryte K210 RISC-V@400 MHz):

Benchmarkergebnisse Sieve of Erastothenes
Benchmarkergebnisse Coremark 1.0

Gegenüber dem Arduino Due hatte der ESP-32 bereits eine deutliche Verbesserung der Performance gezeigt, die aber vom Maixduino noch wesentlich überboten wird. Damit dürfte der Maixduino derzeit der leistungsfähigste Arduino-kompatible Mikrocontroller sein.

HiFive1 Rev. B

Vor wenigen Tagen war nun das über Mouser bestellte und von CrowdSupply gelieferte HiFive1 Rev. B Board im Postkasten.

HiFive1 Rev. B

Das HiFive1 Rev, B Board weist die folgenden Features auf:

  • MCU – SiFive Freedom E310-G0002 32-Bit RV32IMAC processor @ bis zu 320+ MHz (1.61 DMIPS/MHz)
  • Storage – 32 MBit SPI Flash
  • Connectivity – ESP32-SOLO-1 WiFi & Bluetooth module
  • I/Os (19 x Digital I/O Pins, 19 x external Interrupt Pins, 1 x external Wakeup Pin, 9 x PWM Pins, 1/3 SPI Controllers/HW CS Pins)
  • I/O Voltages –  3.3 V
  • USB – 1 x micro USB Port für Power, Programming und Debugging (via Segger J-Link)
  • Power Supply – 5 V via USB oder 7 – 12V via DC Jack; Operating Voltage: 3.3 V und 1.8 V
  • Dimensions – 68 mm x 51 mm
  • Gewicht– 22 g

Zur Programmierung kann das Freedom-E SDK herangezogen werden, was allerdings einen Linux-Rechner erfordert. ‌Alle Informationen hierzu sind unter https://github.com/sifive/freedom-e-sdk​ zu finden.

Die beim HiFive1 vorhanden Unterstützung der Arduino IDE wurde nicht weitergeführt.

Das Eclipse-basierte, wesentlich komplexere Freedom Studio läuft auch auf Windows.

Eine erste Idee von der Performance des HiFive1 Rev. B bekommt man über den Dhrystone Benchmark.

Resultat Dhrystone Benchmark (Out of the Box) (Das Ergebnis ist noch falsch – Bild wird ersetzt)

Mit diesem Ergebnis liegt der HiFive1 Rev. B in der Nähe von Cortex-M3/M4/A5.

MCUDIPS/MHz
HiFive1 Rev. B1.6
Cortex-M31.24
Cortex-M41.25
Cortex-A51.6

Quelle: https://brtchip.com/wp-content/uploads/Support/Documentation/Application_Notes/ICs/MCU/AN_304-FT900-Microcontroller-Benchmark.pdf

Arduino MKR1000

Mit dem Arduino MKR1000 steht ein WLAN-fähiger Arduino für IoT-Projekte zur Verfügung. Das Board basiert auf einem ATSAMW25 von Microchip/Atmel mit einem ARM-Cortex-M0+-Prozessor (Atmel SAMD21) und einem WLAN-Modul, welches nach IEEE 802.11 b/g/n im 2,4 GHz-Netz arbeitet.

Der Atmel SAMD21 ist mit 48 MHz getaktet und verfügt über 256 KB Flash und 32 KB RAM.  Damit entspricht die Performance einem Arduino M0, wie mit den im Beitrag „Arduino32 – Die jungen Wilden“ verwendeten Benchmarks gezeigt werden kann.

Arduino32: Die jungen Wilden
DESIGN&ELEKTRONIK 5/2016 (Teil 1), 6/2016 (Teil 2)
Teil 1 http://www.elektroniknet.de/embedded/entwicklungstools/artikel/130493
Teil 2 http://www.elektroniknet.de/embedded/entwicklungstools/artikel/131502/

Die betreffenden Benchmarks sind unter Sieve und IOLoop zu finden.

Sieve of Eratosthenes - Arduino MKR1000
5000 iterations
303 primes.
Runtime = 5209 ms
I/O Loop - Arduino MKR1000
Measure IO frequency on Pin 2
Runtime = 5 us

Der Arduino MKR1000 kann über einen LiPo-Akku oder eine externe 5V-Spannungsquelle betrieben werden. Beim Anschluss einer externen Spannungsquelle ist das Laden des Akkus möglich. Der LiPo-Akku sollte mindestens 700 mAh besitzen, so dass auch mobile Projekte über längeren Zeitraum ohne externe Spannungsquelle betrieben werden können

Raspberry Pi 3 Model B vs. 3 B+

Hier ist ein interessanter Vergleich zwischen Raspberry Pi 3 Model B und Raspberry Pi 3 Model B +.

Fazit des Autors Andrew Back:
Leistungssteigerungen sind immer willkommen. Während es immer jemanden gibt, der auf der Suche nach zusätzlicher Rechenleistung oder grösserem Netzwerkdurchsatz ist, ist Power-over-Ethernet mit ziemlicher Sicherheit das heißeste Feature des Raspberry Pi 3 Model B +. Der Vorteil, ein Gerät mit Netzwerk und Stromversorgung über ein einziges Kabel betreiben zu können – und zwar ohne eine Unordnung von Netzteilen und Stromkabeln – ist nicht zu unterschätzen.

Hochintegrierter WiFi-Chip

ist der Titel eines in Design & Elektronik 3/2018 erschienenen Beitrag zu Ledunia, einem ESP8266 High-End-Modul.

Die intelligente Analyse bestehender ESP8266 Module hat einen Ansatz geliefert, den verbreiteten ESP8266 Modulen eine Ergänzung beizustellen, die bestehende Beschränkungen aufhebt und neue Merkmale hinzufügt. Dieser Ansatz hat die Teilnehmer der Kickstarter-Kampagne überzeugt und diese zu einem erfolgreichen Abschluss geführt.

Wichtig für den Einsatz einer solchen Baugruppe sind neben der starken Arduino Community auch direkte Ansprechpartner, die bei einem in Deutschland entwickelten Produkt vorhanden sind.

Die vorliegenden Zertifizierungen (CE, FCC) für Ledunia bieten darüber hinaus Sicherheit beim Einsatz der Baugruppen.