Salut
Je vais présenter mon nouveau lecteur vidéo faite en utilisant un atmega32 microcontrôleur et nokia couleur LCD. J’ai reçu un 65K couleurs LCD d’un vieux portable nokia 6030. J’ai soudé directement 10 fil mince coper émaillé de la zone de 0,5 cm carrés du circuit imprimé flexible mince de l’écran LCD à une bande de berg, fixée sur un autre bord. Pour moi, c’était la partie la plus difficile de ce projet parce que je n’ai pas un fer à souder bout minuscule et un connecteur lcd (5 x 2) avec moi.
Après cela, j’ai couplé l’écran lcd avec atmega32 via SPI. Puis initialisé l’écran lcd et affiche certaines tendances couleur et confirmé l’écran LCD fonctionne.
Maintenant ma prochaine étape est d’afficher une image fixe sur l’écran LCD. J’ai utilisé la bibliothèque python pour extraire des informations de pixel de n’importe quel fichier image (jpeg, png, etc.) et j’ai écoutés il à avr via uart avec pyserial et affiche l’image sur l’écran LCD avec la profondeur de couleur 16 bits.
Après cela, j’ai utilisé une carte SD pour stocker l’informations (132 x 132 * 2) convertir pixel octets/photo. Puis j’ai relié la carte SD avec SPI même d’atmega32 et affiche l’image stockée sur elle. J’ai utilisé le système de fichiers FAT16. La partie de carte sd n’est pas un problème pour moi parce que je l’ai déjà fait plus de projets sur des cartes SD/MMC et j’ai copié mon code précédent pour cela.
Donc après l’affichage de l’image fixe, j’ai pensé faire un diaporama sur l’écran lcd. Pour cela, j’ai écrit un script en python pour convertir un 132 x 132 x 2 fichiers octet toutes les images dans un dossier (sur mon pc) qui n’est rien d’autre que les informations de pixel non compressées stockées sous forme de nouveaux fichiers. Ensuite, j’ai copié tous ces fichiers convertis sur carte SD (file.lcd) et les affiche sous la forme un image diaporama avec écart de temps de 1 seconde entre chaque image.
Étant donné que j’ai fait avec succès le diaporama de l’image, puis tout à coup l’idée de faire un lecteur vidéo vint à mon esprit. Parce que la vidéo n’est rien d’autre qu’un diaporama à haute cadence.
De là, ce projet commence.
Puis j’ai commencé à chercher dans google, comment faire pour convertir une vidéo encore de cadres. J’ai appris à connaître tout programme ffmpeg. J’utilise linux toujours. J’ai téléchargé ffmpeg et convertir une vidéo de l’échantillon aux montures à 15 images/seconde et 132 x 65 résolution. Puis j’ai utilisé mon script python pour convertir chaque images fixes à des informations de pixels à 16 bits/pixel. Ici au lieu de faire des petits fichiers petites, j’ai juste rassemblé toutes les informations de photo d’images adjacentes dans un seul fichier et nommé my_video.lcd. Ensuite, j’ai copié ce fichier sur la carte mémoire et modifié le programme d’avr pour l’afficher sur l’écran LCD. Accéder au système de fichier FAT16, puis recherchez les fichiers *.lcd et si trouvé, il renvoie la mise en marche cluster adresse de ce fichier et ensuite diffuser ce cluster à l’écran LCD très rapide. MAINTENANT la vidéo est lue (sans audio)!!! .... Près de la moitié du projet est terminée...
Prochaine moitié: (mixage audio)
J’ai joué 15 images/s, 16 bits/pixel sur l’écran lcd. Maintenant vient le prochain casse-tête. La vidéo devrait avoir audio. :-(.... Puis j’ai commencé à penser comment inclure audio. J’ai utilisé ffmpeg(in pc) pour extraire l’audio du fichier vidéo au format wav mono de 8 bits. Wav étant audio non compressé, il est facile à manipuler à l’aide d’un microcontrôleur avec matériel PWM. Ensuite, j’ai modifié mon script python. J’ai juste ouvert le fichier wav et jeté les 44 premiers octets (en-tête de wav) et puis après ça, j’ai lire l’extrait audio, octet par octet et elle injecté entre les informations vidéo après que quelques calculs (voir le calcul ci-dessous) liée à la vitesse de transmission de l’audio et la vidéo pour trancher le rapport de mélange.
Pour la parfaite synchronisation audio vidéo, j’ai mis en place un code de correction d’erreur dans le convertisseur, qui surveille l’erreur de synchronisation, alors qu’en mélangeant les octets de l’audio-vidéo et lorsque l’erreur atteint la valeur seuil minimal (erreur d’échantillonnage audio 1 octet), il écrit un échantillon audio factice au lieu de l’échantillon réel audio et empêche ainsi l’accumulation de l’erreur et ainsi la parfaite synchronisation vidéo audio est atteint pour des heures de lecture vidéo en continu...
Maintenant, j’ai créé mon propre format vidéo (« video_with_audio.vin » pour mon lecteur;-). Maintenant en avr, j’ai besoin d’extraire l’audio et la vidéo et ont besoin d’envoyer l’audio sur un tampon circulaire audio qui sera envoyer à PWM à l’aide d’un timer interrupt et la vidéo directement sur l’écran LCD. En cas de toute incompatibilité octet unique entre l’octet audio et vidéo, chaque chose obtenir s’est effondré. Ensuite, j’ai modifié le code avr de faire comme avant et enfin j’ai joué vidéo avec audio ! :-)
Pour le code source et plus de détails, visitez le lien de mon blog :
http://blog.vinu.co.in/2012/06/Avr-Video-Player-on-Nokia-Color-LCD.html