---

PicoBasic für den RPi Pico                  

            

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry     




Download: PicoBasic.zip

Die Idee kam bei der Beschäftigung mit dem Kosmos-Basic. Eine kleine und überschaubare Programmiersprache für kleine, schnelle Experimente. Man muss sich keine Befehlsworte merken und auch die Syntax nicht besonders beachten, weil alles zum Anklicken bereitsteht. Ein Programm ändern, übertragen und starten dauert nicht länger als eine Sekunde.

Daneben gibt es natürlich viele Einschränkungen, nur vier mögliche Variablen, alle Daten im Byte-Format und nur die wichtigsten Befehle für kleine Steuerungen. Das ist kein vollwertiges Basic, auch kein Milli- Mikro- oder Nano-Basic, sondern eben nur ein Pico-Basic, sozusagen nur zehn hoch minus zwölf eines vollen Basic.

Solche kleinen Mini-Programmiersprachen habe ich schon mehrfach entwickelt. Es ging los mit dem Simpel-Compiler für die Zelle von Modul-Bus. Dann folgten MC48, MC51 und MC535. All diese Werkzeuge wurden ursprünglich für den Schulunterricht entwickelt, so wie etwas später dann das Do-it für das CompuLab von Hans-Joachim Berndt. In der gleichen Tradition lag das Spion-Basic für den Umwelt-Spion und etwas später das Kosmos-Basic. Der letzte Ausflug in diese Art der Software-Entwicklung war die Tasten-Programmierbare Steuerung TPS.

Und jetzt hat es mich wieder gepackt. Der RPI Pico ist ähnlich klein wie der Kosmos-Mikrocontroller, hat aber viel mehr Möglichkeiten und vor allem eine USB-Schnittstelle. Zur Programmierung wurde die Arduino-Umgebung verwendet. Ich habe mich weitgehend an den Befehlssatz des Kosmos-Basic gehalten, damit alles auf 8 Bit beschränkt und nur wenige zusätzliche Befehle eingebaut. Man kann jetzt Pullup und Pulldown an den  Eingängen verwenden, hat bis zu drei AD-Eingänge und zwei PWM-Ausgänge. Außerdem gibt es eine Datenverbindung zum PC mit Print A und Input A. Auf Wunsch meines Freundes und Betatesters Rainer wurde ein Nop-Befehl hinzugefügt.

Wer es probieren möchte, muss nur das Download-Zip in ein Verzeichnis entpacken und die Firmware in den Pico laden. Dann muss man die COM-Nummer herausbekommen und in die Ini-Datei eintragen. Voreingestellt ist COM4, man kann also auch die COM-Nummer auf COM4 ändern.

Zum Testen der Beispielprogramme sollte man  acht LEDs an die Ports P0 bis P7 legen, am besten solche mit internem Vorwiderstand. Ein Taster an P0 ist ebenfalls nützlich und zwei weitere LEDs an P8 (PWM1) und P9 (= PWM2). Ein Kabel an ADC0 ist der analoge Eingang AD0.

Und nun geht es los. Man kann PicoBasic starten,  alle vorbereiteten Beispielprogramme (.pbas) laden und testen, Änderungen probieren oder neue Programme schreiben.

Befehle werden durch Anklicken übertragen, wobei ein eventueller Parameter vorher verändert werden kann. Die Software verfügt nur über sehr einfache Editiermöglichketen. Eine Zeile wird durch Anklicken markiert und kann dann durch einen neuen Befehl ersetzt werden. Der nächste Befehl wird dann wieder hinten angefügt. Man kann auch eine neue Zeile vor der markierten Zeile einfügen.

Das PicoBasic-Projekt wird hier mit dem gesamten Arduino-Projekt zur beliebigen Verwendung freigegeben. Jeder kann damit experimentieren, vielleicht neue Befehle hinzufügen und alles für eigene Zwecke anpassen. Die Windows-Software wurde in VB6 geschrieben und wird ebenfalls zur freien Verwendung und für beliebige Erweiterungen und Verbesserungen freigegeben.

Die Firmware kann hier nur in Auszügen vorgestellt  werden. Hier sieht man die Umsetzung einiger einfacher Befehle.

In der Firmware:

    if (kom == 0x34){b = a;} // B = A
    if (kom == 0x35){a = b;} // A = B
    if (kom == 0x36){c = a;} // C = A
    if (kom == 0x37){a = c;} // A = C
    if (kom == 0x38){d = a;} // D = A
    if (kom == 0x39){a = d;} // A = D
    if (kom == 0x3a){a = ram[b];b++;} // A = [B+]
    if (kom == 0x3b){ram[b] = a;b++;} // [B+] = A 
    if (kom == 0x3c){a = analogRead(A0) >>2;} // A = AD0  
    if (kom == 0x3d){a = analogRead(A1) >>2;} // A = AD1  
    if (kom == 0x3e){a = analogRead(A2) >>2;} // A = AD2 
    if (kom == 0x3f){a = 255 & gpio_get_all();} // A = Pin  
    if (kom == 0x40){a = 1 & (gpio_get_all());} // A = Pin0  

Im VB6-Programm:

Private Sub Command40_Click()
    k = 52 * 256
    Textzeile = "0x" + Hex(k) + "  B = A "
    ZeileEinsetzen
End Sub

Private Sub Command41_Click()
    k = 53 * 256
    Textzeile = "0x" + Hex(k) + "  A = B "
    ZeileEinsetzen
End Sub

Private Sub Command42_Click()
    k = 59 * 256
    Textzeile = "0x" + Hex(k) + "  [B+] = A "
    ZeileEinsetzen
End Sub

Private Sub Command43_Click()
    k = 55 * 256
    Textzeile = "0x" + Hex(k) + "  A = C "
    ZeileEinsetzen
End Sub



Elektronik-Labor  Projekte  Mikrocontroller  Raspberry