Der PicoBasic-Simulator 

                           von Günther Zivny                          

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Download mit FreePascal-Quelltext und PicoBasic-Beispielen: PicoBasicSimulator.zip

Video: https://youtu.be/p_Bk7jl6lYo

Der PicoBasic-Simulator ist in die ursprüngliche PicoBasic3.0-Oberfläche ohne das TestLab integriert. Das ist sinnvoll, weil das TestLab nur mit der Hardware verwendet werden kann. Hier geht es um die reine Programmiersprache. Auf der Bedienungsoberfläche von PicoBasic3.0 gibt es die neue Schaltfläche „simulate“. Klickt man darauf, öffnet sich das Simulatorfenster und das gerade geladene Programm läuft virtuell am Bildschirm ab. Ein Mikrocontroller muss nicht angeschlossen sein. Der Simulator ist nützlich bei der Programmentwicklung und beim Erlernen von PicoBasic.

Schauen wir uns als erstes Beispiel das Programm 5_Blink1.pbas an. Das Programm wird mit „Open“ ins TestLab geladen, mit „simulate“ in den Simulator übertragen und dort mit „Start“ gestartet. Mit „Step“ kann das Programm schrittweise durchgegangen werden. Weil hier keine Eingaben durch den User vorgesehen sind, sind alle Pins mit Pdir = 255 als Ausgänge geschaltet. Die Pegel der Pins werden sinnfällig durch Farben angezeigt: Grau = low, rot = high. Die Simulation läuft nicht in Echtzeit ab, sondern langsamer.

Laden wir als nächstes das Programm 5_Pin.pbas.

 

Hier sind mit Pdir = 240  = binär 1111 0000 die unteren vier Pins als Eingänge geschaltet. Man kann hier über die Checkboxen Eingangspegel setzen, was durch eine weiße bzw. hellrote Farbe angezeigt wird. Diese Pegel werden eingelesen und dann analog auf den oberen vier Pins ausgegeben. Dass die oberen vier Pins Ausgänge sind, sieht man an der grauen bzw. roten Farbe, aber auch am „X“ neben den Checkboxen. Man kann hier zwar auch Häkchen setzen, das hat aber keine Wirkung. An der Hardware sollte man Ausgänge auch nicht von außen auf einen anderen Pegel ziehen, weil dies den Mikrokontroller beschädigen kann.

Über den Pins werden zusätzliche Werte angezeigt:
Mit Input = 1 (also binär 0000 0001) ist der Wert der Inputs gemeint.
Mit Output = 16 (also binär 0001 0000) ist der Wert der Outputs gemeint.
Mit Port = 17 (also binär 0001 0001) ist der Wert des gesamten Ports gemeint.

In der untersten Zeile sieht man auch den aktuellen Inhalt der vier Speicher von PicoBasic (A, B, C, D). Zu beachten ist, dass mit A = Pin der Wert Port = 17 eingelesen wird. Durch die Multiplikation mit 16 (also 17x16 = 272) wird das oberste Bit herausgeschoben, sodass jetzt A = 16 ist (272 - 256 = 16).

Analoge Inputs und Outputs:

Analoge Inputs kann man mit den drei Schiebereglern nachahmen. Der Wertebereich bewegt sich zwischen 0 und 255, was an der Hardware dem Betriebsspannungsbereich entspricht. An den Balkenanzeigen sieht man analoge Ausgangsspannungen, ebenfalls im Bereich der Betriebsspannung. Im Beispiel wird AD0 eingelesen und der Wert an PWM1 ausgegeben. Der Digitalwert ist A = 190. Die Balkenanzeige bewegt sich sprunghaft, weil der Eingang mit niederer Frequenz abgetastet wird.

 

Datenspeicher [B+]

Mit [B+] = A steht ein Array mit 256 Elementen zur Verfügung. Die Indizierung der Elemente erfolgt mit der Variablen B. Beispiel B = 5, der Wert von A wird in das Element [5] geschrieben. Mit jedem Aufruf von [B+] = A wird B automatisch um 1 erhöht. Das ist nützlich, wenn Messreihen der Reihe nach abgespeichert werden sollen. Man startet also mit einem Startindex (z.B. B = 0) und füllt dann den Speicher mit B[0], B[1], B[2] … B[n].  Mit A = [B+] werden die gespeicherten Werte nach A geschrieben, wobei auch hier B mit jedem Aufruf um 1 erhöht wird. Um die gespeicherte Messreihe abzurufen, startet man also mit dem gleichen Startindex. Im folgenden Beispiel lässt man den Simulator laufen und bewegt den Regler AD0 langsam hin- und her. Es werden C = 50 Werte gespeichert. Dann schaltet das Programm automatsch um und gibt die gespeicherten Werte wieder über PWM1 aus.

 

Kommunikation zwischen dem Mikrocontroller und dem PC

Mit Print A kann man vom Mikrokontroller Werte an den PC schicken. Diese werden dann in dem untersten langen Fenster angezeigt (im Beispiel 142). Das funktioniert auch in der Simulation. Wenn ein Mikrokontroller angeschlossen ist, sollte man den Simulator stoppen, damit es nicht zu Zugriffskonflikten kommt.


Mit Input A kann man Werte vom PC an den Mikrokontroller senden. Den Wert schreibt man in das kleine Fenster unter „pico“ (Absenden mit RETURN). Sobald man auf die Bedienungsoberfläche klickt, wird das Simulatorfenster in den Hintergrund gestellt, die Simulation läuft aber weiter. Das ist normalerweise sinnvoll, in dieser Anwendung aber störend. Im Beispiel wurde der Wert 17 gesendet und vom PC wieder zurückgesendet.

 

Pullup- / Pulldown-Widerstände

Der Simulator verwendet Pullup und Pulldown exakt wie der Rpi Pico. Die verschiedenen anderen Mikrocontroller, die mit PicoBasic programmiert werden können, unterscheiden sich in den Eigenschaften ihrer Ports, sodass Pullup und Pulldown nicht dieselbe Wirkung haben. Man kann jedoch Programme für den Rpi Poco entwickeln, simulieren und dann vielfach auch in den Arduino Nano oder den Tiny3216 laden, solange Pullup und Pulldon nicht verwendet werden.

 

Der Simulator ist so programmiert, dass mit Pullup = 255 alle Pullup-Widerstände „virtuell“ eingeschaltet werden. Bei den auf Eingang programmierten Pins sieht man das daran, dass die Pins hellrot aufleuchten, obwohl keine Häkchen gesetzt sind. Bei den auf Ausgang programmierten Pins ändert sich nichts, weil die Ausgangstreiber den Pegel bestimmen. Man kann aber  Eingänge von außen auf LOW schalten.

Mit Pulldown = 255 (oder Pullup = 0) werden alle Pullup-Widerstände ausgeschaltet. Ob Pulldown-Widerstände eingeschaltet sind, sieht man nicht, weil der Default-Wert „low“ ist. Offene Eingänge werden in der Simulation ebenfalls immer „low“ angezeigt, während sie in der Realität zufällige Zustände einnehmen können.

Weitere Anregungen und Übungsmaterial für den Simulator findet man hier:
11.9.24: PicoBasic Schnellstart
4.9.24: PicoBasic Sprachumfang



Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic