Proog

"Retro Ping Pong" ist ein Bausatz, mit dem man ein klassisches Ping Pong Spiel selbst zusammenlöten kann. Der Bausatz enthält eine bereits fertig bestückte Platine mit LED-Matrix und ATmega8 Mikrocontroller.

 

 

Mit zwei Potis steuert man den linken und rechten Schläger.  Neben den Potis ist noch der Batteriehalter anzulöten und schon kann es losgehen. Weitere Informationen zum Bausatz sowie der Schaltplan sind unter folgendem Link zu finden.

Das interessante an dem Bausatz ist der auf der Platine vorbereitete Platz für einen ISP-Anschluss. Man muss lediglich eine 2*3 Pin Stiftleiste einlöten und kann dann den Mikrocontroller mit eigenen Programmen bespielen, wenn man ein geeignetes Programmiergerät besitzt, zum Beispiel den AVR-ISP MKII.

Das folgende Programm demonstriert die Ansteuerung der LED-Matrix des Retro Ping Pong Spiels mittels EMTI Compiler.

Die zur Demonstration notwendigen Dateien stehen im Download-Bereich zur Verfügung (RPP-Demo0.zip).

Das Zip Archiv enthält folgende Dateien:

************************************
*** Hauptverzeichnis
************************************

EMTI Programm Quelltext, LED-Matrix Treiber und Demo-Programm.

DateiBeschreibung
librpp.txt Treiber für LED-Matrix des Ping Pong Spiels
rppDemo0.txt EMTI Demoprogramm Quelltext - Smiley und Herz
rppdemo0.asm

Vorcompiliertes Demoprogramm - Bei Änderungen am Quelltext (rppDemo0.txt) muss dies neu compiliert werden.

Achtung: hierfür wird der EMTI-Compiler benötigt, welcher als getrennter Download erhältlich ist.

************************************
*** Verzeichnis Graphics
************************************


Hilfsprogramm um eine Bitmap-Grafik in Programmcode umzuwandeln.

DateiBeschreibung
rppbmp.bas Quelltext des Konverters
rppbmp.exe Bitmap nach Quelltext Konverter
rppDemo.bmp Testbild
RPPDEMO.txt In Quelltext umgewandeltes Testbild
Convert.bat Batchdatei, ein Doppelklick startet die Konvertierung



************************************
*** Verzeichnis Foto_Video
************************************

Fotos der Retro Ping Pong Platine mit dem laufenden Demoprogramm.

 

 

Wie bekommt man nun ein Bild auf die LED-Matrix?

Um ein Bild in ein für den EMTI-Compiler taugliches Format umzuwandeln, kann man den Konverter "rppbmp.exe" verwenden (Siehe Unterverzeichnis Graphics).

In dem Verzeichnis liegt das Bild "rppDemo.bmp".

Der Konverter erzeugt aus dem Bild einen Programmquelltext, wobei jede Spalte des Bildes in einer Zeile abgelegt ist. Die Datei trägt den Namen RPPDEMO.txt, und dies sind die ersten Zeilen:

{codecitation}
    '
    ' BMP   :RPPDEMO
    ' width : 141
    ' height: 10
    '
    0b0001111000, ' ...****...
    0b0010000100, ' ..*....*..
    0b0100001010, ' .*....*.*.
    0b1001001001, ' *..*..*..*
    0b1010001001, ' *.*...*..*
    0b1010000001, ' *.*......*
    0b1010000001, ' *.*......*
    0b1010001001, ' *.*...*..*
    0b1001001001, ' *..*..*..*
    0b0100001010, ' .*....*.*.
    0b0010000100, ' ..*....*..
    0b0001111000, ' ...****...
    0b0000000000, ' ..........
    0b0000011100, ' .....***..
    0b0000100010, ' ....*...*.
    0b0001000001, ' ...*.....*
    0b0010000001, ' ..*......*
    0b0100000001, ' .*.......*
    0b1000000010, ' *.......*.
    0b0100000001, ' .*.......*
    0b0010000001, ' ..*......*
    0b0001000001, ' ...*.....*
    0b0000100010, ' ....*...*.
    0b0000011100, ' .....***..
    0b0000000000, ' ..........
{/codecitation}

Das Smiley und das Herz steht in den ersten Zeilen. Die LED-Matrix besteht aus 12*10 LEDs (12 Spalten, 10 Zeilen). Um das Bild vollständig zu füllen werden also 12 Zeilen des Quelltextes benötigt.

 

Im Quelltext des Demoprogramms sieht es dann so aus:

 

{codecitation}
Data.Int Smiley=
    0b0001111000, ' ...****...
    0b0010000100, ' ..*....*..
    0b0100001010, ' .*....*.*.
    0b1001001001, ' *..*..*..*
    0b1010001001, ' *.*...*..*
    0b1010000001, ' *.*......*
    0b1010000001, ' *.*......*
    0b1010001001, ' *.*...*..*
    0b1001001001, ' *..*..*..*
    0b0100001010, ' .*....*.*.
    0b0010000100, ' ..*....*..
    0b0001111000  ' ...****...


Data.Int Heart=
    0b0000011100, ' .....***..
    0b0000100010, ' ....*...*.
    0b0001000001, ' ...*.....*
    0b0010000001, ' ..*......*
    0b0100000001, ' .*.......*
    0b1000000010, ' *.......*.
    0b0100000001, ' .*.......*
    0b0010000001, ' ..*......*
    0b0001000001, ' ...*.....*
    0b0000100010, ' ....*...*.
    0b0000011100, ' .....***..
    0b0000000000  ' ..........
{/codecitation}

Beachten Sie, dass das Komma hinter der Binärzahl in der jeweils letzten Zeile des DATA-Arrays entfernt wurde.

 

Das folgende Unterprogramm zeigt ein Bild auf der LED-Matrix an, indem die Bitmap-Daten in den Bildspeicher kopiert werden. Zeilen 5 und 6 sorgen für eine kleine "Wischer-Animation", indem jede Spalte voll aufleuchtet (PingPong.Screen(b)=-1) und dann kurz gewartet wird (Delay.ms 20).

{codecitation}
Sub Show(Int pic)
 Byte b

 For b=0 to PingPong.MaxX
  PingPong.Screen(b)=-1
  Delay.ms 20
  PingPong.Screen(b)=Rom.Int(pic)
  pic++
  pic++
 Next b
EndSub
{/codecitation}

 

Das Unterprogramm Hello zeigt den Smiley und das Herz an, wobei nach jedem Bild zwei Sekunden Wartezeit eingefügt wird.

{codecitation}
Sub Hello
  Show(@Smiley)
  Delay.ms 2000
  Show(@Heart)
  Delay.ms 2000
EndSub
{/codecitation}

 

Das Hauptprogramm liegt zwischen "Begin" und "End". Zunächst wird der Treiber initialisiert. Dann wird die Subroutine "Hello" in einer Endlosschleife aufgerufen, so dass beide Bilder immer im Wechsel angezeigt werden.

{codecitation}
Begin
 PingPong.Init
 Repeat
  Hello
 Again
End
{/codecitation}

 

Die folgenden Fotos zeigen beide Bilder sowie die Wischer-Animation beim Wechsel zwischen den Bildern.

 

 

 

 

Ich wünsche viel Spaß beim Nachmachen.