---

PicoBasic V1.1 mit Terminal            

            

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry     




Download: PicoBasic11.zip

Mit dem Update auf die Version 1.1 gibt es drei Neuerungen, die auf der Anwenderseite realisiert wurden. Die Firmware wurde ebenfalls überarbeitet. Der Interpreter läuft jetzt im zweiten Kern des Pico und verwendet ein Funktionsarray für die Aufrufe der einzelnen Befehle. Damit wurde eine höhere Geschwindigkeit erreicht. Gleichzeitig laufen die Programme glatter, weil Zeitmessung und USB keine Unterbrechungen im zweiten Kern verursachen. Das neue Anwenderprogramm läuft zwar auch mit der bisherigen Firmware, aber ein Update auf die neue Firmware lohnt sich.

1. Das Terminal

Bisher gab es in PicoBasic zwar schon die Befehle Print A und Input A, aber man musste ein externes Terminal bemühen, um sie zu nutzen. Mit der Version 1.1 ist ein eigenes Terminal hinzugekommen. Das untere horizontale Textfenster hat in der ersten Version nur die Datenübertragung beim Programm-Upload gezeigt. Das ist auch jetzt noch so, aber mit einem Klick ins Fenster wird daraus ein spezielles Terminal. Man kann Zahlen eingeben und mit Return absenden und auch Zahlenwerte empfangen. Das Fenster wird automatisch für eine neue Eingabe gelöscht, wenn länger als eine Sekunde keine neuen Daten mehr kommen.

Achtung, wer in einem Programm Print A verwendet hat und sich dann wundert, dass keine Ausgabe erscheint, der hat vergessen, in das Terminalfenster zu klicken. Das wurde so gemacht, damit man auch weiterhin mit externen Terminals arbeiten kann. Ohne den Klick ist die COM nach einem Upload freigegeben und kann von anderer Software wie einem Terminal oder einem Plotter benutzt werden.

2. Zahleneingaben

Ab jetzt kann man Zahlen wahlweise dezimal, binär oder hexadezimal eingeben. Das betrifft alle Textfenster zur Eingabe von Konstanten und auch die Eingaben im Terminal. Im Bild oben sieht man, dass H0F eingeben wurde. Jede Eingabe wird vom Mikrocontroller grundsätzlich mit einem Echo in Form einer Dezimalzahl beantwortet. Die Hexadezimalzahl H0F wird hier zur Dezimalzahl 15.  Entsprechend werden die vier unteren LEDs eingeschaltet.

Dezimalzahlen dürfen maximal drei Stellen haben. Die Eingabe 999 ist erlaubt, wird aber auf acht Bit abschnitten und erscheint als 231. Die Zahl 256 wird auf diese Weise zu 0.

Binärzahlen müssen mindestens vier Stellen haben, damit sie eindeutig von Dezimalzahlen unterschieden werden können. 111 wäre noch eine Dezimalzahl, also muss man 0111 oder auch 00000111 schreiben. Das Echo lautet dann 7.

Hexadezimalzahlen beginnen mit einem H. Es ist Groß- oder Kleinschreibung möglich. H0F oder h0f sind gleichwertig und werden als dezimal 15 gelesen. H15 entspricht dagegen 21.

3. Label-Nummern

Wie bisher wird mit jedem neuen Label eine neue Nummer vergeben, Neu ist, dass nun mit jedem neuen Label beide betreffenden Fenster die neue Nummer erhalten. Wenn man ein weiter zurückliegendes Label anspringen möchte, muss man die Zahl manuell ändern.




Das Programm Dmal.pbas zur Untersuchung einer Zählschleife verwendet zwei Labels. Nun ist für den Befehl Dmal GotoL2: keine Änderung der Label-Nummer mehr nötig. Allerdings muss die letzte Zeile, Goto L1: in das zugehörige Fenster die 1 eingeben werden. Achtung, Wenn ein Programm mit einem neuen Label erweitert werden soll, muss man  zuerst die letzte vergebene Labelnummer eintragen, damit das neue Label die folgende Nummer erhält.

Im Terminal Fenster sieht man, dass 20 eingegeben wurde. In der zweiten Zeile kommt zuerst das Echo 20 und dann die absteigende Zahlenfolge von 20 bis 0. Es hab also tatsächlich 21 Durchläufe, weil Dmal L2: nach vorn springt.

Das Programm Scope.pbas wurde für die Verwendung mit dem Seriellen Plotter der Arduino-IDE geschrieben. Nach dem Hochladen darf man deshalb nicht ins Terminalfenster kicken, denn damit wäre die COM belegt.




Das Programm führt laufend analoge Messungen aus, die an den PC gesendet werden. Die Wartezeit von 21 ms führt zu einer Unterabtastung eines 50-Hz-Signals. Das folgende Ergebnis mit dem Arduino-Plotter zeigt die in ein offenes Messkabel auf dem Labortisch eingestreuten 50-Hz-Signale. Im mittleren Bereich sieht man zusätzliche Störungen, die durch Änderungen statische Felder entstanden sind, weil sich eine Person in der Nähe auf dem Boden bewegt hat.




Veränderte Firmware V1.1

Der Interpreter läuft jetzt zweiten Kern des Pico. Für jeden Befehl gibt es diesmal eine eigene Funktion. Die Funktionen sind so klein, dass ich sie zur besseren Übersicht in jeweils eine Zeile geschrieben habe. Die Funktionen heißen k1, k2, k3 usw., damit sie übersichtlich in ein ein Array von Funktionszeigern gepackt werden können. Die die neu hinzugekommene Funktionen np() steht für no operation bzw. nop. 

void setup1() {
  gpio_init_mask (mask);
  //gpio_set_dir_masked (mask, 255);
  gpio_put_masked (mask, 0);
}

 void k1(){a = dat;adr++;} 
 void k2(){b = dat;adr++;}
 void k3(){c = dat;adr++;}
 void k4(){d = dat;adr++;}
 void np(){adr++;}   
 void k8(){gpio_put_masked (mask, dat);adr++;} //Pout dat
 void k9(){gpio_set_dir_masked (mask, dat);adr++;} //Pdir dat
 void k10(){for(int j=0; j<8; j++){gpio_set_pulls(j,1 &(dat>>j), 0);}adr++;} //Pullup dat 
 void k11(){for(int j=0; j<8; j++){gpio_set_pulls(j, 0,1 &(dat>>j));}adr++;} //Ppulldown dat

In der Hauptschleife des zweiten Prozessorkerns steht das Array der Funktionszeiger. Hier sind alle Funktionen hintereinander geschrieben, sodass sie später mit  befehl[kom]() aufgerufen werden können. Das bringt eine erhebliche Zeitersparnis gegenüber der ersten Version.

void loop1(){
  void (*befehl[76])() = {
  np, k1, k2, k3, k4, np, np, np,
  k8, k9, k10, k11, np, np, np, np,
  k16, k17, k18, k19, np, np, np, np,
  k24, k25, k26, k27, np, np, np, np,
  k32, k33, k34, k35, k36, k37, k38, np,
  k40, k41, k42, k43, k44, k45, k46, k47,
  k48, k49, k50, k51, k52, k53, k54, k55,
  k56, k57, k58, k59, k60, k61, k62, k63,
  k64, k65, k66, k67, k68, k69, np, np,
  k72, k73, np};
  ...
  ...
    kom = code[adr] >> 8;
    dat = code[adr] & 255;
    befehl[kom]();




Elektronik-Labor  Projekte  Mikrocontroller  Raspberry