Ein Picobasic-Speicheroszilloskop                            

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Das Programm Scope2.pbas besitzt eine schnelle Messschleife, in der die gemessenen Daten im Datenarray gespeichert werden. So wird die höchste mögliche Abtastfrequenz erreicht. Danach folgt die Print-Ausgabe der Messwerte in einer zweiten Schleife. Wenn man den Seriellen Plotter der Arduino-IDE verwenden will, muss man bedenken, dass die Breite der Anzeige genau für 500 Messwerte vorgesehen ist. Das Datenfeld in PicoBasic hat jedoch nur eine Länge von 256. Hier werden deshalb jeweils genau 250 Daten erfasst und gesendet, wozu die C-Schleife mit C=249 gestartet werden muss. Der Bildschirm wird auf diese Weise aufgeteilt und zeigt jeweils zwei Oszillogramme. Hier wurde das eigene PWM-Signal gemessen, das beim Tinc3216 eine Freqeunz von 1,2 kHz hat. Die Abtastrate beträgtz etwa 25 kHz.

              REM Scope2
0x107F  PWM1 = 127
              L1:
0x03F9  C = 249
0x0200  B = 0
              L2:
0x3C00  A = AD0
0x3B00  [B+] = A
0x2503  C*Goto L2:
0x03F9  C = 249
0x0200  B = 0
              L3:
0x3A00  A = [B+]
0x4200  Print A
0x2508  C*Goto L3:
0x1A01  Delay s = 1
0x2001  Goto L1:

In einer zweiten Version, diesmal mit dem Rpi Pico, wurde das Programm so verändert, dass 500 Messwerte ausgegeben werden. Da der PicoBasic-Datenspeicher nur 256 Bytes fasst, wird jedes zweite Byte bei der Ausgabe gemittelt. Bei der Aufnahme wird jeder Messwert durch Rechtsschieben durch zwei geteilt, sodass effektiv nur mit einer Auflösung von 7 Bit gemessen wird.  Beim Abspielen vereinfacht das die Mittelwertbildung. Es müssen nur das aktuelle und das folgende Messergebnis addiert werden. Der erste Wert wird dagegen durch Linksschieben verdoppelt. 

Eine kleine Schwierigkeit ist bei diesem Projekt, dass B sowohl als Adresszeiger für das Datenarray als auch für die Addition von Messwerten benötigt wird. Am Ende der Ausgabeschleife wird die nächste B-Adresse deshalb aus dem Zählerstand im Schleifenzähler C rekonstruiert.

              REM Scope3
0x117F  PWM2 = 127
              L1:
0x03FA  C = 250
0x0200  B = 0
              L2:
0x3C00  A = AD0
0x3200  A = A Shr 1
0x3B00  [B+] = A
0x2503  C*Goto L2:
0x03F9  C = 249
0x0200  B = 0
              L3:
0x3A00  A = [B+]
0x3100  A = A Shl 1
0x4200  Print A
0x3200  A = A Shr 1
0x3800  D = A
0x3A00  A = [B+]
0x3400  B = A
0x3900  A = D
0x2A00  A = A + B
0x4200  Print A
0x3700  A = C
0x3400  B = A
0x01FA  A = 250
0x2B00  A = A - B
0x3400  B = A
0x2509  C*Goto L3:
0x1A01  Delay s = 1
0x2000  Goto L1:



Die PWM-Frequenz beträgt hier genau 1 kHz Das Signal wurde mit einem RC-Filter zu einem Sägezahn. Es werden genau fünf Schwingungen aufgenommen, d.h. die gesamte Abtastzeit  beträgt 5 ms. Bei 500 Abtastpunkten bedeutet das eine Abtastrate  von 100 kHz, wobei tatsächlich nur mit 50 kHz gemessen wird und jeder Zwischenwert durch die Mittelung entsteht.

Das Beispiel zeigt, dass PicoBasic in Sachen Echtzeitfähigkeit sich nicht von anderen Programmiersprachen verstecken muss. Man sieht aber auch, dass es meist um sehr kurze und überschaubare Programme geht. Da wo eine kleine Aufgabe mit wenig Aufwand gelöst werden soll, ist PicoBasic eine ernsthafte Alternative.



Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic