Étape 4: logiciels
L’astuce
Oui, comme tout, il y a un truc. L’astuce est qu’il n’y a jamais plus de 8 DEL allumées en même temps.
Pour que cela fonctionne bien, il faut un peu de programmation rusé. Le concept que j’ai choisie consiste à utiliser une interruption de la minuterie. Voici comment l’interruption de l’affichage fonctionne en anglais plain :
- Minuterie de compte jusqu'à un certain point, quand atteint la routine d’interruption du service est dirigé.
- Cette routine décide quelle ligne est celle qui suit s’affiche.
- Les informations relatives à la ligne suivante sont leva les yeux d’une mémoire tampon et décalés dans le pilote de la colonne (cette information n’est pas "verrouillée" n’est pas encore affichée).
- Le conducteur de la ligne est coupé, aucune LED ne s’allument actuellement.
- Le pilote de la colonne est « verrouillé » dans les informations que nous sommes passés en deux étapes il y a les informations actuelles à afficher.
- Le pilote de ligne puis fournit actuelle à la nouvelle ligne que nous sommes affichant.
- Les interrupt service routine extrémités et le programme retourne au flux normal jusqu'à la prochaine interruption.
Cela arrive très très vite. L’interruption est levée toutes les 1 ms. Cela signifie que nous sommes rafraîchissant la totalité de l’écran sur une fois toutes les 8 ms. Cela signifie un taux d’affichage d’environ 125Hz. Il y a certaines préoccupations concernant la luminosité parce que nous manquons essentiellement les LEDs à un cycle de 1/8 (ils sont 7/8 du temps). Dans mon cas, j’obtiens un écran bien lumineux doté d’aucun clignotant visible.
Le plein écran LED est tracée dans un tableau. Entre les interruptions le tableau peut être modifié (être conscient d’atomicité) et apparaîtra sur l’écran au cours de la prochaine interruption.
Les spécificités de l’écriture de code pour le Microcontrôleur AVR et de la façon d’écrire du code pour parler à des registres à décalage dépasse la portée de cette instructable. J’ai inclus le code source (écrit en C et compilé avec GCC-AVR) ainsi que le fichier hex pour programmer directement. J’ai commenté tout le code, donc vous devriez être en mesure d’utiliser ceci pour éclaircir des questions sur la façon d’entrer des données dans le registre à décalage et comment fonctionne le rafraîchissement de la ligne.
Veuillez noter que j’utilise un fichier de polices fourni avec la bibliothèque C universelle ks0108. Cette bibliothèque peut être trouvée ici : http://en.radzio.dxp.pl/ks0108/
Mise à jour :
Registres à décalage : Comment
J’ai décidé d’ajouter un peu sur la façon de programme avec des registres à décalage. J’espère que cela efface pour ceux qui n’ont pas travaillé avec eux avant.
Ce qu’ils font
Registres à décalage prennent un signal d’un fil et cette information aux nombreuses différentes broches de sortie. Dans ce cas, il y a un fil de données qui prend dans les données et 8 broches qui sont contrôlées selon les données qui a été reçu. Pour améliorer les choses, il y a un outpin pour chaque registre à décalage qui peut être connecté à la broche d’entrée d’un autre registre à décalage. Cela s’appelle en cascade et rend l’expansion potentielle une perspective quasi illimitée.
Les tiges de contrôle
Registres à décalage ont 4 points de contrôle :
- Loquet - cette broche raconte le registre à décalage lorsqu’il est temps de passer à des données nouvellement introduites
- Données - la de 1 et de 0 en disant le registre à décalage quelles épingles pour activer sont reçus sur cette broche.
- Horloge - il s’agit d’une impulsion envoyée par le microcontrôleur qui raconte le registre à décalage de prendre une lecture de données et de passer à l’étape suivante dans le processus de communication
- Activer sortie - c’est un interrupteur marche/arrêt, haut = sur, faible = Off
Ce qui en fait faire votre appel d’offres :
Voici un cours intensif dans le fonctionnement des broches contrôle ci-dessus :
Étape 1: Set loquet, données et horloge faible
- Définissant le loquet du bas indique le registre à décalage que nous sommes sur le point d’écrire dedans.
Étape 2: Broche de données définie à la valeur logique vous voulez mettre dans le registre à décalage
Etape 3: Réglage de l’horloge code pin haute, en disant le registre à décalage à lire dans la valeur de broches de données actuelle
- Toutes les autres valeurs actuellement dans le registre à décalage seront déplacera par 1 place, faire de la place pour la valeur actuelle de la logique de la broche de données.
Étape 4: Définir la goupille horloge faible et répétez les étapes 2 et 3 jusqu'à ce que toutes les données ont été envoyées pour le registre à décalage.
- La broche horloge doit avoir la valeur faible avant de changer la valeur de données suivante. Basculer cette broche entre haute et basse, c’est ce qui crée le « signal de synchronisation », la Maj s’inscrire il faut savoir de passer à l’étape suivante du processus.
Étape 5: Set loquet haut
- Cela indique de prendre toutes les données qui a été déplacées dans le registre à décalage et l’utiliser pour activer les broches de sortie. Cela signifie que vous ne verrez pas de données, tel qu’il évolue aucun changement dans la sortie de pins se produira jusqu'à ce que le loquet n’est implanté.
Étape 6: Activer sortie haute
- Il n’y aura aucune sortie d’épingle jusqu'à ce que la sortie de permettre a la valeur haute, peu importe ce qui se passe avec l’autre trois contrôlent goupilles.
- Cette broche peut toujours rester élevée si vous le souhaitez
En cascade
Il y a deux broches, que vous pouvez utiliser pour en cascade, les Os et les Os1. OS pour les horloges de hausse rapides et Os1 pour horloges montantes lentes. Accrochez cette broche à la broche de données du Registre à décalage prochain et le dépassement de la capacité de cette puce sera entré dans l’autre.
Fin de mise à jour
S’adressant à l’écran
Dans l’exemple de programme, j’ai créé un tableau d’octets 8 appelée [row_buffer]. Chaque octet correspond à une rangée de l’affichage de 8 x 8, la ligne 0 étant le fond et la ligne 7 est haut. Le bit le moins significatif de chaque ligne est sur la droite, le bit le plus significatif sur la gauche. Modification de l’affichage est aussi facile que d’écrire une nouvelle valeur à ce tableau de données, la routine d’interruption du service prend en charge l’actualisation de l’affichage.
Programmation
Programmation ne discutera pas ici en détail. Je préviens ne pas d’utiliser un câble de programmation DAPA car je crois que vous ne pourrez pas programmer la puce une fois qu’il est cadencé à 12MHz. Tous les autres programmeurs standards devraient fonctionner (STK500, MKII, Dragon, programmeurs parallèle/série, etc..).
Fusibles :
N’oubliez pas de programmer les fusibles d’utiliser le cristal de 12MHz
hfuse : 0xC9
lfuse : 0xEF
En Action
Une fois que vous programmez la puce l’affichage doit faire défiler un « Hello World! ». Voici une vidéo de la matrice de LED dans les actions. La qualité vidéo est assez faible, que j’ai fait cela avec la fonction vidéo de mon appareil photo numérique et pas une bonne vidéo ou une webcam.