Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten...

47
Technische Universit¨ at Berlin Fakult¨ at IV Elektrotechnik und Informatik Institut f¨ ur Energie- und Automatisierungstechnik Einsteinufer 17 10587 Berlin Praktikum Digitale Systeme“ NetX-Labor Airstick: All-Away Janis D¨ obler 220907 Serkan ¨ Onel 221030 Clemens Helfmeier 220909 Steven Herrschaft 206042 Neels Hofmeyr 230849 Marco Lehmann 302218 Antti Thiede 220899 Cornelius Wefelscheid 220673 Tilman Wekel 222481 Betreuer: Manuel Borchers SoSe 2007

Transcript of Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten...

Page 1: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Technische Universitat BerlinFakultat IV Elektrotechnik und InformatikInstitut fur Energie- und AutomatisierungstechnikEinsteinufer 1710587 Berlin

Praktikum”Digitale Systeme“

NetX-Labor

Airstick: All-Away

Janis Dobler 220907

Serkan Onel 221030Clemens Helfmeier 220909Steven Herrschaft 206042Neels Hofmeyr 230849Marco Lehmann 302218Antti Thiede 220899Cornelius Wefelscheid 220673Tilman Wekel 222481

Betreuer: Manuel Borchers

SoSe 2007

Page 2: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Inhaltsverzeichnis

1 Einleitung 41.1 Projektidee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Vorstellung der Projektgruppe . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Spielekonzept 52.1 Spiele und ihr Ursprung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Der Klassiker Pong . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.2 Breakout-Arkanoid-AlleyWay . . . . . . . . . . . . . . . . . . . . . 6

2.2 All-Away . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Spielelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3.1 Der Hintergrund / Spielaufbau . . . . . . . . . . . . . . . . . . . . 82.3.2 Der Schlager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.3 Der Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.4 Die Blocke (Boxen) . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4 Spielanleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Grafik 133.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Linie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4 Gefullte Rechtecke (filledBar) . . . . . . . . . . . . . . . . . . . . . . . . . 163.5 Ausfullen des gesamten Displays mit einer bestimmten Farbe . . . . . . . 163.6 Buchstaben, Zahlen und Sonderzeichen . . . . . . . . . . . . . . . . . . . . 163.7 Methoden pictureGet und pictureSet . . . . . . . . . . . . . . . . . . . . . 17

4 Sound 194.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.2 WAV-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3 Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.4 Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5 Joystick 215.1 Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.2 ATMEGA8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.3 Platinenlayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.3.1 Spannungsversorgung . . . . . . . . . . . . . . . . . . . . . . . . . 245.3.2 Hardwarerealisierung des Mausprotokolls . . . . . . . . . . . . . . 245.3.3 Das fertige Platinenlayout . . . . . . . . . . . . . . . . . . . . . . . 25

6 Maus Protokoll 266.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266.2 Maus Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2

Page 3: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

6.3.1 Senden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276.3.2 Empfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

7 Funkubertragung 307.1 Das Funkmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

7.1.1 Die SPI Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . 327.1.2 Implementierung auf dem Atmel . . . . . . . . . . . . . . . . . . . 337.1.3 Implementierung auf dem NetX . . . . . . . . . . . . . . . . . . . . 34

7.2 Die Initialisierung des RFM12 . . . . . . . . . . . . . . . . . . . . . . . . . 357.3 Das Datenubertragungsprotokoll . . . . . . . . . . . . . . . . . . . . . . . 35

7.3.1 Senden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.3.2 Empfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377.3.3 Interruptbetrieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.4 Probleme und mogliche Losungen . . . . . . . . . . . . . . . . . . . . . . . 38

8 Erweiterungsboard fur das NetX Board 398.1 Audio Ausgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

8.1.1 Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398.1.2 Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

8.2 Serielle Schnitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418.3 Funkmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428.4 Layout des Erweiterungsboards . . . . . . . . . . . . . . . . . . . . . . . . 438.5 Bestuckungsplan des Erweiterungsboards . . . . . . . . . . . . . . . . . . 43

9 Quellen 44

A Anhang 45A.1 Bauteilliste des Erweiterungsboards und Schaltplane . . . . . . . . . . . . 45

3

Page 4: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

1 Einleitung

1.1 Projektidee

Ziel war die Implementierung eines Spieleklassikers auf dem NetX-Controller, der einenOnBoard-Grafikcontroller mitbringt. Außerdem sollte ein Eingabecontroller, ahnlich demvon der ”Wii“-Spielekonsole bekannten, entworfen werden. In der ersten Ausbaustufesollte der Klassiker Pong implementiert werden. Dabei wurde nicht wie beim Klassikerauf Farben verzichtet, da der NetX einen RGB-Grafikcontroller mitbringt, der in unseremProjekt mit einem 640x480 Pixel Display ausgestattet ist. Ein weiteres Highlight ist der16bit Stereo-Sound.

1.2 Vorstellung der Projektgruppe

Das Projekt ist in folgende Untergruppen unterteilt:

Spielekonzept

Antti Thiede, Janis Dobler,

Grafik und Sound

Clemens Helfmeier, Serkan Onel

Game-Controller

Steven Herrschaft, Neels Hofmeyr

Mausprotokoll

Cornelius Wefelscheid, Tilman Wekel

Funkubertragung und Erweiterungsboard

Marco Lehmann

Projekt-Betreuer

Manuel Borchers

4

Page 5: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

2 Spielekonzept

Zur Realisierung des Projektes wurde ein einfaches Spiel benotigt, in welchen man eineSpiel-Steuerung ubernehmen kann. Geplant war ursprunglich die Programmierung desSpieles ”Pong“, da dieses Spiel sehr viele Moglichkeiten der Modifikation bietet. Im Laufeder Programmierung war es allerdings moglich, das Spiel soweit auszuweiten, dass mansogar Blocke ’abschießen’ konnte, die dann verschwunden sind. Folglich war das Spiel

”All-Away“ geboren.

2.1 Spiele und ihr Ursprung

Im folgendem Kapitel werden verschiede Spiele und ihre Herkunft vorgestellt, die fur dieEntwicklung des Spiels ”All-Away“ als Vorlage dienten.

2.1.1 Der Klassiker Pong

Atari veroffentlichte 1972 das Spiel ”Pong“, welches zum ersten popularen Videospielwurde. ”Das Spielprinzip von Pong ist simpel und ahnelt dem des Tischtennis: Ein Punkt(”Ball“) bewegt sich auf dem Bildschirm hin und her. Jeder der beiden Spieler steuerteinen senkrechten Strich (”Schlager“), den er mit einem Drehknopf (Paddle) nach obenund unten verschieben kann. Lasst man den ”Ball“ am ”Schlager“ vorbei, erhalt derGegner einen Punkt.“ [WikiPong]

Abbildung 1: Spielausschnitt aus Pong (Quelle: [Pong])

5

Page 6: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

2.1.2 Breakout-Arkanoid-AlleyWay

Eine der beruhmtesten Pong Variante, an der sich das Konzept ”All-Away“ stark ori-entiert, ist ”Breakout“, welches im Jahre 1976 von Atari erschien. Von Breakout gibtes zahlreiche Klone und wurde im Lauf der jahre immer wieder neu benannt: Alleyway(GameBoy), Arkanoid...Es handelt sich dabei um eine Solo-Spielvariante von Pong, bei dem man mit einemSchlager den Ball so lenken soll, dass der Ball bestimmte Blocke trifft, die sich am obe-ren Bildschirmrand befinden, und dadurch zerstort werden. Wenn der Schlager den Ballverpasst, verliert man ein Leben. Nachdem alle Leben verloren sind, ist auch dieses Spielverloren.Zu Beginn jedes Level werden Muster mit Hilfe der Blocke aufgebaut und ein Level giltals gewonnen, wenn der Spieler es schafft alle Blocke zu zerstoren. Danach kann dasnachste Level beginnen.

Abbildung 2: Spielausschnitt aus AlleyWay (Quelle: [AlleyWay])

6

Page 7: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

2.2 All-Away

Das Spiel ”All-Away“ ist nun dem Spiel ”AlleyWay“ nachempfunden. Zu Beginn des Spielstehen auf dem Spielfeld eine bestimmte Anzahl von Blocken. Mit Hilfe des Schlagersmuss man nun den Ball dazu bringen, diese Blocke abzuschießen. Das Spiel ist gewonnen,wenn alle Blocke verschwunden sind. Allerdings hat man auch hier nur eine begrenzteAnzahl von Leben, sodass man das Spiel auch verlieren kann.Im Gegensatz zur klassischen AlleyWay Variante, bei der der Schlager nur auf einer ver-tikalen Bahn am unter Bildschirmrand sich bewegen kann, kann der Schlager sich hierin einem bestimmten Bereich vollig frei in zwei Richtungsebenen (x und y) bewegen.Naheres dazu ist im Kapitel 2.3.1 beschrieben. Die Spielflache wurde ebenfalls verandert.

Abbildung 3: Spielaufbau (normales Level)

2.3 Spielelemente

Wenn man das Spiel stark vereinfacht besteht es aus folgenden Elementen: Schlager, Ballund Spielfeld (Blocke und Zahler). Folgende Abschnitte geben Aufschluss uber Program-mierung der verschieden Elemente des Spiels. Dabei wurden die Parameter der Elementeals Struktur zusammengefasst, um so recht einfach mehrere Elemente dieser Struktur zuerzeugen.

7

Page 8: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

2.3.1 Der Hintergrund / Spielaufbau

