PicoBasic für den ATtiny3216                             

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Seit einiger Zeit bin ich ein großer Freund der Tiny-Serien 0 und 1. Diese Controller sind sehr leicht über nur einen Pin (UPDI) zu programmieren, sind sehr vielseitig und außerdem preiswert. Hier kommt der ATtin3216 mit 20 Beinchen zum Einsatz. Es sollte ein möglichst kleines Platinchen für den universellen Einsatz werden. Deshalb liegt der USB/Seriell-Adapter extern. Hier habe ich ein FT232-Kabel verwendet, das über eine vierpolige Stiftleiste angeschlossen wird. Wenn ein Programm entwickelt wurde und in das EEPROM gebrannt wird, hat man ein kleines System, das auch für Batteriebetrieb geeignet ist.


Weil das ursprüngliche PicoBasic des Rpi Pico mit der Arduino-IDE entwickelt wurde, war der Umstieg auf einen anderen Controller relativ einfach. Nur die speziellen Eigenheiten des neuen Controllers mussten angepasst werden. Die acht digitalen Ein/Ausgänge D0 bis D7 wurden auf die drei Ports, PB, BC und PA verteilt, sodass sie auf einer Seite liegen. Auf der anderen Seite hat man dann RXD, TXD und die analogen Anschlüsse. Wie bisher beim RPI Pico gibt es AD0 bis AD2. Eine Besonderheit des Tiny3216 ist sein echter 8-Bit-DA-Wandler. Darauf wollte ich nicht verzichten und habe ihn an die Stelle von PWM2 gesetzt, während PWM1 ein normaler PWM-Ausgang geblieben ist. Weil der Reset-Eingang als UPDI-Anschluss gebraucht wird, wurde ein Ersatz-Reset mit einem Tastschalter an PB1 erzeugt. Damit kann man jederzeit den Grundzustand herstellen oder auch ein Programm aus dem EEPROM neu starten.




Anders als der Rpi Pico hat der Tiny3216 keine internen Pulldown-Widerstände. Die dadurch freigewordene Befehlstaste hat nun eine andere Funktion und heißt Pout = NOT 0...255, sie invertiert also die angegebene Konstante für die Portausgabe. Tatsächlich wird hier dasselbe Kommando 0x09 wie beim Pout-Befehl verwendet. Das hat immerhin den Vorteil, dass man oft eine Änderung der Konstante einspart und damit etwas schneller programmieren kann. Mit dem Tiny3216 entwickelte PicoBasic-Programme sind trotzdem voll kompatibel zur Pico-Version und können dort direkt eingelesen werden.




Die zweite Änderung betrifft den analogen DA-Ausgang, der an die Stelle von PWM2 tritt. Die interne Referenz des DA-Wandlers wurde auf 2,5 V eingestellt. Mit DA = 100 erhält man dann relativ genau eine Spannung von 1,0 V, und das ganz unabhängig von der Betriebsspannung im Bereich 3 V bis 5 V. Dieselbe Referenz wurde auch für alle drei Kanäle des AD-Wandlers verwendet. Damit hat man auch bei Batteriebetrieb eine genaue Spannungsmessung.


Ein Display für den Tiny3216



Download incl. Firmware (Update 7.11.24): PicoBasicTiny.zip

Die Display-Ansteuerung mit PicoBasic hat sich als Testfall für lange Programme erwiesen. Die Programme Display1 bis Display7 wurden ohne Änderung vom Pico auf den Tiny übernommen. Allerdings ist Display7.pbas zu lang für das EEPROM. Weil der Tiny3216 nur 256 Bytes im EEPROM speichern kann, ist die Programmlänge auf 128 Befehlszeilen begrenzt. Aber Display7.pbas kann mit RUN direkt gestartet werden.

Für die weiteren Tests wurde das Programm Display3.pbas erweitert, sodass es die Zahl 68 anzeigt und zusätzlich eine Art Lauflicht mit den farbigen Segmenten der Balkenanzeige erzeugt. Diese Version wurde als Display8.pbas gespeichert. Dabei zeigten sich einige Fehler im Zusammenhang mit der EEPROM-Nutzung. Insbesondere führte ein Nop nach dem Rückladen aus dem EEPROM zu einem Absturz. Lange Programme hatten außerdem ein Timing-Problem beim Laden. Und es konnten Situationen eintreten, bei denen ein neues Laden nicht mehr funktionierte. All das hat zu einem Update geführt, mit dem PicoBasic auf dem Tiny3216 nun wesentlich zuverlässiger geworden ist.



Für die TinyAVR-Boards gibt es zahlreiche Einstellungen. Ich habe eine Taktfrequenz von 20 MHz eingestellt, was eigentlich eine Betriebsspannung von 5 V erfordert. Allerdings soll das System auch Batterie-tauglich werden. Die Brownout-Grenze habe ich deshalb auf 2,6 V eingestellt. Derzeit läuft der Controller mit einem Li-Akku bei ca. 4 V völlig problemlos. Wer aber Wert auf absolute Zuverlässigkeit legt, sollte besser eine Taktrate von 10 MHz einstellen oder 5 V verwenden..



Das VB-Programm wurde ebenfalls optimiert. Die Übertragung ins EEPROM ist nun zuverlässig. Wenn ein Programm zu groß für das EEPROM ist, wird eine entsprechende Warnung ausgegeben.


Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic