Projekt BASIC Beispiele |
AVR-CHIPBASIC: Ein BASIC-programmierbarer Einchip-Computer
V0.72 (c) 2006/2007 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 anderen verbreiteten 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 Nutzung des USART hat 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 --- 2 Stopp-Bits 5 TastaturDie vorliegende Version benötigt eine deutsche Tastatur, funktioniert aber auch mit der englischen, wobei man die deutsche Tastenbelegung kennen sollte ;-) 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 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ü.8 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.8.1 Senden zum AVR
8.2 Empfangen vom AVR
9 Changelog17.12.2006 Erste öffentliche Version (0.61)12.1.2007 Bugfixes und Erweiterungen (0.69)
created with latex2web.pl v0.61 © 2006-2010 Joerg Wolfram |