Projekt BASIC Beispiele Erweiterungen |
AVR-ChipBASIC-32: Ein BASIC-programmierbarer Einchip-Computer mit ATMega32
V0.97 (c) 2006-2016 Jörg Wolfram 1 LizenzDas Programm unterliegt der GPL (GNU General Public Licence) Version 3 oder höher, jede Nutzung der Software/Informationen nonkonform zur GPL oder ausserhalb des Geltungsbereiches der GPL ist untersagt! Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, auch ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.2 Geschichte und FeaturesNachdem ich mich nach langer 8051'er Zeit mit den mit der AVR-Assemblerprogrammierung beschäftigt hatte, war es einfach Zeit, die Grenzen ein bisschen auszuloten.Herausgekommen ist dabei ein kleiner in einer Tiny-Basic sehr ähnlichen Sprache programmierbarer Computer mit umfangreichen Schnittstellen und Funktionen. Als Eingabegerät dient eine normale PS2-Computertastatur, als Ausgabegerät ein Fernsehgerät mit Scart-Eingang (Farbe) oder BAS-Eingang (Graustufen) oder auch verschiedene PAL-/NTSC-taugliche TFT-Displays.
3 Hard- und SoftwarekonzeptKernstück des Ganzen ist ein ATmega32, die restliche Hardware besteht im Wesentlichen aus passiven Bauelementen und Steckverbindern. Timer 1 ist für das Videotiming zuständig. Kanal A arbeitet als PWM und erzeugt den Zeilen-Synchronimpuls. Im CSYNC-Mode wird während des vertikalen Synchronimpulses die PWM so umkonfiguriert, dass der Ausgang invertiert wird.Kanal B von Timer 1 erzeugt den (Horizontal-) Videointerrupt. Dieser enthält eine Synchronisation auf den Timer, dadurch erzeugen auch EEPROM-Lesezugriffe mit 5 Takten CPU-Stop keine Bildstörungen. Timer 2 erzeugt PWM mit dem Audiosignal. Dieses wird entweder mit dem (Pseudo-)Zufallsgenerator oder per DDS mit Wavetable und Hüllkurve erzeugt. Entgegen den meisten anderen Lösungen ist die PS2-Tastatur and den USART des ATMega angeschlossen. Eine Nutzung externer Interrupts verbietet sich schon wegen des Videotimings, man kann zwar das Clock-Signal während der Bilddarstellung auf LOW ziehen und damit die Tastatur zum Warten verdonnern, aber nicht jede Tastatur schafft es, ein Datenpaket während der Austastlücke zu senden und bei NTSC klappt das Ganze dann aber gar nicht mehr, weil dort die Austastlücke noch kürzer ist. Die zweite Möglichkeit wäre die SPI-Schnittstelle, aber die ist dann auch belegt. Und gerade während der Entwicklungsphase ist es lästig, wenn man ständig die Tastatur abziehen und anstecken muss. Die Nutzung des USART hat hingegen den grossen Vorteil, dass alles automatisch geht und man nur noch das fertige Zeichen abholen muss. Wobei sich natürlich dann die Frage stellt "und was ist mit seriell?" Mit reduzierter Bitrate (1200Baud) lässt sich die serielle Schnittstelle im Horizontal-Interrupt mit zwei Portpins realisieren. Timerausgang von Timer 0 treibt eine Ladungspumpe, die ca. -4,7V für die serielle Schnittstelle bereitstellt, dadurch sind keine Spezialbausteine (MAX232 etc.) notwendig. Um Strom zu sparen, lässt sich diese Funktion auch per Software abschalten. Die parallele Schnittstelle wird über Port A realisiert (+2 Steuerleitungen aus Port B). Wenn keine Druckerschnittstelle benötigt wird, können die 8 Pins als Ein-/ oder Ausgang konfiguriert oder auch als Analogeingang genutzt werden. Die meisten Funktionen werden über die libmio Bibliothek realisiert, die sich auch für eigene Projekte verwenden lässt. Allerdings steht dort noch die Dokumentation aus. 4 Systemvoraussetzung HostDa fast alle I/O-Funktionen von der libmio bereitgestellt werden, sind zum Assemblieren avr_libmake (läuft nur unter Linux) und der AVRA-Assembler notwendig. Das Hex-File sollte sich auch unter anderen Betriebssystemen brennen lassen. Für die Funktionen der seriellen Schnittstelle sollte folgende eingestellt werden8 Bit --- 1200 Baud --- no Parity --- 1 Stopp-Bit 5 TastaturDie vorliegende Version benötigt entweder eine Tastatur mit deutschem oder US Layout, dies ist nicht umschaltbar sindern es muss die entsprechende Version geflasht werden (main_de.hex oder main_us.hex) Bei Bedarf kann ich auch das Programm an andere Tastaturbelegungen anpassen. "Das Beste aus allen Systemen" ist in den Tastenkombinationen wiederzufinden:
6 Der EditorDie Programme werden mit einem einfachen Fullscreen-Editor geschrieben. Ganz oben steht der Programmname. Sobald der Text verändert wird, erscheint in der oberen linken Ecke ein Stern. Die Position des Cursors wird durch ein invers blinkendes Zeichen dargestellt. Unten befindet sich eine farbige Statuszeile, in der z.B. Fehler angezeigt werden.
7 Das HauptmenüDas Hauptmenü wird nach jedem Reset angezeigt, ausser der RUN-Jumper ist gesetzt und das Programm startet automatisch,7.1 Die DateiauswahlDa zu den Programmen immer der Name mit abgespeichert wird, gibt es eine einfache Dateiauswahl. Mit den Cursortasten wird das Programm ausgewählt, ENTER startet die Aktion. Mit ESC gelangt man wieder zurück zum Hauptmenü.7.2 Das Default ProgrammEines von den 4 Programmen lässt sich im Menü als "Default" festlegen. Dieses dient als Vorauswahl in der Dateiauswahl (wird durch grünen Ball markiert) und ist auch das Programm, welches im AutoRun Modus automatisch gestartet wird. Die Auswahl wird im EEPROM gespeichert und geht beim Ausschalten nicht verloren.7.3 DateitransferAb Version 0.69 wird anstelle von X-Modem normale Textübertragung verwendet. Unter Windows kann man weiterhin das Hyperterminal verwenden (Text senden/aufzeichnen) verwenden, unter Linux minicom oder das Program chiptrans.pl im Examples-Ordner.7.3.1 Senden zum AVR
7.3.2 Empfangen vom AVR
8 Der MonitorAb Version 0.84 gibt es einen kleinen Monitor zum debuggen. Augerufen wird er mit der Taste F12 während des Programmlaufes oder mit einer BREAK-Anweisung im Programm.Danach folgt im linken Teil des Bildschirms die Anzeige aller Variablenwerte und rechts daneben der Stack. Jede FOR-Schleife und jedes CALL/XCALL erzeugt einen Eintrag auf dem Stack. Unter der Variablenliste wird der Status der parallelen Schnittstelle angezeigt. Zuerst die Pin-Nummern (1 entspricht D0), darunter die Datenrichtung (I oder O) und ganz unten der aktuelle Pegel. In der untersten Zeile stehen die möglichen Kommandos, der entsprechende Hotkey ist rot hinterlegt:
9 Changelog16.3.2007 Erste öffentliche Mega32-Version (0.84)
created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram |