PicoBasic 2.2 für den Tiny3216                             

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Download: PicoBasicTiny22.zip

Das PicoBasic für den Tiny3216 wurde noch einmal überarbeitet, auf den neusten Stand gebracht und um das TestLab erweitert. Die entscheidenden Änderungen betreffen die Ausführungsgeschwindigkeit. Die Übertragungsrate wurde auf 1 MBaud erhöht. Alle wesentlichen Hardwarezugriffe laufen nicht mehr über die Arduino-Funktionen, sondern über natives C. Dadurch entfallen Hintergrundprozesse und die dabei nötigen kurze Unterbrechungen durch Interrupt-Funktionen. Beim RPi Pico wurde dieses Problem durch den zweiten Prozessorkern gelöst, hier durch die Vermeidung der Interrupts.

void USART0_init(void){
    PORTB.DIRSET = 0x04;    //TXD an PB2
    PORTA.DIRCLR = 0x08;    //RXD an PB3
    USART0.BAUD = (uint16_t)USART0_BAUD_RATE(1000000);
    USART0.CTRLB |= USART_RXEN_bm | USART_TXEN_bm; 
}                 

...
int main(void){
  _PROTECTED_WRITE (CLKCTRL_MCLKCTRLB, 0);  // 20 MHz
  USART0_init();
  ...
  while(1){
    if (USART0.STATUS & USART_RXCIF_bm){
    ...  
      if (ch>64 && ch<88){
        direkt[ch-65]();
      }
    }
    if(warten>0){weiter = Timer_hi + warten; warten = 0; TCB0.CTRLA=1;}
    if (TCB0.INTFLAGS & TCB_CAPT_bm){Timer_hi++;TCB0.INTFLAGS = TCB_CAPT_bm;}
    if(Timer_hi >= weiter){
      kom = code[adr] >> 8;
      dat = code[adr] & 255;
      befehl[kom]();
    }
    if ((PORTB.IN & 2)==0){_PROTECTED_WRITE (WDT_CTRLA,PERIOD_64CLK_gc);_delay_ms(1000);}// Reset an PB1
  }
}

Damit gibt es keine Abfrage millis() mehr, um Zeitabläufe zu steuern. Dafür wird nun der Timer TBC0 verwendet, der im Millisekundentakt überläuft und die Zeitvariable Timer_hi erhöht. Bei einem laufenden Programm werden für jede Zeile diese Schritte durchlaufen:

•    Abfrage, ob vom USART ein Byte empfangen wurde
•    Abfrage, ob gerade eine Wartezeit in Millisekunden gestartet wurde
•    Abfrage, ob ein Timer-Überlauf erkannt wurde
•    Abfrage, ob eine Wartezeit abgelaufen ist
•    Lesen des Basic-Tokens und des Parameters aus dem Speicher
•    Aufruf der Befehls-Funktion
•    Abfrage der PicoBasic-Reset-Taste



Zum Test wurde das Programm Speed2.pbas verwendet, das ein symmetrisches Rechtecksignal erzeugt. Mit dem Pico wurde damit eine Frequenz von 52.2 kHz erreicht. Der Tiny3216 schafft nun 38,7 kHz. Gegenüber der ursprünglichen Version sind vor allem solche Programme wesentlich schneller, die eine serielle Ausgabe verwenden. Zusammen mit dem Senden einer dreistelligen Zahl werden noch 19,3 kHz erreicht.

              REM Speed
0x017B  A = 123
0x09FF  Pdir = 255
              L1:
0x08FF  Pout = 255
0x4200  Print A
0x0800  Pout = 0
0x2002  Goto L1:





Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic