2023
HOME

3D ZX-Spectrum Grafik auf dem OLED in MicroPython
BASIC to MicroPython
Ergänzung zum Buch Messen, Steuern und Regeln mit MicroPython und RP2040

Display mit 48x30 ZeichenEin Spaziergang auf YouTube findet ab und zu interessante Algorithmen. Dem gemeinen ZX-Spectrum-Veteranen der ersten Stunde erscheint die Abbildung nebenan möglicherweise vertraut.

Der folgende externe Link führt direkt zum Video mit dem Titel 3D functions in BASIC (ZX Spectrum). Darin wird das Listing ebenfalls gezeigt, so dass die Zeilen in eine heute aktuelle Sprache übersetzbar sind.

Damit kann auch überprüft werden, ob das oben genannte Buch mit der dortigen Struktur, nach einer gewissen verstrichenen Zeit seit der Niederschrift, hilfreich ist diese Umsetzung durchzuführen.

Inzwischen kann der PiPico mit RP2040 den ZX-Spectrum völlig emulieren, wie weitere Ausflüge auf YouTube Anfang 2023 zeigen, der Sinn bleibt allerdings zunächst verborgen.

Display mit 48x30 Zeichen

ZX-BASIC funktioniert mit Zeilennummern und fügt automatisch eine LET-Anweisung bei Zuweisungen ein. Ansonsten ist das Listing erfreulich kurz und reizt zur Portierung.

Eine Kurzanalyse zeigt weiterhin Aufrufe aus dem mathematischen Bereich: PI, COS und EXP, ein Array mit 255 Werten, FOR-Schleifen und die Pixel-Ausgabe PLOT.

Der Graph soll auf einer 64x128 OLED-Anzeige erscheinen unter Verwendung des FrameBuffer-Prinzips, so dass andere Anzeigen ohne zusätzlichen Aufwand angeschlossen sein können. Die Initialisierung der Anzeige steht am Anfang des MicroPython-Scriptes und hat kein Gegenstück im BASIC-Listing.


																	

												

Kapitel-Abgleich zur Portierung nach MicroPython

Kapitel 2.6 zeigt die Möglichkeiten des FrameBuffers und den PLOT-Ersatz in Form der Funktion pixel. Kapitel 3.5.5 verwendet das OLED-Display SSD1306 und zeigt die benötigten Initialisierungen mit Hilfe der über Thonny installierten Bibliothek ssd1306. Abbildung 3-1 zeigt die Pinbelegung und die I2C- und Versorgungsanschlüsse. Mit from math import * stehen alle mathematischen Funktionen bereit, wie das in Abschnitt 1.5.2 mit einigen Beispielen zu lesen ist. Die Iteration per for-Schleife in MicroPyton ist Thema in Kapitel 1.2.1. Verzweigungen mit if und else beschreibt Abschnitt 1.6.3. Bleibt noch das Kapitel 1.3.2 welches die bytearrays anwendet, die in diesem Fall ausreichen.


MicroPython und OLED ersetzt ZX-BASIC

Alles zusammen ergibt das hier folgende Listing.

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

WIDTH = 128 # oled display width
HEIGHT = 64 # oled display height
i2c = I2C(0) # Init I2C using I2C0 defaults Pin 11/12 SDA/SCL
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c) # Init oled display

oled.fill(0)
oled.text("PiPico",WIDTH-6*8,2)

from math import *
m=bytearray(255)
a=cos(pi/4)
for y in range(1,141,5):
    e=a*y
    c=y-70
    c=c*c
    for x in range(1,141):
        d=x-70
        z=80*exp(-0.001*(c+d*d))
        x1=x+e
        y1=z+e
        i=int(x1)
        if y1 >= m[i]:
            m[i]=int(y1)
            oled.pixel(int(x1/2),HEIGHT-int(y1/2.1),1)
    oled.show()
oled.text("0 OK",WIDTH-32,8*7)
oled.show()

Das vorletzte oled.show() zeigt den gezeichneten FrameBuffer auf dem Display an. Wird es weggelassen, so erscheint der Graph "am Stück" - quasi ein fast des ZX81. Wird die Zeile per Tab nach rechts geschoben, so kann ein Original-Spectrum-Feeling erreicht werden, wenn das Display nach jedem Pixel aktualisiert wird. In der Pixel-Ausgabe wird die Anzeige von 256x192 des Spectrums zur 128x64 Anzeige des winzigen OLED umgerechnet. Die OLED-Bibliothek erwartet ganzzahlige Variablen, wodurch der Aufruf der Funktion int() erforderlich wird.


Obige Ausführungen sollen zeigen, dass mit dem links dargestellten Titel Portierungen aus älteren Listings und anderen Sprachen durchaus möglich sind. Das 2021 erschienene Messen, Steuern und Regeln mit MicroPython und RP2040 zeigt praktische Untersuchungen messtechnischer Aufgaben mit dem preiswerten Pico-Board unter Verwendung der interpretierenden Hochsprache MicroPython. Messen, Darstellen und Auswerten mit dem Raspberry Pi Pico.


Mehr Software

.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt