Virtual Game system.

En spelkonsoll med en mekaniskt scannad display. ("PS2 killer")

Bakgrund till projektet.

För ett par år sen såg jag ett häftigt projekt baserat på en mikrokontroller. Det var Bob Blick från USA som hade gjort en klocka. Vad var det som var så speciellt med den här klockan då ? Jo, det var så att den var virtuell. 8 st lysdioder satt på en arm som roterades, samtidigt som lysdioderna släcktes och tändes så att en virtuell bild skapades i luften där lysdioderna passerade. (Detta styrdes av en mikroprocessor som snurrade med lysdioderna) Detta tyckte jag var häftigt, och började sedan fundera på om man inte skulle kunna spinna vidare på den idén. Jag kom fram till att om man ökade antalet lysdioder och lade till nån form av data överföring så skulle det nog gå att göra lite vad som helst med det. Så i slutet på 1998 byggde jag ihop lite mekanik och elektronik till ett sådant system, men det fungerade inte alls, elektroniken "brann upp" och projektet lades på hyllan. Men nu våren 2000 så tyckte jag att det skulle vara kul att försöka igen, och den här gången gjorde jag det som ett projekt i skolan i kursen "Digitala Projekt", så att det var tvunget att lyckas.
 
 

Målet med projetet.

Målet med projektet var att göra ett spelsystem, där "skärmen" använder samma teknik som Bob Blick's klocka. Skärmen skulle ha 16 lysdioder, och via ett entråds interface kommunicera med en huvudenhet som skulle ha hand om spelet. Till huvudenheten skulle man kunna koppla in två st joysticks för att styra spelen med, en ljudutgång från en DA omvandlare skulle även finnas. På spelsystemet skulle spelen Pong och Tetris implementeras, och även en klocka eftersom det var en klocka som gav mig idén. Systemet skulle se ut enligt bilden nedan. Grafikkortet som snurrar med lysdioderna ska hålla reda på skärmens innehåll och även kunna utföra vissa enkla grafiska operationer. Både grafikkortet om huvudenheten skulle vara baserade på mikroprocessorn PIC16F84 eftersom jag ville passa på att prova en C-kompilator för just den mikroprocessorn, den mikroprocessorn är även lagom avancerad. (PIC 16F84 har 1024 ords programminne i Flash, där varje ord är 14bitar och varje instruktion är ett ord lång, den har 68byte ram minne och 64byte data eeprom)
 
 
 
Skiss över uppbyggnaden av det virtuella spelsystemet.

 

Svårigheterna.

En svårighet när man har elektronik som snurrar runt är att få över matningsspänning till den. Bob Blick hade löst detta genom att modifiera motorn och koppla in sig på lindningarna i rotorn, men jag valde att istället sätta på ett antal kullager på motoraxeln och på så vis överföra matningsspänningen via dem. Detta fungerade fint för matningsspänningen, men när jag försökte överföra data på samma sätt gick det inte lika bra. Det var väldigt många mikroavbrott som gjorde signalen alldeles för brusig för att kunna överföra nånting alls. Jag började fundera på om man kanske skulle kunna överföra data via IR, detta skulle vara bökigt, men som tur var så kom jag på en lösning för att minska bruset vid överföringen via kullagret. Om strömmen som flyter genom kullagret är tillräckligt stor (100mA) så kommer de mikrogap, som orsakar avbrotten, att slås igenom och det blir bara lite brus. Dock så uppstod ett annat problem med den ökade strömmen, resistansen i kullagren orsakade ett spänningsfall på ca 2v, så det krävdes en kondensator (och biaserings resistornät) för att bli av med spänningsfallet. Signalen hade ett brus på med en amplitud på en volt både vid hög och låg nivå, och därför krävdes en koparatorkopplad OP-förstärkare för att få ut korrekta spänningsnivåer.

Ett annat problem är att få bilden att stå still och ha konstant storlek. Att få den att stå still löste jag med en IR diod och en IR switch, sedan mätte en interrupt rutin i grafikkortet hur lång tid det tog att rotera ett varv, och ur den tiden beräknades hur lång tid en pixel ska vara tänd så att storleken på bilden (till viss del) är oberoende av rotationshastigheten.
 
 
 
Detaljbild: Kullageröverföring och IR-synkronisering

 

Spelen.

De två spelen Pong och Tetris skulle implementeras på systemet, vilket gick bra. Dock så blev bilden blir väldigt flimmrig då den uppdateras med 4-10Hz beroende på matningsspänning, men det var förväntat.

Pong programmet är mest if-satser som håller koll på att bollen och spelarna håller sig innanför skärmen. Det finns möjlighet att spela mot en datoriserad spelare (Som tyvärr inte är så intelligent). Spelet har även enkla ljud (gjorda med triangelvåg) när bollen studsar.

Tetris programmet var lite svårare att få in på 1024 instruktioner, men C-kompilatorn var imponerande effektiv på att klämma in allt, så det fick plats efter en del trixande. Dock så gick det åt mycket ram minne för spelplanen och därför gick det inte att få musik, då musik kräver en interruptrutin som i sin tur kräver mycket ramminne.
 
Pong in action Tetris in action

 

Klockan.

Klockan gick det inte så bra med, det var problem att kommunicera med klock-chipet, som skulle hålla reda på tiden. Klockan använde sig av I2C (en seriell tvåtrådsbus) för att kommunicera. Rutiner för att kommuniera över I2C fanns tillgängliga från tillverkaren av C-kompilatorn, och de fungerade fint när jag testade de mot ett annat I2C-chip, men klockan var helt död, även när ett nytt klock-chip införskaffades. Men även om inte klockan lyckades är jag ganska nöjd ändå då resten gick fint.
 
 

Bilder på hårdvaran.

Eftersom det inte tar mycket längre tid att cadda och etsa ett kretskort som det tar att vira ett (För mig i alla fall), samt att resultatet ger ett mer seriöst intryck så valde jag att etsa korten.
 
Hela den mekansika displayen Närbild på grafikkortet Spelkortet    

 

Länkar

Mer info om projektet.
Bob Blick's "propeller" clock.
 

Den galne konstruktören

Jag som har gjort detta är E96a, heter Rickard Gunée och ser ut så här: