.: Details: Videospiel-System mit einem PIC-Mikrocontroller :.

Videospiel-System mit einem PIC-Mikrocontroller

Informationen

ControllerPIC18F2620
Version0.9 alpha (ungetested)

Beschreibung

In diesem Projekt wird ein Videospiel-System mit zwei Controllern und Schwarz/Weiß-Ausgabe auf einem Fernseher gebaut/programmiert...

ACHTUNG: Da ich dieses Projekt noch nicht aufgebaut habe, ist ein Nachbau nicht empfohlen!
Außerdem ist der Quellcode noch nicht fertig, sodass noch keine Dateien veröffentlicht wurden...

Einleitung

Nachdem ich auf mehreren Internetseiten von der Erzeugung von Video-Signalen mit einem Mikrocontroller gelesen habe, aber keine einzige vernünftige, komplette Beschreibung gefunden habe, veröffentliche ich jetzt hier mein eigenes Projekt (und hoffe, es ist umfassend genug dokumentiert)...

1. Erklärung des BAS-Videosignals

BAS besteht aus Signalpegeln zwischen 0 und 1 Volt. Die verschiedenen Spannungen teilen dem Fernseher entweder mit, wann eine neue Zeile, bzw. ein neues Bild beginnt (Synchron-Pegel, 0 V) oder welche Graustufe ausgegeben wird (0.3 - 1 V).
Da Fernseher ihr Bild Zeile für Zeile zeichnen, muss ihm mitgeteilt werden, wann eine neue Zeile beginnt. Dies geschieht durch den Synchron-Pegel. Ist das Bild (eigentlich Halbbild, da nur die hälfte der Zeilen ausgegeben wird und die jeweils andere beim nächsten Bild) fertig, muss dies dem Fernseher ebenfalls noch einmal mitgeteilt werden.

Beispiel-Zeile

Das Synchron-Signal ist 4,7 µS lang. Die 5,8 µS lange Pause teilt dem Fernseher mit, auf welchem Pegel schwarz liegt. Bei diesem Beispiel wäre die Zeile zu einem Drittel weiß, zu einem Drittel schwarz und im letzten Drittel grau.

Eine genauere Beschreibung des BAS-Signals befindet sich auf WIKIPEDIA

2. Umsetzung auf einem Mikrocontroller

Um die Synchron-Signale zu senden wird ein Timer verwendet, der alle 64 µS den passenden Pegel aktiviert. Die Daten, die ausgegeben werden sollen (schwarz oder weiß) werden für 64x100 Punkte (dafür reicht die Rechenleistung des Controllers genau) in einem Array gespeichert. In der main()-Prozedur wird immer gewartet, bis der Timer das Synchron-Signal erzeugt hat und dann werden so schnell wie möglich die (schwarz- oder weiß-) Signale ausgegeben.
Der PIC18F2620 schafft ca. 64 Signale pro Zeile.
Als Systemtakt wird der interne Oszillator mit Software-TTL verwendet, sodass der Controller mit etwa 32 MHz läuft.

3. Die Hardware

Die unterschiedlichen Videosignale werden mit einem DA-Wandler erzeugt, der aus zwei Widerständen besteht. Damit lassen sich folgende Spannungen erzeugen:
PIN A
(470 Ω)
PIN B
(910 Ω)
Gesamtwiderstand Spannungsabfall
(75 Ω Innenwiderstand)
00-0 Volt
01985 Ω0,38 Volt
10545 Ω0,69 Volt
11385 Ω0,97 Volt

Die Chinch-Buchse des Fernsehers hat einen Innenwiderstand von 75 Ω. Das BAS-Signal wird als Spannungsabfall daran gemessen.
Zusätzlich ist noch ein Audio-Ausgang mit eingeplant, den ich jedoch noch nicht zu Ende entwickelt habe.

Außerdem hängen an dem PIC noch zwei Potentiometer (für jeden Controller einer) und 8 Taster (für jeden Controller vier), die über Pull-Down Widerstände mit der Masse verbunden sind.

Alle drei externen Interrupts sind über Taster auslösbar. Pull-Up Widerstände sind an dieser Stelle nicht nötig, da der PIC an PortB bereits welche "OnBoard" hat, die per Software aktiviert werden können.

Am MCLR-Pin hängen ein Reset-Taster, sowie ein Pull-Up Widerstand.

Als Letztes habe ich noch einen ICSP-Anschluss mit eingeplant, um den Controller auch innerhalb der Schaltung programmieren zu können. Dazu wurden noch Schutz-Dioden eingeplant, damit die Programmierspannung nicht über die Reset-Schaltung die restliche Schaltung zerstören kann, bzw. die Betriebsspannung des ICSP-Anschlusses nicht in den Spannungsregler gelangt.

Als Spannungsversorgung wird eine 9 Volt-Batterie verwendet mit einem Spannungsregler, der die 5 Volt Betriebsspannung erzeugt.

Der Schaltplan


Klicken zum vergrößern...

Klicken zum vergrößern...
Für das Projekt habe ich bereits ein Lochraster-Layout entwickelt:

Hauptplatine


Klicken zum vergrößern...

Klicken zum vergrößern...

Klicken zum vergrößern...

Controllerplatine


Klicken zum vergrößern...

Klicken zum vergrößern...

4. Stückliste

Hauptplatine
Symbol(e)AnzahlBeschreibung
-1Stiftleiste, 2-fach
-1Sockelleiste, 5-fach
-2Sockelleiste, 7-fach
-2Sockelleiste, 14-fach
BU1,BU22Chinch-Buchse
C1,C22Keramik-Kondensatur, 100 nF
C31Elektrolyt-Kondensatur, 470 µF
D1,D22Universal-Diode, 1N4001
D31LED rot, low current
IC11PIC18F2620, DIL28
R01Widerstand, 1.5 kΩ
R11Widerstand, 910 Ω
R21Widerstand, 470 Ω
R31Widerstand, 330 Ω
R41Widerstand, 20 kΩ
R5-R8,R9-R122R-Netzwerk 4+1, 10 kΩ
SW11Kippschalter, 1x Ein
T1-T33Taster
U11Spannungsregler positiv, 7805
Controllerplatine (Anzahl für beide Controller)
Symbol(e)AnzahlBeschreibung
-2Sockelleiste, 7-fach
T1-T4,T5-T88Taster
RV1,RV22Potentiometer linear, 10 kΩ

5. Die Software

Die Software wurde komplett in C geschrieben und ist sehr ausführlich kommentiert. Deshalb spare ich mir zunächst eine genaue Beschreibung an dieser Stelle (wird aber noch kommen zwinkern).
Um eigene Spiele/Programme für das System zu entwickeln, sind folgende Funktionen vorhanden:
FunktionBeschreibung
video_pt(x,y,c) Setzt an dem Punkt (x|y) die Farbe schwarz (c=0), weiß (c=1) oder invertiert die Farbe (c=2)
video_set(x,y) Gibt die Farbe am Punkt (x|y) zurück (schwarz=0, weiß=1)
video_line(x1,y1,x2,y2,c) Zeichnet eine Linie von (x1|y1) nach (x2|y2) mit der Farbe c (schwarz=0, weiß=1, invertieren=2)
video_puts(x,y,*str) Zeichnet einen Text ab Punkt (x|y) mit 5x7 Punkten pro Zeichen
video_putsmalls(x,y,*str) Zeichnet einen Text ab Punkt (x|y) mit 3x5 Punkten pro Zeichen

Als Compiler wurde CCS von Custom Computer Services verwendet. Da ich davon hellauf begeistert bin, kann ich ihn nur jedem (vor allem Anfängern) wärmstens empfehlen...

Das .zip-Archiv enthält folgende Dateien:
  • Sämtliche Bilder (Schaltplan, etc.)
  • Gesamter Quellcode (auch zum Erstellen eigener Spiele)
  • .rst-Datei für das Programm Lochmaster (zum Designen von Lochraster-Layouts)
  • .dsn-Datei für das Programm Proteus ISIS (zum Simulieren von Schaltungen, inkl. Mikrocontroller-Emulator)


Changelog

Version 0.9 alpha Erste Veröffentlichung

Download(s)


Keine Downloads für dieses Projekt vorhanden.

Kommentare

Ein/Ausblenden
©2006-2010 Chris Kröger • visit Noble-Crow

Valid XHTML 1.0 Transitional, Valid CSS 2.0, Valid RSS 2.0 Featuring Smarty Featuring GeSHi PageRank