Pong-Simulator für PC

von  Wennichdasnochwüsste

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller


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


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller