Spela video på nokia färg LCD med en ATmega32
Hej
Jag införa min nya videospelare görs med hjälp av en atmega32 mikrokontroller och nokia färg LCD. Jag fick en 65K cologne LCD från en gammal nokia 6030 mobil telefon. Jag lödda direkt 10 tunn färgad hästhandlare kabel från 0,5 cm kvadrat området av tunna flexibla pcb av LCD-skärmen till en berg band fast på en annan ombord. För mig var den svåraste delen av detta projekt eftersom jag inte har någon liten spets lödkolv och en LCD-kontakt (5 x 2) uttag med mig.
Efter som jag kopplats ihop lcd med atmega32 via SPI. Sedan initiera LCD-skärmen och visas några färgmönster och bekräftade LCD fungerar.
Mitt nästa steg är nu att visa en stillbild på LCD-skärmen. Jag använde python bildbibliotek extrahera pixelinformation från valfri bildfil (jpeg, png etc) jag och strömmas till avr via uart med pyserial visas bilden framgångsrikt på LCD med 16-bitars färgdjup.
Efter att jag använt ett SD-kort för att lagra den konverterade pixel information (132 x 132 * 2) byte/bilden. Då jag kopplats ihop SD-kort med samma SPI för atmega32 och visas bilden lagras på den. Jag använde FAT16-filsystem. Den sd kort delen är inte ett problem för mig eftersom jag redan gjort fler projekt på SD/MMC-kort och jag kopierade min föregående kod för detta.
Så efter visning stillbilden, jag tänkte göra ett bildspel på LCD-skärmen. Som skrev jag ett python-skript att konvertera alla bilder i en mapp (på min dator) till en 132 x 132 x 2 byte filer som är ingenting annat än den okomprimerade pixelinformation som nya filer. Då jag kopierade alla dessa konverterade filer till SD-kort (file.lcd) och visas dem som en bild bildspel med 1 sekund tidsglapp mellan varje bild.
Eftersom jag gjorde framgångsrikt bild bildspelet, då plötsligt idén att göra en video-spelare kom till mig. Eftersom videon är ingenting annat än ett bildspel på hög bildhastighet.
Härifrån börjar detta projekt.
Då började jag söka i google, Hur konvertera en video till fortfarande ramar. Jag kom att veta om ffmpeg program. Jag använder linux alltid. Jag har hämtat ffmpeg och konverteras en prov video till ramar på 15 stommen/andra & 132 x 65 upplösning. Då Använd jag min python-skript för att konvertera alla bilder till pixelinformation på 16 bitar/bildpunkt. Här istället för att göra små små filer, jag bara samlat all bildinformation intilliggande bildrutor i en enda fil och benämn så my_video.lcd. Sedan jag kopierat filen till minneskort och modifierade avr programmet ska visas på LCD-skärmen. Det komma åt filsystemet FAT16, då söka för *.lcd filer och om hittas returneras start kluster adressen till filen och sedan strömma klustret till LCD-skärmen mycket snabbt. Nu spelas VIDEO (utan ljud)!!! .... Nästan hälften av projektet är klar...
Nästa hälften: (ljudmixning)
Jag spelade 15 fps 16 bit/pixel på LCD-skärmen. Nu kommer nästa huvudvärk. Video bör ha ljud. :-(.... Då började jag tänka hur man inkluderar ljud. Jag brukade ffmpeg(in pc) för att extrahera ljud från video filen till 8-bitars mono wav. Eftersom wav är okomprimerat ljud, är det lätt att hantera den med en mikrokontroller med hårdvara PWM. Sedan ändrade jag min python skript. Jag bara öppnade wav-fil och kasseras första 44 byte (wav huvud) och sedan efter det, jag läste ljud provet byte för byte och injiceras det mellan videon information efter några beräkningar (se matten nedan) relaterade till bithastigheten för både ljud och video till besluta det blandande förhållandet.
För perfekt ljud video synkronisering genomfört jag en felkod korrigering i omvandlaren, som övervakar synkroniseringsfel medan mixning ljud byte och när felet når den lägsta tröskelvärden (1 byte audio prov fel), det skriver en dummy audio prov istället för real audio prov och därmed förhindrar ansamling av fel och därmed perfekt ljud video synkronisering uppnås för timmen av kontinuerlig video avspelningen...
Nu när jag konstruerade min egen video format ("video_with_audio.vin" för min spelare;-). Nu i avr, behöver jag extrahera ljud och bild och behöver skicka ljudet till en audio cirkulär buffert som kommer att skicka till PWM med hjälp av en timer avbrott och video direkt till LCD. Om någon enda byte matchningsfel inträffat mellan video och ljud byte, kommer varje sak få kollapsade. Jag ändrade då avr koden göra som ovan och slutligen jag spelade video med ljud! :-)
För källkod och mer detaljer, besök min blogglänk:
http://blog.vinu.co.in/2012/06/AVR-Video-Player-on-Nokia-Color-LCD.html