Affichage à persistance rétinienne, ou POV display
L'expérience qui suit relevait à mes yeux, il y a peu encore, de la magie.
L'expérience qui suit relevait à mes yeux, il y a peu encore, de la magie.
Imaginez un affichage se composant d'une suite de LEDs alignées qui par un mouvement rotatif ou de balayage permet de créer, virtuellement, une matrice d'affichage identique au principe du journal lumineux.
Le principe repose sur l'effet de persistance rétinienne, trompant ainsi l'oeil, lui faisant croire qu'une suite de ligne de LED est disponible, permettant par multiplexage d'afficher un message, ou image. Nous démultiplions donc virtuellement la colonne de LED autant de fois que nous le désirerons, ou que le permettra la vitesse de traitement de notre µcontroleur.
L'algorithme d'affichage est similaire à celui de la matrice de LED.
Lors de cette expérimentation, le circuit est monté sur une platine d'essai, pour le moment la platine est statique, l'effet de mouvement est simplement donné par la caméra afin de constater le fonctionnement du code.
Le code reste basique, lors de la finalisation du projet, il faudra lui ajouter des paramètres de réglages et de synchronisation, en fonction de la vitesse de mouvement, le cycle du mouvement etc...
Video de test du premier jet de code.
Le schéma est relativement simple, les LED sont commandées par le PORTB
Le code pour le moment ne tient pas compte des paramètres de synchronisation.
Edit 2013:
Une vidéo aimablement fournie par des visiteurs du blog, Anis BOUZOUMITA et Amine DRINE basée sur ce code.
Excellent travail bravo et merci à vous deux de partager avec nous l'application finalisée.Edit 2013:
Une vidéo aimablement fournie par des visiteurs du blog, Anis BOUZOUMITA et Amine DRINE basée sur ce code.
Le code source de leur application.
30 commentaires :
salut d`avance ,vous pouvez expliquer cette partie du code
void affiche()
{
if(vitesse>=100)
{
if(rafraichir>=1000)
{
rafraichir=0;
scroll++;
}
if(i>=8)
{
i=0;
}
if(scroll>=200) //Arrivé en fin de tableau
{ //dernier caractère
scroll=0; //On revient au début
}
PORTB=ASCII[i+scroll]; //Envoi sur le portB le caractère "i" et scroll
i++;
vitesse=0;
}
}
Bonsoir,
Ce que vous me demandez là n'est pas une explication
d'une partie du code mais de TOUT le code.
Or ce n'est pas le but de mes publications,
je partage le code source afin de permettre vos propres expérimentations.
Essayez éventuellement de changer les valeurs de variable afin de comprendre le rôle.
Je fais en sorte de commenter mes codes de manière à les rendre assez parlants.
Pour apprendre le C, je vous invite à faire une recherche "Tutoriel C".
Ce que je puis vous dire afin de vous orienter dans la réflexion,
Vous avez des caractères à afficher.
Chaque caractère fait 8 colonnes x 8 lignes.
lorsque vous avez affiché ce tableau de 8x8
il vous faut l'afficher un certains temps pour que l’œil puisse le voir.
Ceci fait, vous pouvez alors afficher le caractère suivant,
puis enfin le décaler afin de le faire défiler.
A bientôt,
;)
Amine, j'étais en train de répondre que tout le projet est consultable sur cet article.
Je n'enregistre pas de rapport de projet sous Word.
A bientôt,
;)
est ce que tu peut m'envoyée ton rapport pour ce projet (format word) et merci
Voir réponse ci-dessus.
Tu as le schéma, le code source, rien de particulier à ajouter je pense.
Tu peux rapidement, monter le circuit sur une platine d'essais et comme je le montre sur la vidéo, bouger la platine afin de voir se dessiner les caractères.
Il faut pour améliorer le projet, ajouter une synchronisation de début de rotation, éventuellement une fin également pour adapter l'affichage à la vitesse de rotation.
Tu peux pour cela t'inspirer de ce qui est fait avec le projet "Horloge lumineuse".
;)
bonjour est ce que tu peut m'expliquer pour quoi tu as choisi
vitesse>=100 et rafraichir >=1000
et comment TMRO fonctionne si on engmente le nombre de caractere
Bonsoir,
Je ne comprends pas pourquoi vous avez envoyé ce message plus de 30 fois (?!)
Comme je l'ai expliqué dans l'article du journal lumineux à matrice de LED, dont le principe de fonctionnement est quasi-identique, à force de tester le principe de fonctionnement, afin d'avoir un multiplexage efficace, c'est à dire, LED suffisamment éclairées et sans scintillement, les variables de temps "vitesse" et "rafraichir" ont ces valeurs parce qu'elles sont optimales.
Un théoricien peut obtenir ces valeurs par calcul, moi je suis un praticien, dont j’essaie jusqu'à obtenir le meilleur rendu visuel.
Quant à TMR0 j'utilise une fréquence suffisamment rapide pour cadencer correctement le rafraichissement des LEDs, donc pour répondre, le nombre de lettre importe peu sur la cadence.
Il ne faut pas oublier que ce montage finalement ne simule qu'une seule matrice de LED 8x8.
;)
je l'envoyer plusieur fois grace al cannxion est tres faible
merci pour l'explication
un autre question
comment fait l'appel d'une chaine de caractere dans code ascii
comme suit on declare tout le caractere avec le code ascii
en suite juste on ecrit le chaine que doit l'afficher
Bonjour,
Dans le présent code, la chaine de caractère se fait dans le tableau en code ASCII.
Je n'avais pas mis de routine pour établir un index d'une chaine de caractère sur le tableau ASCII.
Ce code était juste une démonstration de fonctionnement basique du principe d'afficheur à persistance rétinienne.
;)
bonjour
est ce que tu peut me donner le code comment faire un image avec matrice 8x8 par exemple une fleur un simple image et merci
;)
Bonjour,
Tu as dans la section téléchargement un petit utilitaire nommé "EditChar" spécialement développé pour la matrice 8x8.
N'hésite pas à poster photo et vidéo de ton montage.
;)
bonjour, svp, je compile le code, j'ai tjr le problème au niveau de la déclaration de Spi_advanced, j'utilise mikroc ver 8
Bonsoir,
Sami, Afin de mieux vous répondre, il serait bien de continuer une conversation dans le même article lorsqu'il s'agit du même sujet.
Donc, comme je vous l'ai indiqué dans l'article du journal lumineux, vous avez l'exemple d'un même code utilisant le SPI en version non pro et en version pro.
L'un publié dans l'article, et l'autre, à télécharger en fin de ce même article.
Il ne suffit pas de changer uniquement SPI_Advanced. mais également le nom des variables contenues entre les parenthèses de la fonction.
Encore une fois, consultez les deux codes afin de les comparer, ou lisez la DOC de Mikroc il y a une rubrique concernant les changements entre la version non pro et la pro.
Mais en comparant simplement les deux versions de code que je vous ai cité, vous aurez ce qu'il faut pour effectuer les changements.
L'article sur le 595 est la première étape qu'il faut comprendre pour ensuite réaliser le journal lumineux.
Tenez moi au courant,
;)
merci de m'avoir répondu, ça marche pour la compilation, mais au niveau de l'affichage,les lettres ne s'affichent pas correctement, il y'a que des lignes verticales qui s'affichent. merci pour votre intérêt.
bonjour tu peut me repondre a quelque question
le temps d'affichage d'un colone?
le temps d'affichage d'un caractere?
le nombre de repetition?
Bonjour,
@Am Am,
Vous pouvez très bien retrouver ces valeurs par vous même, le code source étant fourni, tout est disponible.
Vous avez la fréquence du quartz, donc l'horloge, il vous suffit de calculer la fréquence d'interruption, et vous aurez réponse à toutes vos questions.
Si vous avez la "flemme" de calculer, vous pouvez toujours poser des points de test dans le code ainsi à l'aide du debugger vérifier les timings des différentes variables.
Comprenez que j'ai composé ce code il y a de cela 3 ans, que je n'ai plus les chiffres en tête.
@Sami,
Je suis ravi que vous ayez pu corriger votre code.
Nous sommes dans l'article de l'afficheur aérien, votre question concerne la matrice 8x8 ou les 8 LEDs en mouvement?
Vos essais se font en simulation ou sur un montage réel?
A bientôt,
;)
bonjour tu vas bien? ok t as raison je doit poser mon travail mais est ce que tu peut me donner ton nom?pour une ptite animation :)
merci
Bonjour,
je ne comprends pas bien le message.
Anis = Am am (??)
;)
oui
anis = am am = amine d = amdr amdr
c la meme compte moi et mon binom
en fait le projet en 2
en voit moi ton nom pour faire un petit video
Bonsoir,
enchanté Anis.
Si tu dois faire une video, ce qui me ferait plaisir
serait que tu mettes HeartyGFX plutôt que mon prénom, que personne ne connait.
Cela dit cela ne me dérange pas de le donner en privé.
Merci pour l'intention, j'ai hâte de voir cette vidéo.
;)
ok avec plaisir :)
salut ami c est une petite animation pour vous :)
http://www.youtube.com/watch?v=kDGtaOCUvjg&feature=youtu.be
Voilà qui est excellent!
Je me suis permis de l'intégrer dans l'article.
Je n'ai pas le nom de votre binôme, je le rajouterais dès que vous me l'aurez communiqué.
Je vous remercie de ce petit hommage, c'est très sympathique.
Si vous désirez partager votre code source, je mettrais un lien sous la vidéo.
;)
comment fait pour partager le code
Faites moi parvenir votre e-mail, je ne le publierais pas, bien entendu.
Je vous enverrais un mail, ainsi en réponse vous me faites parvenir votre fichier.
;)
http://www.youtube.com/watch?v=r1vbt-rHAzk&feature=youtu.be
Merci Anis, sur cette vidéo, les visiteurs peuvent voir le montage des platines. Cela pourra aider ceux qui veulent se lancer dans un projet de ce type.
Comme je l'expliquais à votre binôme, il ne vous reste plus qu'à réaliser d'autres projets basés sur ce code, par exemple sur roue de vélo, ou encore en forme de sphère.
Une recherche sur google:
POV Wheel display
ou encore
Spherical POV display
Pour donner des idées.
;)
salut
j'ai besoin de editchar.
mon email est de fetti018@gmail.com
mercie d'avance
Bonjour,
L'utilitaire EditChar se trouve dans la section "Téléchargement" - voir le lien en haut de page sous l'entête du site -.
N'hésitez pas à montrer votre réalisation.
A bientôt,
;)
Enregistrer un commentaire