Pong-Simulator für PC
von Wennichdasnochwüsste
Dieses
PC Programm bildet einen Teil der Pong-Hardware als Windows-Anwendung
nach. Wenn Sie selbst Anwendungen in „C“ mit WinAVR schreiben wollen,
ist es eine Hilfe um Ihre Ideen und grafische Konzepte auszuprobieren.
Entwickeln
und testen Sie Ihre Grafiken, C-Routinen und Animationen auf dem PC,
und sparen Sie sich damit ein ständiges Flashen des AVR.
Nachdem Sie Ihre Routinen fertig haben, übernehmen Sie diese in den GCC-Code.
Sie
benötigen die freie Version von Visual Studio C++ (Version 2005 mit
Platform SDK oder Version 2008), oder eine Professional Version ab
Visual Studio C++ Version 2005 um selbst im Pong-Simulator zu
entwickeln.
Das Projekt ist in der Datei „PongSimu.zip“.
Um
den Simulator erst einmal auszuprobieren, können Sie eine der
übersetzten EXE-Dateien „PongSimu-SimpleLoop.exe“, „PongSimu-Demo.exe“,
„PongSimu-Pong.exe“ oder „PongSimu-Gameoflife.exe“ starten. Der
Simulator führt keine Änderungen an Ihrem PC durch.
Der
Pong-Simulator bietet Ihnen das Display und die Potis. Es ist keine
Hardwareemulation des AVR. Interrupts und das reale Timing der Hardware
können nicht simuliert werden. Weitere auf der Platine vorhandene
Ein-/Ausgabeports werden in der jetzigen Version nicht simuliert, das
Programm könnte aber dazu erweitert werden.
Für Ihre Routinen
schreiben Sie in der Datei „avr-stuff.c“ eine Funktion RunAVR(). Diese
entspricht der main()-Funktion im Mikrocontroller.
Innerhalb der Funktion RunAVR() haben Sie durch die Routinen in „avr-stuff.h“ den Zugriff auf die simulierte Hardware.
Es stehen folgende Funktionen zur Verfügung:
- Setzen und Lesen einer LED der LED-Matrix (v=0 off, v=1 halbe Helligkeit, v=2 volle Helligkeit)
Dabei
werden Interrupt-Ansteuerroutinen der Matrix, die auch halbe Helligkeit
ermöglichen, angenommen (siehe mein Artikel „Der rotierende
Weihnachtsbaum“).
Ansonsten einfach nur Werte 0 und 2 verwenden.
void avrSetPixel(byte x, byte y, byte v);
byte avrGetPixel(byte x, byte y);
- Auffrischen der Windows-Darstellung (leider nötig, sollte nicht zu häufig aufgerufen werden)
void avrTriggerRepaint();
-
Test ob Thread von Windows beendet werden soll (leider nötig,
wenn Rückgabewert ungleich 0, sollte die Funktion RunAVR() zurückkehren)
byte avrEndRun();
- Lesen der simulierten Werte der Potis (0..1023)
uint avrGetLeftADC();
uint avrGetRightADC();
- Simulierte delay-Funktionen
void _delay_us(double __us);
void _delay_ms(double __ms);
- Funktion um Zeitmessungen zu simulieren, da in der Windows-Simulation keine Zeitinterrupts zur Verfügung stehen
uint ticks(void);
Im Original kann in der Datei „avr-stuff.c“ eine der folgende Funktionen aufgerufen werden (die anderen sind auskommentiert)
RunAVR_simpleLoop() – einfache Schleife zur Displayvisualisierung
RunAVR_demo() – mit den Knöpfen die LED Bänder steuern
RunAVR_pong() – Adaption des open source pong clone von Piotr Platek
RunAVR_Life() – Game of Life
Sehen Sie sich die Funktionen an, und Sie sehen schnell wie der Simulator arbeitet.
Ein paar Hinweise zum Programm:
Die Entwicklung erfolgte mit der freien Version von Visual Studio C++ 2005.
Das Programm ist in C++, die Dateien für den GCC mit AVR Code sind in C.
Jedoch
werden diese als C++ übersetzt (Einstellung pro Datei) damit
liebgewordene GCC Erweiterungen wie bool und local scope für Variablen
benutzt werden können.
Bitte beachten Sie daß Sie keine C++ Klassen und ähnliche Konstrukte verwenden können.
Um
halbwegs kompatibel zum GCC zu sein, sind in der Datei „avr-compat.h“
einige Definitionen und Macros für Visual Studio C++ enthalten, die der
Umgebung auf WinAVR entsprechen.
Auch ein Header für die Standard C99-Datentypen wird hier eingebunden.
Was
leider in Visual Studio C++ nicht geht sind binäre Konstanten, deshalb
müssen diese mit den Macros B8(), B16() geschrieben werden.
Wenn
Sie in den C-Präprozessoreinstellungen die Definition LANDSCAPE
entfernen, kann das Programm eine hochkant stehende Pong-Platine
simulieren.
Die Projekteinstellungen sind so gewählt daß keine weiteren DLLs benötigt werden.
Ordnerstruktur:
Freepong - Dateien des open source pong clone von Piotr Platek
Game of life - Dateien des Game of Life “Spiels”
Header Files – Header der Anwendung
Resouce Files – Bilder/Icons/Ressourcen der Anwendung
Source Files – C++ Dateien der Anwendung, avr-stuff.c Code für Simulator
Das Programm selbst ist Open-Source, sie können es beliebig erweitern.
Vergessen
Sie jedoch nicht, das dieses Programm den exakten Eindruck und den Spaß
mit der Arbeit mit der AVR Hardware nicht wiedergeben kann.
Ich wünsche Ihnen Happy Pong-ing ;-)
Download: 1003PongSimu.zip