PicoBasic Funktions-Erweiterungen                           

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Es gibt tausend Gründe, PicoBasic um weitere Befehle zu erweitern. Andererseits sind für die einfach gehaltene Oberfläche möglichst wenige Befehle besser. Es wäre also ungünstig, die direkt sichtbaren Befehle zu vermehren. Der Wunsch nach Erweiterungen kam zuerst auf, als es im TestLab die Möglichkeit gab, die PWM-Frequenz und die Spannungsreferenz umzuschalten, dies aber in PicoBasic nicht möglich war. Die Lösung des Problems liegt nun ab der Version 2.3 im Befehl Gosub L. Normalerweise steht da z.B. Gosub L2, wobei ein PicoBasic-Unterprogramm an der Adresse L2 aufgerufen wird. Wenn man aber eine Label-Nummer ab 240 (F0) angibt, werden ab der Version 2.3 interne Funktionen ausgeführt, die als Spracherweiterungen dienen. Im Bild oben sieht man den Aufruf Gosub L244 zur Erzeugung einer Sinustabelle. Man muss dazu also nicht mehr ins TestLab umschalten.

Die Funktion extensions(void) wertet die Label-Nummer aus und führt die zugehörigen Unterfunktionen aus. Mit Gosub L240 (oder headezimal  Gosub LF0) stellt man die PWM-Frequenz ein, wobei ein Parameter 0…4 in A übergeben werden muss. Ganz ähnlich funktioniert der Aufruf Gosub L241, mit dem man die Spannungsreferenz in drei Stufen umschalten kann.

void extensions(void){
  if (dat==240){                    //PWM Freq
    if (a==4) {TCCR2B=1;TCCR1B=1;}  //Prescaler 1
    if (a==3) {TCCR2B=2;TCCR1B=2;}  //Prescaler 8
    if (a==2) {TCCR2B=4;TCCR1B=3;}  //Prescaler 64
    if (a==1) {TCCR2B=6;TCCR1B=4;}  //Prescaler 256
    if (a==0) {TCCR2B=7;TCCR1B=5;}  //Prescaler 1014} 
  }
  if (dat==241){                    //AD Ref
    if (a==0) {uref=0xE0;}  //Ref 1.1 V
    if (a==1) {uref=0x20;}  //Ref ext
    if (a==2) {uref=0x60;}  //Ref 5 V
  } 
  if (dat==242){            //Hispeed Scope
    for (n=0;n<256;n++){
      ram[n]=adc(0);
    }
  }
  if (dat==243){            //Zweikanal Scope
    for (uint16_t n=0;n<256;n++){ram[n*2]=adc(0);ram[n*2+1]=adc(1);}
    for (uint16_t n=0;n<512;n++){USART_printByte(ram[n]);}
  }
  if (dat==244){            //Sinustabelle
     for (uint16_t n=0; n<256;n++) {ram[n]=127+127*
     sin(3.14159*2*n/256);}
  } 

  if (dat==253){}
  if (dat==254){}
  if (dat==255){}
}

Insgesamt gibt es 16 mögliche Erweiterungen, von denen die meisten noch frei sind. Die dritte Funktion ist schon gefüllt und bildet eine schnelle Messschleife für ein Einkanal-Oszilloskop. Zusätzlich gibt es ein Zweikanal-Oszilloskop und eine Sinustabelle. Man findet noch viele Dinge, die ein Arduino leisten kann, die aber bisher in PicoBasic nicht enthalten sind. Dazu gehören die Nutzung externer I2C-Bausteine, zahlreiche Sensoren, verschiedene Displays und vieles mehr. Mit den Extensions steht der Weg offen für spezielle Ansteuerungen aller Art.  

Das folgende Programm verwendet drei der vorhandenen Extensios, die mit Gosub aufgerufen werden. Mit A = 3 und Gosub L240 wird die PWM-Frequenz auf 3,9 kHz geschaltet. A = 7 und Gosub L241schaltet die Referent des AD-Wandler auf VDD, also den Messbereich auf 5 V.  Und Gosub L242 startet eine schnelle Messserie, die Daten von AD0 in das 256 Byte große Array schreibt.

              REM Scope4
0x0103  A = 3
0x2200  If A=B Goto L240:
              REM 3.9 kHz
0x1064  PWM1 = 100
0x0107  A = 7
              REM Ref VDD
0x21F1  Gosub L241:
              L1:
0x04FF  D = 255
0x21F2  Gosub L242:
              REM Fast Scope
0x04FF  D = 255
0x0200  B = 0
              L2:
0x3A00  A = [B+]
0x4200  Print A
0x2609  D*Goto L2:
0x1A01  Delay s = 1
0x2005  Goto L 1:

Das Beispiel erzeugt ein PWM-Signal mit 3,9 kHz und ca. 40% Impulsdauer. Der Messbereich des AD-Wandlers wird auf 5 V gestellt. Dann wird einmal pro Sekunde eine schnelle Messung gestartet und die Daten werden mit einer PicoBasic-Ausgabeschleife  an den PC gesandt. Für die Messung wurde ein RC-Filter mit 10 kΩ und 22 nF, also mit einer Grenzfrequenz von 720 Hz zwischen PWM-Ausgang und AD0 geschaltet. Insgesamt werden 16 Schwingungen in 250 Messpunkten aufgezeichnet. Die Abtastfrequenz beträgt also 3,9 kHz * 250 / 16 = 61 kHz. Damit wird eine wesentlich höhere Abtastrate erreicht als mit einem reinen PicoBasic-Programm.






Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic