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
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