Go Down

Topic: [APL] Vidéo avec Arduino, afficher sur moniteur (Read 10 times) previous topic - next topic

Benoît ROUSSEAU

Apr 16, 2007, 11:02 pm Last Edit: Apr 16, 2007, 11:03 pm by Benoit Reason: 1
Bonsoir à tous,

 Cela faisait longtemps, je vois que le forum français tourne et ça me fait vraiment plaisir :).

 Pour ce retour je vous amène un expérimentation qui je pense va susciter des programmes, exalté les amoureux du "lowtech", ...

 Une carte vidéo !

 Oh biensur elle est rudimentaire et plein de choses restent à faire car se n'est qu'un début expérimentation... Il va falloir passer la routine d'afichage sous interruption, faire reluire quelques recoins de code, ... mais ça fonctionne et c'est un bon point de départ.

 Dans le prochain billet, une ou deux captures d'écran pour vous mettre l'eau à la bouche, dans le suivant la partie physique (harware) et enfin le code (software). Wooooh, c'est partit...
Cordialement,
Benoît ROUSSEAU

Benoît ROUSSEAU

L'image complète


Détail pour voir LE niveau de gris :)
Cordialement,
Benoît ROUSSEAU

Benoît ROUSSEAU

#2
Apr 16, 2007, 11:27 pm Last Edit: Apr 17, 2007, 01:09 am by Benoit Reason: 1
Alors, passons aux choses sérieuses...

La partie électronique est accessible à n'importe qui !

Il faut générer quelques tensions distinctes pour génrérer un signal vidéo composite avec un niveau de gris : 0V, 0,3V, 0,77 et 1V. Pour cela il faut réaliser un convertisseur numérique analogique 2 bits !

je me suis insipré du schéma donné ici : (c) le propriétaire


On peux faire plus simple mais j'aime bien l'idée des diodes "anti retour".

Pour ma part j'ai câblé ça à la gros porc sur un bout de ciruit récupéré dans mon bazar. Je n'avais pas de résistanec de 330 j'ai donc mis un potar réglé sur 330 Ohms.



La résistance de 1K est relièe à la broche D8 (via diode) de l'Arduino et la résistance de 330 est reliée à la broche D9 (via diode). Biensur, la masse est reliée à l'une des broches GND de l'Arduino.

Il faut ensuite connecté une prise (RCA, CINCH, ..) à la sortie. La "patte" centrale du connecteur au point où toutes les résistances se rejoignent ("to tv" sur le schéma) et la partie externe ronde du connecteur à la masse.

Difficile de faire plus simple !
Cordialement,
Benoît ROUSSEAU

Benoît ROUSSEAU

Il nous faut maintenant connaitre quel est le signal à générer pour obtenir une image.

Je vous invite à consulter pour cela cette page. Elle est en anglais (aïe !) mais c''est de loin la plus complète que j'ai trouvé. Il y a l'essentiel : http://www.retroleum.co.uk/PALTVtimingandvoltages.html.

Cherchez sur un moteur de recherche, il existe peut être des pages en français... Si vous trouvez, postez le lien, cela interessera les anglophobes. Merci pour eux.
Cordialement,
Benoît ROUSSEAU

Benoît ROUSSEAU

Pas d'explications cela serait trop long :( !

Si vous avez des questions, j'y repondrai...

----

MAIS ATTENTION !

AFIN QUE TOUT FONCTIONNE BIEN, IL VOUS FAUDRA BRICOLER UN PEU !

LES INTERUPTIONS INDESIRABLES DOIVENT ËTRE DESACTIVEES. EN PARTICULIER L'INTERUPTION DE DEBORDEMENT DU TIMER 0 DESTINE A GERER LES FONCTIONS Delay() ET Millis().

Pour cela, recherchez dans votre répertoire d'installation d'Arduino le fichier "wiring.c". Il se trouve normalement dans le chemin "\arduino-0007\lib\targets\arduino". Faites en une copie, renomez la en "wiring.bak" puis ouvrez le fichier "wiring.c" en édition (avec le bloc note de Windows par exemple).

Dans le fichier, recherchez les lignes :

Code: [Select]
// enable timer 0 overflow interrupt
#if defined(__AVR_ATmega168__)
     sbi(TIMSK0, TOIE0);
#else
     sbi(TIMSK, TOIE0);
#endif


qui se trouvent dans la fonction "main ()".

Mettez en commentaire cette partie de code avec "/*" et "*/" comme ceci :
Code: [Select]
/*
// enable timer 0 overflow interrupt
#if defined(__AVR_ATmega168__)
     sbi(TIMSK0, TOIE0);
#else
     sbi(TIMSK, TOIE0);
#endif
*/


et, sauvegardez le fichier.

Tant que ces lignes seront en commentaires, ous ne pouvez plus utiliser millis() et delay() dans vos programmes ! Pour d'autres projets, vous devrez donc réouvrir "wiring.c" et dé-commenter ces lignes. Ou effacer "wiring.c" et renommer "wiring.bak" en "wiring.c".

Le code qui suit à été testé avec sur un ATMEGA8 inséré sur une Arduino NG. Mais il n'y a aucune raison qu'il ne fonctionne pas sur n'importe quelle Arduino.



Cordialement,
Benoît ROUSSEAU

Go Up