Jau labai senai norėjau pasinagrinėti kaip veikia kamerų sensoriai. Bėda ta, kad gana daug sensorių kurius išlupau iš visokios technikos analoginiai. Kad analoginį signalą konvertuoti į skaitmena reikia dėti specializuotus ADC ar panašiai (AD9943). O tai jau daug vargo… Tačiau pakliuvo į nagus USB WEB kamera su atskiru sensorium ir Vimicro procesoriuku. Pasinaudojęs veikiančia kamera šiaip ne taip nustačiau sensoriaus pinoutą ir maždaug kokie signalai kur eina. Man labai pasisekė, kad sensorius veikia ir be nustatymų. Sensorius valdomas per I2C magistralę, bet niekas nežino kokios komandos ką daro.
Sensorius tai pusiau protinga mikroschema- užtenka paduoti taktinį dažnį (iki 30MHz) ir mikroschema atiduoda visus reikiamus signalus: PIX_CLK, HS, VS ir 10 bitų video duomenų. Pagal nutylėjima kameros sensorius dirba VGA režime (640×480) (640 tai tikrai, eilučių netikrinau).
LCD ekraniukas iš seno delninuko panašaus dydžio, tačiau jo organizacija visai kitokia. Todėl negalima pumpuoti informacija tiesiai į LCD ekraną. Reikalinga tarpinė atmintis ir kiek matematikos. Va, gavosi toks prietaisas:
Kaip pagrindas čia panaudotas mažiausias Alteros ciklonas. Dėl to ir nepilnas ekranas- paprasčiausiai neužteko vidinės atminties. Jau susiradau išorinę statinę atmintį, tai sekantis bandymas jau bus geresnis.
Kadangi ekranas monochromatinis ir vieno bito, kol kas vaizdas juodai baltas, be pilkumo atspalvių.
Čia blokinė schema vaizduojanti kaip apdorojamas signalas:
Paaiškinimas: FPGA generuoja reikiamą taktinį dažnį kameros sensoriui ir susirenka visus duomenis. Kadangi LCD ekraniukas naudoja 4 bitų interfeisą, informacija iš kameros imama po 4 pikselius ir su serial to paralel registru paverčiama 4 bitais duomenų. Atitinkamai 4 kartus sumažintas pikselių taktinis dažnis papuola į X koordinatės skaitiklį. Skaitiklio parodymai numetami su HSYNC (eilučių sinchronizacijos) signalu. Atitinkamai skaičiuojam šį signalą ir gauname Y reikšmę. Y reikšmė numetama su VSYNC (kadrų sinchronizacija) signalu.
Matematikos modulis pasiskaičiuoja pagal X ir Y reikšmes video adminties adresą ir 4 bitų duomenys įrašomi į atmintį.
Asinchroniškai, pagal pagrindinį taktinį signalą generuojami LCD ekraniuko valdymo signalai (HS, VS, PIX_CL) ir atiminties adresas. Pagal šį adresą paimami duomenys iš video RAM ir rodomi ant ekraniuko.
TO DO:
- Panaudoti išorinę atmintį ir rodyti visą ekraną
- Suorganizuoti bent kelis pilkumo lygius
- Pabandyti atburti I2C ir pareguliuoti sensoriaus parametrus
O iš viso utopinis variantas- paimti spalvotą LCD ir pakartoti visa tai spalvotai.
Galutinis galimas šio projekto variantas- didelio ekrano durų akutė 🙂
Quartus projektas (source kodas): QAR zip archyvas.
“Galutinis galimas šio projekto variantas- didelio ekrano durų akutė :)”
šitas būtų sick 🙂
cia norejai veidrodi israst ? 😀
Pirmas “to do” punktas išpildytas:
Tiesa, labai nekorektiškai. Net nesprendžiau “address bus conflict” temos. Bet kažkodėl veikia.
Kaip išorinė atmintis panaudotas SRAM iš senos P1 lygio motininės plokštės (ten korpusai paprasti, DIP)- W24512AK-20 (64 kilobaitai). 20nS kaip tik mano reikmėm 🙂
Skaitau aš tavo rašinėlius ir galvoju, kad gal ne visai absurdiški tie fantastiniai filmukai ar apsakymai kur robotai sau dalis iš laužymo prisimeistruoja (ar jiems primeistruoja).
Šaunuolis 😉 22 amžius tai, realiai 😉
gal galetum pagelbet darau kaip tik panasu dalyka man tai pat is kameros vaizda reik siusti tiesiogei i lcd ekrana, o ekranas spalvotas 132×176 20pin su atmintim, kamera tai pat turi 20pin gal patarsi nuo ko pradet, manau kad siam tikslui tiktu atmega32, na patark nes nenoriu sugadint ko nors, gal cia net papraciau nei atrodo
Pabandyk atsakyti į šiuos klausimus:
1. Ar turi sensoriaus datasheetą.
2. Ar turi LCD datasheetą.
Jei abu taip, tada galima galvoti.
Atmega gal ir tiktu, tik didelio greičio gal ir nesigautu. Neišku koks minimalus sensoriaus taktinis dažnis.