Wie bei einem Brettspiel ist es auch fur ein Videospiel wichtig, ein klares Spielfeld zubesitzen. Das Spielfeld fullt den Großteil des Bildschirms. In der oberen Zeile sieht manden Name des Spiels, den Lebens- und den Punktezahler. Das Spielfeld ist durch dreiBalken begrenzt. Die linke Seite ist offen (siehe Abbildung 3). Wenn der Ball diese Seiteverlasst, so wird ein Leben abgezogen. Das Spielfeld enthalt außerdem einen Bereich ausmehreren einmalig reflektierenden Blocken. Beim Treffen werden diese dunkel eingefarbtund sind nicht mehr reflektierend. Alternativ kann man diese naturlich auch ganzlich

”verschwinden“ lassen, in dem man ihre Farbe auf die des Hintergrundes setzt.

Abbildung 4: Spielfeld

Wie man in Grafik 4 sieht, ist das Spielfeld in drei Zonen unterteilt:

1. Der Ball verlasst die linke Spielfeldhalfte (rote Linie): Der Ball wird zuruckgesetztund ein Leben wird herabgesetzt

2. In dem Bereich zwischen roter und gruner Linie kann sich der Schlager bewegen.

3. In diesem Bereich werden Hindernisse plaziert; der Schlager kommt dort nicht hin.

benotigte Methoden von der Grafik-Gruppe

• filledScreen(): fullt den Bildschirm komplett in einer Farbe aus

• filledBar(): zeigt einen gefullten Balken (Box) an

• ellipse(): zeigt eine Ellipse an

• fontString(): zeigt einen Text an

• pictureSet(): zeichnen eines Bildausschnittes (siehe Abschnitt 3.7)

• pictureGet(): Bildausschnitt speichern (siehe Abschnitt 3.7)

8

Page 9: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Die Methoden pictureSet() und pictureGet() werden fur sich-bewegende Objekte (Schlagerund Ball) benotigt. Dabei wird, nachdem bereits vorab jeweils ein Bild mit pictureGet

”initalisiert“ wird, nach folgendem Ablauf verfahren:

1. pictureSet(): ”altes“ Ziel-Bild setzen

2. moveObject(): neue Koordinaten des Objektes berechnen

3. pictureGet(): ”neues“ Ziel-Bild speichern

4. showObject(): Objekt an den neuen Koordinaten anzeigen

Die Methoden der ”Bildausschnittsspeicherung“ sind notwendig, da man nicht wie beiden Lebens- und Punkte-Zahlern einfach mit der Hintergrundfarbe ubermalen kann, daz.B. beim Ball es unterschiedliche Hintergrundfarben (Hintergrund und Box-Farben) ge-ben kann. Des weiteren lasst sich so auch ein Text in den Hintergrund schreiben, derdann nicht einfach ubermalt wird. Naheres dazu wird auch im Kapitel 3.7 erlautert.

Methoden fur den abzuschießenden Block

• autoSetBox(): fullt ein Feld mit Boxen mit der Eigenschaft ”einmalig reflektie-rend“.

• autoSetChar(): setzt einmalig reflektierende Boxen in Form eines Buchstabensan eine gewunschte Stelle

• autoSetString(): setzt ein Wort mit Boxen in Form des Wortes an eine Stelle

Das Spielfeld wird dann mittels o.g. Methoden aufgebaut und angezeigt.

2.3.2 Der Schlager

Zum Spielen ist ebenfalls ein Schlager notwendig. Der Schlager ist das einzigste Element,das der Spieler aktive durch Bewegung des Game-Controllers beeinflußen kann. Dieserwird als rechteckige Box dargestellt.

Parameter

• Koordinaten x,y

• Maße: w,h

• Bewegungsrichtungen dx, dy

• Farbe col

9

Page 10: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Methoden

• anzeigen: showRac(); showRacColor();

• bewegen: moveRac();

• Bereich einhalten: racReflex();

• Position setzen: resetRacPos(); setRacPos();

• Maße einstellen: setWandH();

• Bewegungsvektor setzen: setRacVelo();

• Farbe setzen: setRacColor();

benotigte Methoden von der Mouse-Gruppe

• Bewegungs-Daten von der Maus erhalten: get X(), get Y()

• Knopfdruck-Daten v.d. Maus erhalten: get btn l() , get btn r()

Sobald der Game-Controller bewegt wird, erhalt man von den Methoden get X, get Yvon 0 verschiedene Werte. Diese werden fur die Bewegung des Schlagers benotigt und inden entsprechenden Parametern dx, dy gespeichert. Sie werden in der Methode moveR-ac() auf die aktuelle Position des Schlagers addiert.

2.3.3 Der Ball

Fur die Spiele ist ein Ball notwendig, der dann die Blocke abschießt. Bei dem Ball handeltes sich um einen passives Element welches der Spieler durch den Schlager beeinflussenkann. Der Ball wird durch eine Ellipse bzw. einem Kreis dargestellt.

Parameter

• Koordinaten x,y

• Radius r

• Bewegungsrichtungen mx, my

• Farbe col

Methoden

• anzeigen: showBall(); showBallColor();

• bewegen: moveBall();

• Reflexion: ballReflex(); ballReflexRac();

• Position setzen: resetBallPos(); setBallPos();

• Farbe setzen: setBallColor();

• Bewegungsvektor setzen: setBallVelo();

10

Page 11: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Der Ball erhalt eine Anfangsrichtung, die in jedem Schritt auf die aktuelle Position desBalles aufaddiert wird. Beim Reflektieren am Schlager kann sich die Bewegungsrichtungvom Betrag her andern, sodass der Ball schneller oder langsamer wird.

2.3.4 Die Blocke (Boxen)

Zum Abschießen der Blocke (Boxen) erhalten diese zusatzlich eine Eigenschafts-Variable,die entsprechend eingstellt wird.

Parameter

• Start-Koordinaten (oben-linke) x1,y1

• Ziel-Koordinaten (unten-rechts) x2,y2

• Farbe col

• Eigenschaft prop

ReflexionBei der Reflexion muss man zwei Falle betrachten: Die Reflexion an einer Box und dieReflexion am Schlager, wobei der Schlager als sichbewegende Box aufgefasst werdenkann.Bei einer Box wird bei einer Reflexion nur die Bewegungsrichtung je nach Einfallsrich-tung umgekehrt. Bei der Reflexion am Schlager wird zusatzlich noch ein Anteil derBewegungsrichtung des Schlagers auf die des Balles aufaddiert. Außerdem wird bei derReflexion, je nach Eigenschaft, ein Sound abgespielt.

Abbildung 5: Reflexionen

Reflexionsebene vorher nachherhorizontal mx , my mx , -myvertikal mx , my - mx , my

11

Page 12: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

In der Reflexionsbedingung des Balles wird die Eigenschaft der Box abgefragt. Dabei wirdder Ball je nach Eigenschaft nicht reflektiert, immer reflektiert oder einmalig reflektiert.Die Farbe der Box kann sich ebenfalls noch dabei andern.

prop 0 1 2 3Aktion keine Reflexion Reflexion einmalige Reflexion Farbanderung bei Reflexion

2.4 Spielanleitung

Nachdem das Spiel in den NetX geladen und gestartet wurde, kann man sich zwischendem normalen und einem einfachen Level per Knopfdruck (links oder rechts) entschei-den. Im normalen Level kann man Blocke in Form eines oder mehrerer Buchstaben (z.B.

”TU“) abschießen, wahrend man im leichten Level nur wenige Blocke aus einem großenFeld abschießen muss.Der Ball bewegt sich automatisch. Der Schlager muss durch Bewegung des ”Airstick“ -Controllers bewegt werden. Dabei sollte man keine hektischen Bewegungen machen. Esreichen ruhige Bewegungen aus um den Schlager zu steuern.Wahrend des Spiels kann durch Betatigen des linken Knopfes eine Pause einlegen, welcheman mit dem rechten wieder aufheben kann.Ziel des Spieles ist es, alle Blocke abzuschießen. Das Spiel endet, wenn man alle Lebenverloren oder alle Blocke abgeschossen hat. Danach sieht man den entsprechenden Bild-schirm ”Game Over“ bzw. ”Gewonnen“. Anschließend kann man das Spiel neustarten,bzw. sich vorher noch die ”Credits“ (Namensliste der Projektteilnehmer) anschauen.Danach kommt man erneut zum Auswahlbildschirm zuruck.

12

Page 13: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

3 Grafik

3.1 Einleitung

In diesem Kapitel soll kurz erlautert werden, welche graphischen Objekte fur das Spiel’All-Away’ programmiert wurden und wie sie dabei umgesetzt wurden.

3.2 Linie

Als Linie bezeichnet man eine gerade Verbindung zwischen zwei Punkten. Die Liniestellt ein wesentliches Grundelement fur die Spieleprogrammierung dar. Das Display istahnlich aufgebaut wie in Abbildung 6. Die einzelnen Quadrate sollen die Koordinatenfur die Pixel auf dem Display darstellen.

Abbildung 6: Rastergrafik

Um nun eine Linie auf dem Display anzeigen zu lassen, mussen also Anfangspunkt (x1,y1)und Endpunkt (x2,y2) der Linie als Koordinaten gegeben sein.

Die Linie in Abbildung 7 ist sehr steil. Sie hat den Anfangspunkt bei (1,0) und endetbei (3,3). Aufgrund der Steilheit der Linie hier bietet sich an, eine y-Schleife zu nutzen,um fur jedes y in der entsprechenden Stelle x einen Punkt zu setzen.

13

Page 14: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 7: Rastergrafik mit einer steilen vertikalen Linie

Um diese Idee als Programm umzusetzen, musste wie folgt programmiert werden :

void Line ( i n t x1 , i n t y1 , i n t x2 , i n t y2 , i n t c o l o r )

i n t y ;f l o a t x , m;

m = f l o a t ( x2−x1 ) / f l o a t ( y2−y1 ) ;x = x1 ;

f o r ( y = y1 ; y <= y2 ; y++)

WritePixe l ( i n t ( x+0.5 f ) , y , c o l o r ) ;x = x + m;

Doch leider ist das ganze uneffektiv und ’frisst’ an Rechenzeit. Deshalb musste schnelleine neue Variante her, die zwar die gleiche Grundidee ausfuhrt, aber noch schneller ist.

Die hier umgesetzte Variante enthalt als ersten Schritt eine Fallunterscheidung, um anRechenzeit zu sparen.Dabei stellt die Methode fest, ob es sich bei den angegebenen Koordinaten um einevertikale Linie, eine horizontale Linie oder um einen Punkt handelt. Je nachdem wiedie Linie ausgerichtet ist, wird eine entsprechende Schleife gebildet, um die Linie mitmoglichst wenig Rechenzeit zu zeichnen.Bei einer vertikalen Linie wird eine y-Schleife genutzt, um fur jedes y in der entspre-chenden Stelle x einen Pixel zu setzen. Das ganze gilt analog ebenso fur die horizontale

14

Page 15: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Linie, wobei da eine x-Schleife benutzt wird.Außerdem wird in der optimierten Version eine veranderte Festkomma-Arithmetik ange-wendet. D.h. man codiert Festkommazahlen in eine einzige Integer-Zahl, wobei sie sowohlden Vorkomma- als auch den Nachkommateil enthalt. Dabei dienen die hoherwertigenBits als Vorkommastellen und die niederwertigen Bits als Nachkommastellen. Bit 10wurde zum Beispiel eine 0,5 darstellen, Bit 9 eine 0,25 reprasentieren.Durch das Hin-und-Her-’Shiften’ fuhrt man dann die Multiplikationen und Divisionenaus ohne wesentlich an Rechenzeit zu verlieren.

3.3 Ellipse

Abbildung 8: Ellipse

Eine Ellipse ist ein geometrisches Objekt und lasst sich eindeutig mit Hilfe verschiedenerParameter (siehe Abbildung 8) beschreiben :

- Den Mittelpunkt (x,y)- Radius der Langsachse a- Radius der Querachse b

Mathematisch beschrieben wird die Ellipse durch folgende Ellipsengleichungen:

x = x0 + a · cos(t)

y = y0 + b · sin(t)

t ∈ [0, 2π]

Der Ellipsenmethode werden der Mittelpunkt (x,y), Radius der Langsachse a, Radiusder Querachse b und der Start- und Endpunkt ubergeben. Die Methode errechnet nun

15

Page 16: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

mittels der Gleichungen oben die Ellipse. Dabei sind neun cos-Werte in Form einerTabelle niedergeschrieben. Die sin-Werte entnimmt die Methode aus der gleichen Tabelle,berucksichtigt aber, dass der Sinus um 90° Phasenverschoben ist und dann an der x-Achsenoch gespiegelt werden muss.Die Tabelle dient zum Sparen von Rechenzeit, da der Rechner nur noch die errechnetenWerte ubernimmt und nicht extra rechnen muss.Anschließend werden die Punkte mit Hilfe der line Methode also durch Zeichnung vonLinien miteinander verbunden und die Ellipse erscheint dann auf dem Display.

3.4 Gefullte Rechtecke (filledBar)

Gefullte Rechtecke konnten auf verschiedenen Arten auf dem Display erzeugt werden.Man ruft:1. fur jeden Pixel die Methode setPixel auf,2. die Methode linehorz fur jede Zeile auf oder3. die Methode linevert fur jede Spalte auf.

Der Aufwand lasst sich aber weiter optimieren, da die Pixelposition immer neu berechnetwerden muss. Die waagerechten Linien stehen direkt hintereinander bereits im Speicher.Deshalb mussen diese nicht immer wieder neu berechnet werden. In der Methode filled-Bar wird deshalb der Code memSet verwendet, da dieser bereits optimiert ist. Schließlichhatte man auch zwei for-Schleifen und setPixel nutzen konnen, allerdings hatte dies beider Compiler-Ubersetzung evtl. nicht zu einem bestmoglichen Ergebnis gefuhrt.

3.5 Ausfullen des gesamten Displays mit einer bestimmten Farbe

Das Ausfullen des gesamten Displays mit einer bestimmten Farbe geschieht durch dieMethode filledScreen.Sie bildet einfach ein Rechteck mit Hilfe der Methode filledBar, wobei die maximalenWerte des Displays in der Horizontalen (640) und in der Vertikalen (480) eingetragenwerden. Damit erreicht man ein Loschen des Displayinhalts.

3.6 Buchstaben, Zahlen und Sonderzeichen

Auf dem Display lassen sich neben den geometrischen Objekten auch Buchstaben, Zah-len und Sonderzeichen darstellen.Zu den Buchstaben gehoren die 26 Buchstaben des Alphabets (zusatzlich mit A,O,U).Zu den Sonderzeichen gehoren: Ausrufezeichen, Punkt, Fragezeichen und Bindestrich.Außerdem ist es moglich mit allen gegebenen Zeichen, Worter und Satze zu schreibenohne fur jeden Buchstaben des Wortes die Koordinaten auf dem Display anzugeben.Dies geschieht mit Hilfe der Methode fontString.

16

Page 17: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Daneben hat man die Moglichkeit die Zeichen zu Skalieren und je nach dem die gewunschteFarbe anzugeben.

Bei der Programmierung wurden die Zeichen durch Setzen der Bits auf eins an der ent-sprechenden Stelle gezeichnet, wobei 16 Bits pro Zeile verwendet wurden und es 24 Zeilengibt.Das folgende Beispiel verdeutlicht dies:

CLINE( 00000000 ,00000000 ) ,CLINE( 00000000 ,00000000 ) ,CLINE( 00001111 ,11110000 ) ,CLINE( 00011111 ,11111000 ) ,CLINE( 00110000 ,00001100 ) ,CLINE( 01100000 ,00000110 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11111111 ,11111111 ) ,CLINE( 11111111 ,11111111 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 11000000 ,00000011 ) ,CLINE( 00000000 ,00000000 ) ,CLINE( 00000000 ,00000000 ) , ,

Alle Zeichen sind in einem Array untergebracht. D.h. jedes Zeichen hat darin seinenbestimmten Platz. Somit muss beim Aufruf des Zeichens, die Methode auf die entspre-chende Stelle zugreifen.

3.7 Methoden pictureGet und pictureSet

Um die Bewegung des Balles wie in Abbildung 9 zu realisieren, wurden die beiden Me-thoden pictureGet und pictureSet programmiert.Damit der Ball von A nach B kommt, muss der Ball erst einmal im Punkt A kopiert

17

Page 18: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 9: Bewegung des Balles

werden, auf den Punkt B gesetzt werden und im Anschluss im Punkt A ausgeschnittenwerden, damit seine alte Position nicht mehr sichtbar ist.Dabei schreibt pictureGet einen Bildausschnitt in den Speicher und picuteSet den Spei-cherinhalt in den Graphic-Buffer.

Um die Animationen (z.B. Bewegung des Balles) noch flussiger zu gestalten, wurde einsogenannter ’Double Buffer’ realisiert.Double Buffer bedeutet, dass der Bildspeicher doppelt vorhanden bzw. der Framebufferunterteilt ist. Dadurch kann das nachste Bild einer Animation im ”unsichtbaren“ Hinter-grund erstellt und aufgebaut werden (dst = destination). Wenn der Frame angefordertwird, schaltet die aktuelle Bildschirmanzeige (src = source) schlagartig auf dieses Bildum (hw lcd switch) und auf der ’alten Seite’ wird das nachste Bild vorbereitet. Dabeiwerden die Zeiger src und dst auf die Speicherinhalte bei der Methode hw lcd switchausgetauscht. So sehen Animationen wesentlich flussiger aus als beim einfachen Single-Buffer-Betrieb.

18

Page 19: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

4 Sound

Die Implementation von Sound auf dem NetX Board wurde wie folgt vorgenommen.

4.1 Hardware

Ein IO-Prozessor wird so programmiert, dass er an einem vorgegeben Ausgangspindes NetX ein pulsweitenmoduliertes Signal ausgibt, das im Mittel eine Spannung vonV DD/2 hat. Weiterhin entspricht das ausgegebene Signal nach einer Tiefpassfilterungdem Audiosignal, welches abgespielt werden soll.

Extern wird an den IO-Pin nun ein Tiefpass und ein Verstarker angeschlossen, so dassdas erzeugte Signal in den Eingang eines Lautsprechersystems gegeben werden kann(beispielsweise Aktivboxen). Die genannten Komponenten waren schon vorhanden. DasProgramm fur den IO-Prozessor wurde von der Firma Hilscher SOC bereitgestellt.

4.2 WAV-Dateien

Damit nun Soundfiles abgespielt werden konnen, mussen diese an den IO-Prozessor gege-ben werden. Dazu ist zu Beginn notig, die Daten in den NetX zu kopieren. Dies geschiehtmithilfe des normalen Linkprozesses:

Die als Wav-Dateien (*.wav) vorliegenden Daten werden mithilfe des Tools objcopy indas Objektformat (*.o) konvertiert. Die erzeugten Objektdateien enthalten anschließendeine Sektion .text, welche die Daten enthalt. Weiterhin sind Symbole fur Große, Anfangund Ende der Daten definiert worden. Die Namen der Symbole enthalten den gesamtenPfad und Dateinamen der Wav-Datei, so dass es keine Kollision bei mehreren Dateiengibt.

