Pasirašiau kodą savo NES adapteriui, pratestavau - viskas lyg ir veikė, tačiau kai atėjo laikas prijungti interfeisą prie žaidimo kodo, susidūriau su problemomis. Erdvėlaivis, kuris turi judėti į šonus, kartais užstringa.
Pradžiai šiek tiek informacijos. Kaip minėjau, Nintendo pultai naudoja serijinę komunikaciją. Su šia dalim viskas tvarkoj - susirenku bitus į baitą ir pateikiu jį išėjime. Valdymo pultams pateikiu 800Hz taktinį dažnį, taigi mygtukų reikšmes gaunu šimtą kartų per sekundę.
Spartan-3E plokštė darbui naudoja 50MHz dažnį, todėl kiekvieno spustelėjimo metu erdvėlaivis pasislenka į šoną per maždaug 60k pikselių. Reikėjo būdo šį skaičių sumažinti. Tam panaudojau skaičiuoklį (counter):
position_next <= position + 1 when (nes1_right = '1' and move_counter = 0) else
position - 1 when (nes1_left = '1' and move_counter = 0) else
position;
Kodas tvarkingas, aplink esantis kodas irgi veikė, tačiau kartas nuo karto erdvėlaivio judėjimas sustodavo, o po trumpos pauzės vėl veikdavo. Teko šiek tiek palaužyt galvą, kol supratau kur bėda. Įtarimo patvirtinimui, prijungiau osciloskopą ir pamačiau štai ką:
Teks spręst šią problemą tvarkingai ir montuot kokį edge-detector.
Šiandien apturėjau elektronikos laboratorinį. Iš pirmo žvilgsnio turėjo būt piece of cake, bet kažkodėl taip nebuvo. Litavom štai tokią va schemą:
Čia yra paprastas įtampos stiprintuvas. Pagal idėją jis iš <60mV padaro <6V (100x). Žinoma inžinerijoj (bent jau mūsų lygio) viskas yra su 10% paklaida. Ne esmė. Esmė, kad po 3 debuginimo ciklų grandinė vis dar neveikė :D Geriausias variantas buvo, kai vienas iš pagalbinikų, kurie turi žinot daugiau, bandė man padėt išsiaiškint kame bėda. Supratau, kad geriau būčiau neklausęs, kai pamačiau kaip įnirtingai jis maigo visus osciloskopo mygtukus iš eilės :D Jau norėjau sakyt "WTF are you doing?".
Per šį lab'ą padariau dvi esmines klaidas:
Komponentus "suspaudžiau" iki tokio lygio, kad prireikus pamatuot įtampą, negalėjau prieiti. Prasikeikiau. Nu aišku nereikia ten per visą nulinė plokštę išsiplėsti (kaip kai kurie padarė), nes dar naudosim ją kitiems laboratoriniams, bet kai aš padariau tai irgi buvo ne protingai :D
Vietoj to, kad lituočiau viską iš naujo, sėdėjau ir galvojau ką čia galima padaryt.
Likus ~20 minučių iki pabaigos, nusprendžiau viską daryti iš naujo. Ir ką jūs manot, viskas veikė puikiai. Gaila, tik, kad nebeliko laiko atlikti matavimams, ko pasekoje dabar teks pasitelkti visus bullshit'inimo sugebėjimus ir įtikinti vertintoją, kad nenumuštų per daug balų :D
O va čia tas šedevras:
Dabar žiūrint atrodo, nu kas čia sudėtingo, bet per laboratorinį kažkaip atrodė sunkiau :D