Migration auf Python 3

Da das 2008 veröffentlichte Python 3 nicht abwärtskompatibel zu Python 2 ist, wurde in der Regel bestehender Code in Python 2 weiterentwickelt und neuer Code direkt in Python 3 geschrieben.

Diese Parallel-Existenz nimmt am 1.1.2020 ein abruptes Ende: Der Support von Python 2 wird eingestellt. Die Migration der Codebasis von Python 2 nach Python 3 ist daher unvermeidlich, bedeutet aber einige signifikante Änderungen. Einige der Wichtigsten im Überblick im Beitrag der Elektronikpraxis.

MicroPython auf RISC-V (Kendryte K210)

SiPEED MAiX BiT ist ein low-cost Development Board mit den folgenden Spezifikationen:

  • SoC – Kendryte K210 dual core 64-bit RISC-V processor @ 400 MHz (overclockable up to 800 MHz) with
    • KPU CNN hardware accelerator
    • APU audio hardware accelerator with support for up to 8 mics, up to 192 KHz sample rate
    • FPIOA (Field Programmable IO Array) mapping 255 functions to all 48 GPIOs on the chip.
    • 8 MB general purpose SRAM including 5.9MB usable as AI SRAM memory
    • AXI ROM to load user program from SPI flash
  • Storage – micro SD card slot, 8MB SPI flash
  • Display I/F – MCU LCD FPC connector for optional 2.4″ display
  • Camera I/F – DVP camera FPC connector
  • USB – 1x USB type-C port for power and programming
  • Expansion – Breadboard friendly headers with UART, IIC, SPI, I2S, PWM, etc…
  • Misc – 2x buttons, RGB LED
  • Power Supply – Via USB type-C port
  • Performance + Power Consumption – 0.25TOPS @ 0.3W ,400MHz. 0.5 TOPS @ 800 MHz
  • Dimensions – 5.08 x 2.54 mm

Bei Seeedstudio ist das SiPEED MAiX BiT Board für USD 12.90 erhältlich. Eine Variante mit OV2640 Kamera und LCD kostet ganze USD 20.90.

MAiX wird durch ein Standalone-SDK, auf der Basis von FreeRTOS und C/C++, unterstützt.

Ein MicroPython Port ist ebenfalls verfügbar.

Ich habe hier MicroPython auf dem kompakten MAiX BiT Board installiert und ausprobiert. Die Benchmarkergebnisse habe ich im MicroPython Forum unter Benchmark comparison of MicroPython boards nach getragen.

MAiX BiT Back
MAiX Bit Front

Die Resultate des Pystome_lowmem Benchmarks nach einen Reset zeigt das folgende Bild.

Benchmark Pystone_lowmem

Die Daten aus dem o.a. Benchmarkvergleich sind in der folgenden Grafik zusammengefasst.

WiPy und Lopy Boards weisen einen ESP32-Mikrocontroller auf. Die Teensy Boards sind mit Kinetis K20 bis K66 (Cortex-M4) ausgestattet. Das Original-Pyboard (v1.1) hat einen STM32F405RGT6 (Cortex-M4F). Beim MAiX BiT ist der Kern ein RISC-V Kendryte K210.

Benchmarkvergleich Pystone_lowmem

PyBoard ADC & DAC

Nachdem ich in einem Post das ESP32 AD-DA-Sbsystem analysiert hatte, wollte ich das PyBoard diesbezüglich untersuchen.

Der im PyBoard v1.1 eingesetzte STM32F405RGT6 besitzt drei 12-bit ADCs. 16 analoge Eingänge stehen am PyBoard v1.1 an den Header-Leisten zur Verfügung.

Außerdem stehen zwei 12-bit DACs zur Verfügung, die hier aber vorerst nur als 8-bit-DAC eingesetzt werden.

Anschlussbild PYBv1.1

Für einen ersten Test des DAC-ADC-Subsystems ist es am einfachsten, den DAC an Pin X5 mit dem ADC-Eingang an Pin X19 zu verbinden.

Verbindung DAC(X5) – ADC(X19)

Das MicroPython Testprogramm weist keine Besonderheiten auf und zeigt vor allem, wie DAC und ADC angesprochen werden können.  Auf Github steht es zum Download zur Verfügung.

# PYB_adda_test.pyb 
# PyBoard Test of DAC & ADC
# (c) Claus Kuehnel 2019-02-17 info@ckuehnel.ch
# PyBoard v1.1 has two DAC channels, connected to X5 and X6
# There are 16 ADC channels. The ADC channel connected to X19 is used here.
# Connect X5 & X19 for this test.

import time
from pyb import Pin,DAC, ADC

dac = DAC(Pin('X5'))
adc = ADC(Pin('X19'))

print('\nTesting ADDA subsystem of PyBoard\n')
print('DAC\t ADC\t Diff')
print('-----------------------')

for i in range(256):
dac.write(i)
time.sleep_ms(100)
adcvalue = adc.read()
time.sleep_ms(50)
diff = 16 * i
diff = adcvalue - diff
print('{0:3d}\t{1:4d}\t{2:4d}'.format(i, adcvalue, diff))

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

PYBv1.1 DAC-ADC-Characteristics

PYBv1.1 DAC-ADC-Accuracy

Aus der dargestellten DAC-ADC-Charakteristik kann man deutlich erkennen, dass sich das analoge Subsystem erwartungsgemäss verhält. Fehler, wie beim ESP32 sind hier nicht zu erkennen.

Erst im zweiten Plot kann man Abweichungen von maximal +9 und -7 LSB erkennen. Ausserdem ist ein Gain-Error von 5 LSB zu erkennen.

Bei der Bewertung dieser Eigenschaften muss man sich davon vergewissern, dass 1 LSB einer Spannung von 3300 mV/4096 = 0.806 mV und die max. 9 LSB somit 7.25 mV entsprechen. Für den hier gezeigten Messaufbau sind das respektable Werte, die durchaus denen im Datenblatt veröffentlichten entsprechen.

Wird der DAC mit seiner vollen Auflösung als 12-bit DAC betrieben (PYB_adda_test_1.py), ergeben sich praktisch kaum Änderungen.

MicroPython – Python für Embedded Systems

Python hat sich im Desktop-Bereich und bei Web-Anwendungen etabliert und erobert sich nun mit MicroPython den Bereich der Embedded Systems. Die MicroPython Dokumentation ist hier zu finden.

Pythons übersichtlicher und lesbarer Codierstils und die Vielzahl vorhandener Libraries kommen gerade dem Maker für den Bau von Embedded Systems entgegen. Python gibt Entwicklern die Möglichkeit, sehr schnell Prototypen ihrer Anwendungen zu schreiben.

Ich werde mich hier mit MicroPython auf dem PyBoard sowie Ports für STM32 und ESP32 befassen. Die STM32 von ST sind in industriellen Anwendungen weit verbreitet und der ESP32 ist gerade bei Makern und für das Prototyping sehr beliebt.

Mit den folgenden Boards arbeite ich:

PYBv1.1
NUCLEO-L476RG
ESP32 DevKit

Ich freue mich auf Euer Interesse. Beiträge zum Blog sind willkommen.