Die Konvertierung wird fur jedes Soundfile einzeln vorgenommen. Zur automatischenKonvertierung ist ein Makefile erstellt worden, welches den korrekten Aufruf des Toolsobjcopy vornimmt. Das Makefile wird in Eclipse als zusatzlicher Befehl in den Projek-teigenschaften angegeben. In dem Makefile mussen alle Soundfiles aufgelistet sein.

Das Linkerscript musste nun so angepasst werden, dass es die erzeugten Objektdateienmit verlinkt. Hierzu sind hinter dem Einbinden der normalen Programmtexte in die .text-Section je zwei Zeilen fur alle Soundfiles notig. Die erste Zeile erzeugt eine Addresse, die4-Byte-orientiert ist, die zweite Zeile bindet dann nach dieser 4-Byte-orientierten Ad-dresse die entsprechende Datei ein. Das zusatzliche Anordnen der Dateien ist notig, dadie binaren Daten aus der Objektdatei keine spezifische Anordnung verlangen, spaterim Programm aber uber Befehle gelesen werden sollen, die die 4-Byte-Orientierungbenotigen.

19

Page 20: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

4.3 Programmcode

Zunachst war es erforderlich, den IO-Prozessor zu programmieren. Dafur stellte HilscherSOC die benotigten Routinen und den Programmcode fur den IO-Prozessor bereit. Diesewerden in der Initialisierungsfunktion aufgerufen.

Wenn ein Sound abgespielt werden soll, muss dem IO-Prozessor die Addresse und dieLange der Daten mitgeteilt werden. Weiterhin muss die Zahl der Kanale (Stereo oderMono) eingestellt werden. Dies geschieht in der playSound -Funktion. Die Lange desSounds und die Zahl der Kanale werden direkt aus den Kopfdaten der Wav-Datei gelesen.Dies ist moglich, da das objcopy-Tool nicht nur die Daten selbst sondern auch noch dieentsprechenden Container dazu in die Objektdatei kopiert hat.

Der playSound -Funktion muss demnach nur die Addresse der Wav-Datei im Speicherubergeben. Diese wurde vom objcopy-Tool wie in Kapitel 4.2 beschrieben in ein Symbolgeschrieben. Der Name des Symbols enthalt den gesamten Pfad, Dateinamen, Ereweite-rung und den Zusatz ”start”. Um nun nicht bei jedem Aufruf der playSound -Funktionden gesamten langen Namen des Symbols angeben zu mussen, wurde in der HeaderdateilibSound.h ein Makro dafur erzeugt. Weiterhin wurde dort die Deklaration des Symbolsals ”extern” vorgenommen.

Um das einfachere Zugreifen auf die Informationen im Kopf der Sounddaten in derplaySound -Funktion zu ermoglichen, wurde ein Datentyp deklariert, der den einzelnenFeldern des Wav-Kopfes entsprechende Namen gibt. Die Soundsymbole wurde dann alsObjekte dieses Typs deklariert.

4.4 Schnittstellen

Aus den zuvor erlauterten Implementierungsdetails der Soundroutinen gehen folgendeSchnittstellen fur die Kommunikation vom Hauptprogramm aus:

• Es muss ein Headerdatei eingebunden werden, welche Makros fur alle Sounds er-zeugt und die Protoypen fur die Funktionen deklariert (libSound.h).

• Bevor das Soundmodul verwendet werden kann, muss die Initialisierungsfunktionaufgerufen werden.

• Zum abspielen eines Sounds wird zum gegebenen Zeitpunkt die playSound -Funktionmit dem entsprechenden Namen des Sounds als Parameter aufgerufen.

20

Page 21: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

5 Joystick

Zur Steuerung des Spiels realisieren wir einen Joystick, der in der Lage ist, schnurlosuber eine Funkverbindung mit der Konsole zu kommunizieren. Der prinzipielle Aufbaudes Joysticks ist in folgene Teilkategorien aufgeteilt:

• Sensor

• Atmega8

• Mausprotokoll

• Funkmodul

• Platinenlayout

Sowohl dem Mausprotokoll als auch dem Funkmodul werden in diesem Bericht jeweilsein extra Kapitel gewidmet.

5.1 Sensor

Bei den Sensoren handelt es sich um drei Beschleunigungssensoren der Firma Freescale,ehemals Motorola. Fur die x- und y-Achse wurde der Typ MMA2260 verwendet. UmAuslenkungen in der z-Ebene erfassen zu konnen, bedienen wir uns des Typs MMA1260.Beide Typen arbeiten im Bereich von ± 1.5g. Abbildung 10 verdeutlicht die Anordnungder Sensoren im Joystick und deren damit verbundenen moglichen Messbereiche bzgl.der Erdbeschleunigung.Abhangig von der Auslenkung der Sensoren, ergeben sich so bei einer Betriebsspannungvon 5V, Ausgangsspannung zwischen 0.7V bei -1.5g bis 4.3V fur +1.5g. Befinden sichdie Sensoren in Ruhelage so entspricht dies einer Spannung von 2.5V.

Abbildung 10: Beschleunigungssensoren

21

Page 22: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

5.2 ATMEGA8

Der ATMEGA8 ist ein 8-bit RISC AVR Mikroprozessor von der Firma ATMEL, der miteinem PC und einfacher Hardware komfortabel programmiert werden kann.

Wir nutzen ihn als zentrales Stuck der Controller-Elektronik: Der Atmega8 liest laufenduber drei ADC Kanale die Beschleunigungssensoren aus. Ebenfalls werden drei Druck-knopfe uber I/O Pins ausgelesen. Die Beschleunigungswerte und Knopfaktivitaten wer-den dann in das Maus-Protokoll verpackt und uber sowohl die UART (serielles Kabel)als auch an das Funkmodul gesendet (fur die kabellose Ubertragung).

Der Programmablauf sieht dabei so aus:

• Mit der sogenannten Free-Running Conversion wird der ADC standig ausgelesen.Dabei lost der Atmega8 nach jedem Abschluss einer AD-Wandlung einen Interruptaus. Allerdings kann jeweils nur ein ADC-Kanal auf einmal ausgelesen werden,weshalb unsere ADC-Interrupt-Routine den gerade gelesenen Wert in einem Zwi-schenpuffer ablegt und den ADC auf den jeweils nachsten Kanal umkonfiguriert.So stehen hinreichend genau zu jedem Zeitpunkt die Beschleunigungsdaten fur alledrei raumlichen Achsen im Zwischenpuffer zur Verfugung. Die drei ADC-Kanalewerden in einem Takt im Hunderter-Kilohertz-Bereich ausgelesen (abhangig vonder Atmega8 Taktung - bei 4 MHz Systemtakt werden die drei Kanale etwa 125000mal pro Sekunde ausgelesen).

• Im Hauptprogramm lauft dann eine endlose Schleife, die die folgenden Aufgabenubernimmt:

• Die Druckknopfe werden gepollt (und entprellt).

• Mit jedem Schleifendurchlauf wird ein Datenpaket mit Beschleunigungs- und Knopfdruck-Daten sowohl uber die UART, ...

• als auch uber das Funkmodul gesendet. Das Funkmodul wird uber I/O Pins unddas universelle serielle Interface des Atmega8 angesteuert.

22

Page 23: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Eine besondere Funktion des Controllers ist die Moglichkeit, ihn am PC als regulareserielle Maus zu nutzen. Damit der Controller als Maus erkannt wird, muss er eigentlichauf Anfrage eine Geratekennung versenden – in unserem Falle die Zeichenkette ”MZ”.Allerdings lauft die Anfrage nach einer Kennung uber die RTS/CTS Leitungen, welchewir fur den sonstigen Betrieb nicht benotigen und deshalb gar nicht am Atmega8 an-geschlossen haben. Stattdessen lassen wir den Controller einfach nach einem Neustarteine Zeit lang laufend ”MZ”Kennungen senden. Meist funktioniert die Erkennung amPC dann auf Anhieb.

5.3 Platinenlayout

Ziel ist es nun sowohl die Beschleunigungssensoren, den Microcontroller Atmega8, dasFunkmodul, die notwendige Hardware zur Realisierung des Mausprotokolls und eineentsprechende Spannungsversorgung auf einer Platine so unterzubringen, das diese ineinen WingMan Extreme Joystick der Firma Logitech, siehe Abbildung 11 jedoch ohneFuß, zu integrieren ist.

Abbildung 11: WingMan Extreme

Aus diesem Grund sind alle Gewahlten Baugruppen, abgesehen vom Funkmodul, alsSMD-Variante zu wahlen. Die Abmaße des Joysticks sind aus Abbildung 12 zu entneh-men.

23

Page 24: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 12: Abmasse des Wingman Extreme Joysticks

5.3.1 Spannungsversorgung

Die Umsetzung der Spannungsversorgung stellte keine großen Probleme dar. Da alleKomponenten mit einer Versorgungsspannung von 5V arbeiten, beschlossen wir einenSpannungsregler des Typs 78L05 fur unsere Zwecke zu verwenden.

5.3.2 Hardwarerealisierung des Mausprotokolls

Um die UART mit dem seriellen Port des PCs zu verbinden verwenden wir den Maxim232Spannungswandler. Die Außenbeschaltung benotigt lediglich vier Kondensatoren undbildet damit eine zuverlassige und bauteilsparende Umsetzung.

24

Page 25: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

5.3.3 Das fertige Platinenlayout

Abbildung 13: Platinenlayout des Controllers

Das Endergebnis ist eine 3cm x 5,7cm große Platine welche in Abbildung 13 zu sehen ist.Man kann erkennen, dass keine Pins verwendet wurden. Dies liegt unter anderem daran,dass eine solche Verwendung die maximal zulassige Hohe des Innenraum des Joysticksuberschreiten wurde. Vorallem aber kommt die vorgesehene zusatzliche Herausfuhrungder Funkmodulkomponenten, welche fur Debugzwecke dienen sollte, nicht zum Einsatz,da das Funkmodul in seiner dafur vorgesehenen Fassung uneingeschrankt funktioniert.

25

Page 26: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

6 Maus Protokoll

6.1 Einleitung

Unsere Aufgabe war es, eine moglichst effektive Kommunikation zwischen dem Controllerund dem Spielcomputer zu ermoglichen. Um das gesamte System und dessen Kompo-nenten kompatibel und austauschbar gegenuber vorhandenen Technologien zu machen,haben wir uns fur die serielle UART Ubertragung entschieden. Das Kommunikations-protokoll entspricht dem einer gewohnlichen Com Port Maus mit 3 Tasten und einemScroll Rad. Das Protokoll ist recht einfach aufgebaut und fur unsere Zwecke vollkommenausreichend. Diese Technik erlaubte uns, eine handelsubliche Com Port Maus an denSpielcomputer anzuschließen bzw. den Controller als PC Eingabegerat zu nutzen. UnserSystem bestand im wesentlichen aus zwei Komponenten. Der Sendeteil wurde auf einemAtmel implementiert wahrenddessen der Empfang auf dem NetX Board geregelt wurde.Im folgenden wird zunachst die PC Mauskommunikation erlautert. Anschließend werdendie einzelnen Systemkomponenten genau beschrieben.

6.2 Maus Protokoll

Zur Ubertragung des Maus Protokolls konnen verschiedene Schnittstellen verwendet wer-den, die sich uber die Zeit veranderten. Die allerersten Mause wurden uber ein BusmouseAnschluss betrieben. Dieses Protokoll war jedoch nicht standardisiert und wurde deshalbabgelost von einem Protokoll, welches am Seriellen Port(RS232) des Computer betriebenwurde. Dieses Verfahren hat uber lange Zeit die Maus dominiert. Heutzutage findet manlediglich noch PS2 oder USB.Wir haben uns fur die RS232 Schnittstelle entschieden, da diese gut zu debuggen ist undgleichzeit die Anbindung an das Funkmodul moglich macht. Da es schon bei seriellenMausen verschiedene Typen gab, gibt es naturlich auch verschiedene Protokolle, die sichjedoch sehr ahnlich sind. Alle Protokolle haben gemeinsam dass sie mit 1200 Baud, 7 Bit,1 Stop Bit, No Parity ubertragen werden. Im Protokoll stehen jeweils die Veranderungenin X,Y und Z (Scrollrad) Richtung zum vorherigen Packet drin. Die Buttons werden nurals Status ubermittelt, also 1 fur gedruckt und 0 fur nicht gedruckt.Fur uns von Bedeutung waren die Protokolle M (Microsoft protocol, 2 buttons) M3(Extended Microsoft protocol, 3 buttons) und MZ (Extended Microsoft protocol, mousewheel mode), da wir verschiedene Serielle Mause zum Testen hatten.Um die Maus unter Windows am Computer zu erkennen wird von Windows aus bei derHardware Erkennung die RTS Leitung fur ca 100 - 200ms auf low gezogen, dass lost beider Maus einen Reset aus und die Maus sendet ihre ID (M, M3 oder MZ).Damit wir alle Richtungen der beschleunigungs Sensoren an den NetX weiter gebenkonnen, haben wir das MZ Protokoll verwendet. Nach einer Vorverarbeitung werden dieeinzelnen Komponenten in X,Y und Z Richtung in das Maus Protokoll geschrieben. Die

26

Page 27: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Tasten hingegen benotigen keine Vorverarbeitung.

Tabelle 1: MBit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Byte1 1 L R Y7 Y6 X7 X6Byte2 0 X5 X4 X3 X2 X1 X0Byte3 0 Y5 Y4 Y3 Y2 Y1 Y0

Tabelle 2: M3Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Byte1 1 L R Y7 Y6 X7 X6Byte2 0 X5 X4 X3 X2 X1 X0Byte3 0 Y5 Y4 Y3 Y2 Y1 Y0Byte4 0 M 0 0 0 0 0

Tabelle 3: MZBit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Byte1 1 L R Y7 Y6 X7 X6Byte2 0 X5 X4 X3 X2 X1 X0Byte3 0 Y5 Y4 Y3 Y2 Y1 Y0Byte4 0 0 M Z3 Z2 Z1 Z0

6.3 Implementation

6.3.1 Senden

UeberblickUm die bereits erwahnte Kompatibilitat zu einem gewohnlichen PC zu gewahrleistenwird vor dem Sendevorgang eine Initialisierungsmethode aufgerufen. Zunachst werdendie Daten aus den Beschleunigungssensoren geeignet vor verarbeitet. Anschließend wer-den die Mauspakete auf der Bit Ebene zusammengesetzt und in einem festen Zeitintervallverschickt.

27

Page 28: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

InitialisierungDie Initialisierung ist ausschließlich fur den Betrieb als PC Eingabegerat und wird amNetX einfach ignoriert. Die Methode wird nach jedem Reset bzw. Starts des Atmelsaufgerufen und sendet fur einige Sekunden die Plug n Play Kennung ”MZ”. In diesemZeitraum kann der Controller von der Windows Gerateerkennung als normale Micro-soft Maus erkannt werden. Der Controller ist nun als ganz gewohnliches Eingabegeratbetriebsbereit.

Vorverarbeitung der DatenUm die unterschiedlichen Wertebereiche anzupassen, mussten wir die Daten aus denBeschleunigungssensoren geeignet skalieren damit es zu keinem Uberlauf kommt undder Schlager in einer angemessenen Geschwindigkeit bewegt wird. Alle Transformationsind linear, d.h. die Neigung des Controllers ist proportional zum jeweiligen Inkrementeines Pakets bzw. zur Geschwindigkeit des Schlagers in diese Richtung. Die Tastendatenmussten nicht weiter bearbeitet werden, da es sich hier um einfache binare Zustandehandelt.

Zusammensetzung und Versenden der MauspaketeUm den Anspruchen des benutzten Mausprotokolls zu genugen, war es notig die Bewe-gungsdaten fur jede Achse auf die einzelnen Bytes eines Pakets aufzuteilen. Dies habenwir mit den ublichen C Bitoperation erledigt. Die genauen Positionen der einzelnenBits sind den Tabellen im Abschnitt fur das Mausprotokoll zu entnehmen.Nachdem einMauspaket fertig gestellt war, wurde es mit den bereits vorhandenen UART Methodenbyteweise verschickt.

6.3.2 Empfangen

UeberblickDas Empfangen gestaltete sich insgesamt etwas schwieriger. Im Gegensatz zum konti-nuierlichen Sendeprozess werden die ankommenden Pakete uber ein Interrupt erkanntund entgegengenommen. Anschließend werden die Mauspakete wieder rekonstruiert. Diedarin enthaltenen Bewegungsinkremente werden solange auf addiert,bis sie durch die vonuns zur Verfugung gestellten Methoden abgeholt werden.

InterupthandlingDie Interuptroutine wird angesprungen, sobald ein neues Byte im UART Buffer ange-kommen ist. Anschließend werden die Bytes dem aktuellen Mauskpaket hinzugefugt .Analog zum Sendeteil mussen nun die uber das Paket verteilten Werte wieder bitweisezusammengebaut werden. Sobald ein Paket komplett ist, werden die enthaltenen Bewe-gungsdaten aufaddiert. Die Variablen fur die Tasten werden lediglich mit dem neuenWert uberschrieben.

28

Page 29: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

InterfaceUm einen moglichst komfortablen Umgang mit dem Controller zu gewahrleisten war esvon besonderem Interesse, ein einfaches Interface zur Verfugung zu stellen. Es bestehtim wesentlichen aus einzelnen Getter - Methoden mit der die aktuellen Bewegungs- undTastendaten abgefragt werden konnen. Durch die beschriebene Akkumulation der Da-ten gehen keine Informationen verloren und man erhalt den zuruckgelegten Weg desSchlagers seit der letzten Abfrage. Jeder Aufruf setzt die Variablen auf Null zuruck.

6.4 Fazit

Die Wahl das Mausprotokoll als Kommunikation zwischen dem Atmel und dem NetXzu verwenden hat sich als sehr hilfreich herausgestellt, da die unterschiedlichen Grup-pen separat ihre Programmteile testen konnten. Weiterhin wurde, durch eine modulareProgrammierung, die Wiederverwendbarkeit des Maus Protokolls gewahrleistet. So istes moglich durch Austauschen weniger Zeilen Code die Controller spezifisch sind, dasMaus Protokoll auf einen anderen Mikro Kontroller zu migrieren. Zusatzlich ist eineprofessionelle Nutzung des Air Sticks am PC denkbar, wie kommerzielle Produkte, wiez.B. der Air MX von Logitech zeigen.

29

Page 30: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

7 Funkubertragung

Die Aufgabe bestand darin, den Controller uber eine Funkverbindung mit dem Spiel zuverbinden, da eines der Features unseres Projektes die drahtlose Steuerung des Spieleswar. Da die Realisierung einer Funkverbindung uber viele verschiedenen Moglichkeitengelost werden kann, musste erstmal ein geeignetes Modul oder eine geeigneter Chipgesucht werden, der diese Aufgabe, gemaß unseren Anforderungen, erfullen kann. ZurAuswahl stehen dabei unter anderem bekannte Verfahren wie Bluetooth, Wireless Lanoder auch Zigbee; diese Ubertragungsverfahren benotigen neben der aufwandigen undteuren Hardware auch in der Regel einen entsprechenden Software Stack, der in unse-rem Falle im Vergleich zum Nutzen einen sehr hohen Aufwand dargestellt hatte. Da dasoriginale Microsoft Extended Mouseprotokoll implementiert wurde, mussten nur weni-ge Daten mit geringer Geschwindigkeit ubertragen werden; es sollte also eine einfacheLosung sein, mit der sich uber eine kurze Strecke die Daten ubetragen lassen.

Nach einiger Recherche wurden wir bei einem deutschen Versandhandler [Pollin] fundig;dort wurden Funkmodule vom Typ RFM12 der Firma hoperf.com [HopeRF] angeboten,die im Vergleich zu den anderen Losungen sehr gunstig erworben werden konnten. Zu demgab es bei dem Versand Handler auch gleich ein Entwicklungsboard zu den Funkmodulen,die mit einem Atmel der Reihe ATmega bestuckt werden konnten und ein schnellesTesten der Software ermoglichte.

Im folgenden soll nun auf die besonderen Eigenschaften des Funkmoduls eingegangenwerden

7.1 Das Funkmodul

Abbildung 14: Das verwendete Funkmodul

Der Chip (RF12) des verwendete Funkmodul hat viele sehr interessante Features, diedas Modul sehr universell einsatzbar macht. Die Module senden mit einer sehr geringenLeistung von 1mW im 315, 433, 868 oder 915 MHz Band. Da diese Bander zum ISMStandard gehoren, ist keine weitere kostenintensive Lizenzierung der Funkmodule notig.

30

Page 31: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Der Chip ist ein komplett analoger RF und Base Band Transceiver, der eine bidirektio-nal Verbindung mit einem Modul moglicht macht und durch eine hochauflosende PLLmehrere Kanale pro Band ermoglicht. [RFM12 DS]

Features

• Voll integriert

• Hoch auflosender PLL Synthesizer

• Schneller Kanalwechsel moglich

• Bis zu 115.2 kbps Datenrate moglich

• Integrierter Antenne Verstarker

• Programmierbare TX Frequenzabweichung (15 bis 240 KHz)

• Programmierbare RX Basisband Bandweite (67 bis 400 KHz)

• Automatische Frequenzkontrolle (AFC)

• Detektion der Datenqualitat (DQD)

• Interne Datenfilterung und Taktruckgewinnung

• RX Synchron Pattern Erkennung

• SPI kompatibles Interface

• Takt und Reset Ausgang fur Mikrocontroller

• 16 bit RX Daten FIFO

• 2 x 8 bit TX Daten Register

• 2.2 bis 5.4 Volt Versorgungsspannung

• geringe Leistungsaufnahme

• Stromsparmodus mit Wakeup Timer

Die von uns erworbenen Module senden im 433 MHz Band; damit teilen sich die Moduledie Frequenz unter anderem mit Funkthermometern und Fernbedienungen. Auf Grundder geringen Entfernung zwischen Controller und Spiel ist dies aber in unserem Falle keinProblem und daher wurde auf einen Schutz vor Fehlern, z.B. durch CRC, verzichtet.Die Ubertragung laßt sich auch durch eine Verringerung der Datenubertragungsratedeutlich verbessern. Bei den erste Versuchen mit 56.700 bps Ubertragungsrate kam es inwenigen Fallen auf eine Entfernung von 1m zu Empfangsstorungen, eine Verringerung derDatenrate auf 19.200 bps brachte den gewunschten Erfolg und es traten keine weiterenFehler auf.

Ein weiterer, wichtiger Faktor bei der Datenubetragung ist die Wahl der Antenne. Dadas Modul nicht mit einer Antenne ausgestatt ist, wurde eine λ/4 Antenne in Form eineseinfachen Drahtes genutzt. Die optimale Lange ist bei 433 MHz mit

λ = c0/f → λ/4 = 17.3cm

31

Page 32: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Versuche mit anderen Antenneformen konnten leider nicht durchgefuhrt werden, durchdie richtige Wahl der Antenne sollten sich aber Entfernungen bis zu 100m im Freienuberbrucken lassen. Der auf dem Modul integrierte Chip besitzt sogar einen differentiel-len Antennenausgang, der die Moglichkeiten der Antennenwahl noch erweitern wurden.Leider ist der differentiellen Antennenausgang auf dem verwendeten Modul nicht her-ausgefuhrt, daher beschrankt sich die Wahl der Antenne auf wenige Moglichkeiten. Miteinem einfachen Draht als Antenne konnten im Labor ohne weiteres 5m uberbrucktwerden.

Besonders interessant ist die SPI Schnittstelle, mit der auf Register zugriffen und Datengesendet und empfangen werden konnen. Im nachsten Kapitel wird deshalb auf die SPISchnittstelle naher eingegangen.

7.1.1 Die SPI Schnittstelle

Da die SPI Schnittstelle auf den meisten Mikrocontrollern bereits als Hardwaremodulintegriert ist, macht dies die Benutzung der Module sehr einfach und unproblematisch.

Das Serial Peripheral Interface (kurz SPI) ist ein ursprunglich von Motorola entwickel-tes Bus-System fur synchronen, bidirektionalen, seriellen Datenbus. Mit ihm konnenverschiedene Gerate, wie Speicher, AD/DA-Konverter, Sensoren, und vieles mehr mitwenigen Leitungen an einen Mikrocontroller / Microprozessor angebunden werden. Dergroße Vorteil gegenuber anderen seriellen Schnittstellen ist der sehr locker gehalteneStandard, der die Implementierung sehr einfach macht. Meistens gibt es einen Mas-ter und einen oder mehrere Slaves, die miteinander kommunizieren. Es gibt auch dieMoglichkeit mehrerer Master, diese soll aber hier nicht beschrieben werden.

Der Master gibt hier den Takt vor und wahlt uber eine Chip-Select Leitung den Slave ausund kann dann Daten senden oder empfangen. Dabei besteht die Moglichkeit, dass einMaster mehrere Slave in einer Kette (kaskadiert) oder jeweils einzeln uber die Chip-SelectLeitung anspricht. Damit lassen sich viele Gerate uber wenige Leitungen ansprechen.

SPI benotigt 4 Leitungen, die hier kurz beschrieben werden sollen.

• Die Taktleitung SPCK oder SCK (Ausgang beim Master, Eingang beim Slave)

• Master-Out Slave-In, MOSI oder SDO beim Master, Datenrichtung vom Masterzum Slave

• Master-In Slave-Out, MISO oder SDI beim Master, Datenrichtung vom Slave zumMaster

• Chip-Select CS oder nCS, Slave Select Ausgang vom Master, Eingang vom Slave

Es gibt auch Implementierungen, die mit 3 Leitungen auskommen. Dabei fehlt ublicherweisedie Datenleitung zum Master (MISO), wenn der Slave keine Daten zurucksendet.

Damit Master und Slave wissen, wann die Daten auf den Datenleitungen gultig sind,gibt es die Definition der SPI-Modes. Ursprunglich von Motorola nicht festgelegt, haben

32

Page 33: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

sich 4 Modes etabliert. Dabei wird unterschieden, in welcher Taktphase (Clock-Phase,CPHA) und bei welcher Taktpolaritat (Clock-Polarity, CPOL) die Daten gultig anliegen.Fur die Kommunikation mussen also Master und Slave im selben SPI-Mode arbeiten.

Hier die verschiedenen SPI Modes und ihre entsprechende CPHA und CPOL Einstel-lungen:

Mode CPOL CPHA0 0 01 0 12 1 03 1 1

Da im Datenblatt auch meist Grafiken angegeben sind, fuhrt meistens auch ein Vergleichmit der folgenden Grafik zum Erfolg:

Abbildung 15: Verschiedene SPI Modes (Quelle: [Wiki-SPI])

7.1.2 Implementierung auf dem Atmel

Da der verwendete ATMega8 uber eine Hardware SPI Schnitstelle verfugt und dieseauf Grund der freien Pins auch verwendet werden kann, wurde fur die Kommunikationzwischen dem Atmel und dem Funkmodul auf dem Controller der Hardware SPI Modusgewahlt.

Zu Initialisierung muss der Atmel als Master gewahlt und der SPI Mode 0 eingestelltwerden. Dann folgt die Wahl der SPI Taktfrequenz uber den Teilerfaktor zum System-takt.

Vorher mussen naturlich die Pins entsprechend ihrer Funktion als Ausgang oder Einganggewahlt werden.

Die Funktion zum Transfer von Daten sieht dann wie folgt aus. Dabei werden immergleichzeitig Daten (2 byte) vom Master und vom Slave gesendet.

33

Page 34: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

unsigned shor t r f 1 2 t r a n s ( unsigned shor t wert ) unsigned shor t wer t i =0;

cb i (RF PORT, CS ) ; // Slave auswahlen

SPDR = (0xFF00 & wert )>>8; // Daten senden (Hi−byte )whi l e ( ! ( SPSR & (1<<SPIF ) ) ) ;we r t i = (SPDR<<8); // Daten empfangen (Hi−byte )

SPDR = (0 x00 f f & wert ) ; // Daten senden (Low−byte )whi l e ( ! ( SPSR & (1<<SPIF ) ) ) ;we r t i = wer t i + SPDR; // Daten empfangen (Low−byte )

sb i (RF PORT, CS ) ; // Slave abwahlenre turn wer t i ;

7.1.3 Implementierung auf dem NetX

Der NetX verfugt auch uber eine SPI Schnittstelle, leider ist diese auf den verwendetenBoards nicht uber eine PIN-Leiste oder ahnliches verfugbar, daher wurde SPI auf demNetX in Software implementiert. Diese Implementierung steht der Hardwareimplemen-tierung in keiner Weise nach, es muss nur dafur gesorgt werden, dass die Timings desFunkmodules eingehalten werden.

Die Schnittstelle wurde uber PIO Pins des NetX realisiert. Die genutzten Pins sind inder Erlauterung zum Erweiterungsboard zu finden. Auf die Initialisierung der PIO Pinssoll hier nicht naher eingegangen werden, da sie mit der eigentlichen Funktion nicht zutun hat. Die vollstandige Initialisierungssequenz ist in den Quellcodes zu finden.

unsigned shor t r f 1 2 t r a n s ( unsigned shor t Cmd)

UINT8 i ;UINT temp ;temp=0;p i o s e t p i n (RF12 SCK , 0 ) ; // Takt auf lowp i o s e t p i n (RF12 CS , 0 ) ; // Modul auswahlenf o r ( i =0; i <16; i++) // 16 b i t s senden , MSB f i r s t

i f (Cmd&0x8000 )p i o s e t p i n (RF12 MOSI , 1 ) ;

e l s e p i o s e t p i n (RF12 MOSI , 0 ) ;

34

Page 35: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

//nopwait ( ) ;p i o s e t p i n (RF12 SCK , 1 ) ; // Takt auf hightemp<<=1;i f ( p i o r e ad p in (RF12 MISO))

temp |=0x0001 ; // Daten vom Modul e i n l e s e n//nopwait ( ) ;p i o s e t p i n (RF12 SCK , 0 ) ; // Takt auf lowCmd<<=1;

p i o s e t p i n (RF12 CS , 1 ) ; // Modul abwahlenre turn ( temp ) ;

7.2 Die Initialisierung des RFM12

Die Initialisierung des Funkmoduls ist recht umfangreich, da viele Parameter des Funk-moduls eingestellt werden konnen. Da auf Umschaltung der Kanale, Bandbreite und derAusgangsleistung wahrend des Betriebes verzichtet wurde, reicht es, in main-Funktiondie Initialisierung wie folgt aufzurufen:

r f 1 2 i n i t (RF12FREQ(433 . 9 2 ) , 5 7200 ) ;

Damit wird dann die zu nutzende Frequenz als auch die Datenrate eingestellt. Alle an-deren Parameter werden bei der Initialisierung fest kodiert aufgerufen. Der Taktausgangdes Funkmodules wird in unserem Falle nicht genutzt. Es hat sich aber zum Debug-gen der Funktionen als sehr nutzlich herausgestellt, die auszugebende Frequenz vondefault:1MHz auf eine andere einzustellen, da dann sehr schnell gepruft werden kann,ob das Modul uberhaupt konfiguriert worden ist. Auch Features wie der WakeUp Timerund der Low Duty Cycle werden nicht genutzt, da es um sinnvolle, aber in unserem Fallefur den Betrieb nicht notige Features handelt.

Die Werte fur die Bandbreite, LNA gain und DRSSI wurden aus anderen Versuchen mitdem Funkmodul ubernommen. [RFM12 PG] Fur Reichweite- bzw. Antennentests solltendiese Werte probeweise geandert werden.

7.3 Das Datenubertragungsprotokoll

Da auf eine Fehlerkorrektur verzichtet wurde, ist das Ubertragungsprotokoll recht ein-fach gehalten, es bietet aber alle fur unser Projekt notige Funktionen um eine sichereUbertragung zu gewahrleisten.

Preamble Frame Start Bytes Daten

35

Page 36: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Die Preamble und der Frame Start ist notig, damit das empfangende Modul sich auf dieankommenden Daten synchronisieren kann. Dann wird die Anzahl der Datenbytes unddie Daten ubertragen.Die Ubertragung der Anzahl der Daten macht die Ubertragung flexible, auf dieses kannaber verzichtet werden, wenn die Anzahl der zu ubertragenden Bytes fest steht.In unserem Falle war dies zum Testen verschiedener Ubertragungen enthalten. So laßtsich z.B. ohne Anderung der Empfangsfunkton das Senden des Mouseprotokoll (3 oder4 bytes) variieren. Zu dem sind die Funktion somit auch fur anderen Ubertragungengeeignet.

7.3.1 Senden

Die Abbildung 16 zeigt den allgemeinen Ablauf beim Senden eines Datenpaketes ohneFehlerkorrektur.

Abbildung 16: Sendeablauf

Zur Umsetzung wurden Funktionen geschrieben, die den Interrupt Pin des Funkmodulesdirekt abfragen als auch Interrupt gesteuerte Funktionen. Die Funktion

i n t r f 1 2 txda ta ( unsigned char ∗data , unsigned char number ) ;

sendet Daten im Pollingbetrieb uber das Funkmodul. Der Funktion mussen nur die Datenin Form eines Arrays und die Anzahl der zu sendenden Daten ubergeben werden.

Die Funktion rf12 wait irq() wartet auf die Signalisierung des Funkmodules, dass dasletzte Datenbyte gesendet wurde und ein weiteres Datenbyte gesendet werden kann. DasModul zeigt durch einen LOW Pegel an, dass das nachste Byte gesendet werden kann.

Die Funktion rf12 ready() fragt den Datenausgangs Pin des Funkmodules ab. Dieseszeigt durch einen High Pegel an, dass die aktuelle Aktion abgeschlossen ist und weitereDaten gesendet werden konnen.

Wichtig ist, vor dem Einschalten des Sendevorgangs den aktuellen Status mittels rf12 trans(0x0000)abzufragen, da es manchmal und nicht reproduzierbar zu Fehlfunktionen des Funkmo-dules kam, wenn das Status Register nicht gelesen wurde.

36

Page 37: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Desweiteren ist darauf zu achten, dass das aktuelle Byte nur gesendet wird, wenn amFSK Pin ein High Pegel anliegt.

7.3.2 Empfangen

Die Abbildung 17 zeigt den allgemeinen Ablauf beim Senden eines Datenpaketes ohneFehlerkorrektur

Abbildung 17: Empfangsablauf

Auch hier wird nur auf die Umsetzung des Ablaufes mittels Polling des Interrupt Pinsgezeigt werden. Es ist aber in jedem Fall darauf zu achten, dass vor dem Empfangender FIFO explizit eingeschaltet wird. Somit wird sichergestellt, dass der FIFO aktiv undbereit zum Speichern von Daten ist und dass nur Daten empfangen werden, wenn auchtatsachlich Daten empfangen werden sollen. Desweiteren muss naturlich der Empfangs-modus eingeschaltet und nach dem letzten Byte ausgeschaltet werden.

Die folgende Funktion wurde dafur geschrieben:

unsigned char r f 1 2 rxda ta ( unsigned char ∗data )

Sie liefert die Anzahl der empfangenen Daten und einen Zeiger auf die Daten zuruck.

7.3.3 Interruptbetrieb

Da die bis jetzt gezeigten Funktionen den aktuellen Programmfluss blockieren, wenngesendet und empfangen wird, wurden auch Funktionen geschrieben, die den InterruptModus nutzen. Auf diese soll hier nur kurz eingegangen werden.

void r fm12 i s r ( void ) ;

sendet zu sendende Daten oder empfangt aktuelle Daten, abhangig vom aktuellen Status.

unsigned char r f 1 2 r x s t a r t ( unsigned char r e cbyte s ) ;

37

Page 38: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

sorgt dafur, dass die notigen Register fur den Empfangsbetrieb gesetzt werden.

unsigned char r f 1 2 r x f i n i s h e d ( unsigned char ∗data ) ;

fragt den aktuellen Puffers Status ab und liefert den Puffer und die Anzahl der empfan-genden Bytes zuruck, wenn erfolgreich Daten empfangen wurden.

unsigned char r f 1 2 t x s t a r t ( unsigned char ∗data , unsigned char s i z e ) ;

sorgt dafur, dass die notigen Register fur den Sendebetrieb gesetzt werden.

unsigned char r f 1 2 t x f i n i s h e d ( void ) ;

fragt den aktuellen Status ab und liefert ein OK, wenn das letzte Byte ubetragen wordenist.

7.4 Probleme und mogliche Losungen

• Das Funkmodul ist sehr empfindlich, wenn Daten an das Modul gesendet werden,ob wohl das Modul den letzten Befehl noch nicht abgearbeitet hat, daher mussunbedingt das Modul vor jedem Befehl abgefragt werden.

• Im Interrupt Betrieb ist es sinnvoll, nur auf fallende Flanken des Interrupt Pins zureagieren. Beim NetX konnte dies nicht umgesetzt werden, was immer wieder zuFehlinterpretationen des Interrupts fuhrte. Daher konnten die Interrupt Funktio-nen nicht eingesetzt werden. Eine Losung ware in der Interrupt Routine auf denHigh Pegel des Interrupt Pins zu warten; das konnte aber wiederum zu weiterenFehlern fuhren und wurde daher nicht getestet.

• Es kam bei großeren Entfernungen zwischen den Antennen und hohen Datenratenzu fehlerhaften Datenpaketen. Es ware sinnvoll, den Empfang eines Datenpaketeszu bestatigen bzw. das Datenpaket neu anzufordern, wenn es fehlerhaft ankam. So-mit konnte eine sichere Ubertragung gewahrleistet werden. Dies wurde aber nichtumgesetzt.

• Die Antenne spielt eine entscheidende Rolle bei der Datenubertragung. Hier soll-te auch beim Platinen Layout auf die Signalfuhrung, die Lange sowie die Formder Antenne geachtet werden. Denkbar ware z.B. die Antenne auf der Platine zuintegrieren.

38

Page 39: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

8 Erweiterungsboard fur das NetX Board

Abbildung 18: Bild vom bestuckten Board

8.1 Audio Ausgang

8.1.1 Theorie

Die fur die Audioausgabe benutzten IO-Pins liefern ein Audiosignal mittels Pulsweiten-modulation, auch unter dem Namen 1-Bit DAC bekannt. Die Besonderheit liegt in derUberlagerung des Audiosignals mit einer hohen Abtastfrequenz, die vor der Verstarkungherausgefiltert werden muss. Dies kann unter anderen durch einen passiven Tiefpass er-folgen, dessen Grenzfrequenz je nach Abtastrate des Audiosignals zwischen 4 und 20KHz liegen sollte.

Auf Grund der begrenzten Treiberfahigkeit der IO-Pins des NetX wurde anstelle einespassiven Tiefpass ein aktive Filterschaltung entworfen, die die IO Pins nur sehr geringbelastet und den Anschluss von Kopfhorern oder aktiven Lautsprechern ermoglicht.

Abbildung 19 zeigt den Schaltplan in SwitcherCad/LtSpice. Der Widerstand R4 wurdebei der Simulation mit 10KOhm fest vorgegeben, wurde aber dann bei der eigentlichenSchaltung uber ein Potentiometer realisiert, was eine Regulation der Verstarkung desOPV’s moglich macht. So kann eine zu geringe Lautstarke der Audiosamples geregeltwerden.

39

Page 40: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 19: Schaltung in LTSpice / SwitcherCAD

Die Schaltung unterteilt sich in 3 Einzelubertragungsfunktionen:

• Der Eingangstiefpass

• Der Operationsverstarker

• Der Ausgangshochpass

Der Eingangstiefpass dient zur Filterung der hohen Abtastfrequenz, die Ubertragungsfunktionlautet:

H1 =1

1 + jωR1C1

Mit R1 = 2.2KΩ und C1 = 47nF ist die -3dB Frequenz 1,5KHz.

Der Operationsverstarker dient zum einen der Impedanzwandlung und zur Verstarkungdes Wechselsignals mit der Ubertragungsfunktion:

H2 = 1 +1 + jωC3R3

1 + jωR4C3

Fur R3 = R4 betragt die frequenzabhangige Verstarkung der Schaltung 2, durch Verrin-gerung von R4 kann die Wechselsignalverstarkung der Schaltung vergroßert werden. DieGleichsignalverstarkung betragt immer 2.

Der Ausgangshochpass dient zur Auskopplung der Gleichspannung. Am Ausgang derSchaltung liegt dann nur das Wechselsignal an, das mittels einem nachgeschalteten Au-dioverstarker mit Lautsprechern oder mit Kopfhorern ausgegeben werden kann. DerWiderstand R5 simuliert hier den Eingangswiderstand der nachfolgenden Stufe.

Die Ubertragungsfunktion lautet:

H3 =jωC2R5

1 + jωC2R5

40

Page 41: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Mit R5 = 2KΩ und C2 = 4.7µF ist die -3dB Frequenz 16,9Hz. Bei R5 = 22KΩ ist die-3dB Frequenz 1,54Hz.

Folgendes Ergebnis wurde bei der Simulation erzielt (Abbildung 20)

Abbildung 20: Das Simulationsergebnis der Schaltung

8.1.2 Umsetzung

Fur die Umsetzung der Schaltung wurde anstelle des LT1077 ein Operationsverstarkervon Maxim, der Max4092 [MAX4092] gewahlt, da dieser die gleichen Eigenschaften hatund im Labor bereits vorhanden war. Wichtig fur die Schaltung ist die Fahigkeit des OPVzur Austeuerung bis zur Versorgungspannung, da auf dem Board 3.3V zur Verfugungstanden und damit auf einen Spannungsregler verzichtet werden konnte. Abbildung 21

Abbildung 21: Implementierung der Audio Schnitstelle

8.2 Serielle Schnitstellen

Da das NetX Board mit dem LCD leider keinen Anschluss fur eine serielle, RS-232Schnittstelle besitzt, zum Testen des Spieles mittels Maus oder Trackball aber diese er-

41

Page 42: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

forderlich ist, wurde eine Standardlosung mit einem MAX3232 [MAX3232] gewahlt. Derofter eingesetzte MAX232 kann hier nicht verwendet werden, da nur eine Versorgungs-spannung von 3,3V zur Verfugung stand. Herausgefuhrt sind die Anschlusse der Uart0.Eine weitere serielle Schnittstelle, Uart2, ist uber eine Pinleiste herausgefuhrt und darfnur an 3.3V TTL Pegel angeschlossen werden. Diese Pins konnen naturlich auch alszusatliche GPIO Pins genutzt werden.

Abbildung 22: Die serielle RS232 Schnitstelle

8.3 Funkmodul

Die SPI-Schnittstelle des Funkmodules wurde uber PIO Pins realisiert, dabei wurdefolgende Belegung gewahlt und ist bei der Softwareimplementierung zu beachten.

• MISO : PIO49

• MOSI : PIO50

• SPCK : PIO51

• CS : PIO52

Da die PIO Pins nicht interruptfahig sind, die GPIO Pins aber schon, wurde fur denInterrupt der GPIO6 gewahlt. Der FSK Pin wurde aus Grunden des Layouts auch ubereinen GPIO Pin angeschlossen. Die Pullup-Widerstande an SDO und IRQ dienen zurVerbesserung der Pegelflanken.

42

Page 43: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

8.4 Layout des Erweiterungsboards

Abbildung 23: Vorderseite (links); Ruckseite gespiegelt (rechts)

8.5 Bestuckungsplan des Erweiterungsboards

Abbildung 24: Bestuckungsplan

Der dazugehorige Schaltplan, sowie eine Bestuckungstabelle befindet sich im Anhang.

43

Page 44: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

9 Quellen

Literatur

[AlleyWay] http://nindb.classicgaming.gamespy.com/dmg/images/ss/aw_1.jpg

[Pollin] http://www.pollin.de

[Pong] http://www.sirgalahad.org/paul/sw/winlock/img/pong.png

[WikiPong] http://de.wikipedia.org/wiki/Pong

[HopeRF] http://www.hoperf.com/pro/RFM12.html

[Wiki-SPI] http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

[ATMEGA8] Datenblatt ATMEGA8:http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf

[RFM12 DS] Datenblatt RFM12:http://www.hoperf.com/pdf/RFM12.pdf

[RFM12 PG] Programming Guide RFM12:http://www.hoperf.com/pdf/RF12_code.pdf

[MAX232] Datenblatt MAX232:http://datasheets.maxim-ic.com/en/ds/MAX220-MAX249.pdf

[MAX3232] Datenblatt MAX3232:http://www.maxim-ic.com/quick_view2.cfm/qv_pk/1068

[MAX4092] Datenblatt MAX4092:http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3267

[MMA1260] Datenblatt MMA1260:http://www.freescale.com/files/sensors/doc/data_sheet/MMA1260D.pdf

[MMA2260] Datenblatt MMA2260:http://www.freescale.com/files/sensors/doc/data_sheet/MMA2260D.pdf

[netX-PRG] NetX - Programme Reference Guide (ausgedruckte Form)

44

Page 45: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

A Anhang

A.1 Bauteilliste des Erweiterungsboards und Schaltplane

Part Value Package DescriptionANTENNE 1X01 PIN HEADERAUDIOOUT EBS35Y EBS35 MIC/HEADPHONE JACKC1 4.7uF/100V E2,5-5 POLARIZED CAPACITORC2 4.7uF/100V E2,5-5 POLARIZED CAPACITORC3 4.7uF/100V E2,5-5 POLARIZED CAPACITORC4 4.7uF/100V E2,5-5 POLARIZED CAPACITORC5 47nF C0805 CAPACITOR, European symbolC6 47nF C0805 CAPACITOR, European symbolC7 100nF C0805 CAPACITOR, European symbolC8 100nF C0805 CAPACITOR, European symbolC49 100nF C0805 CAPACITOR, European symbolC50 100nF C0805 CAPACITOR, European symbolC51 100nF C0805 CAPACITOR, European symbolC52 100nF C0805 CAPACITOR, European symbolC53 100nF C0805 CAPACITOR, European symbolIC1 MAX4092 SO8IC2 MAX3232CSE True RS-232 TransceiversIC3 RFM12 RFM12JP1 2X25SMD2.0 PIN HEADERLED1 CHIP-LED0805 LEDLED2 CHIP-LED0805 LEDLED3 CHIP-LED0805 LEDR1 10K PT-10S POTENTIOMETERR2 10K M0805 RESISTOR, European symbolR3 10K M0805 RESISTOR, European symbolR4 10K PT-10S POTENTIOMETERR5 2.2K M0805 RESISTOR, European symbolR6 2.2K M0805 RESISTOR, European symbolR7 330 M0805 RESISTOR, European symbolR8 10K M0805 RESISTOR, European symbolR9 330 M0805 RESISTOR, European symbolR10 330 M0805 RESISTOR, European symbolR11 10K M0805 RESISTOR, European symbolSERIAL1 M09HP SUB-DSERIAL2 1X04 PIN HEADER

45

Page 46: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 25: Schaltplan des Controllers

46

Page 47: Airstick: All-Away - EMSP: Startseite · 2.1.2 Breakout-Arkanoid-AlleyWay Eine der beruhmtesten Pong Variante, an der sich das Konzept¨ ” All-Away“ stark ori-entiert, ist ”

Abbildung 26: Schaltplan des Erweiterungsboards

47