1. objectifs
Réaliser un stylo écriture sur écran à matrice de points.
2. analyse des circuits
Écriture d’écran dot matrix se compose de trois parties principales : la ligne numérisation circuit, circuit de détection de photostyle, colonne numérisation circuit représenté, bloc-diagramme ci-dessous. Photostyle utilisé ci-après installés à l’intérieur d’un capteur sensible à la lumière pour détecter l’état des points de treillis. Comme suit :
(1) scan ligne à son tour activer décodeur Y0, Y1... efficace, alors que la sortie efficace 74ls138 est faible, mais que nous utilisons est commun écran dot matrix d’anode, donc il doit être annulé, la conception utilise transistor PNP annihilée. Chaque colonne huit numérisation Numérisation une fois.
(2) colonne de balayage à son tour activer décodeur Y0, Y1... efficace et le signal PWM sur ENP1, lorsque ENP1 est élevé Y0 ~ Y7 sont tous de haut niveau, lorsque ENP1 est faible, la sortie du décodeur ABC décidée par les trois broches. Élu d’affilée nous avons vérifié à son tour Y0, Y1... et l’éclat de chaque lampe LED par ENP1 règlement.
(3) photostyle le comparateur inversant l’entrée de la lumière de photostyle et de réglage de tension référence reçue lorsque la borne d’entrée inverseur de la tension d’entrée est inférieure à cette valeur, lorsque le stylo lumière ne reçoit pas la lumière lorsque la borne d’entrée inverseur de la tension d’entrée est supérieure à cette valeur lorsqu’une certaine valeur. Lorsque le stylo lumière ne reçoit pas la lumière à travers la R3 actuel est très petite, donc l’entrée vers le comparateur inverser la tension d’entrée à proximité de la tension d’alimentation, puis la sortie du comparateur est élevée, lorsque la lumière de photostyle reçue à travers le courant augmentera de R3 grand, augmentera la tension aux bornes R3, donc l’entrée vers le comparateur inverseur de tension d’entrée est réduite , puis la sortie du comparateur est faible, alors le microcontrôleur peut capturer ce changement et ensuite faire le traitement approprié.
3. analyse du programme
Pour détecter le réseau point sur nous doit illuminer la LED sur le réseau, et c’est dans l’état de micro-lumière, lorsque la course a frappé un point lumineux, mettre ce point à souligner. Alors, comment savoir les coordonnées de ce point pour l’allumer ? Le principe est le suivant : le voyant est allumé un par un, tout d’abord la première ligne de la première, puis la première ligne de la seconde,..., 1er rang à la dernière, puis aller à la deuxième ligne de la première, le cycle LED allumé dans l’ordre, et chaque LED régler une valeur d’État, tels que la valeur de zéro indique une micro-light , 1 représentant a mis en évidence. Quand le coup léger la course d’un point si ce n’est pas le tour de ce témoin lumineux est allumée, la lumière ne détecte pas le photostyle photostyle ainsi la sortie est tenue haute, les voyants se tournent vers lorsqu’il est allumé, car la lumière émise par la plume de LED a détecté la lumière, la plume de lumière sortie du haut à faible , lorsque l’appareil détecte ce niveau modifier en entrant dans la séquence de l’interruption et obtenir la ligne actuelle, les valeurs de colonne, et à travers les lignes, colonnes, modifiez la valeur à ce point la valeur d’État est 1, afin que la prochaine fois, c’était quand ce petit peu de lumière sur ce de juger la valeur d’État est défini pour mettre en évidence de la forme. État. Quand la vitesse de balayage, nous avons vu l’écran entier matricielle est allumée et au lieu d’un lit.
Procédure de référence est la suivante :
#include
#define coloris n ° 1
#define rang 2
col int = 0 ; Marquer la ligne actuelle de scanné
int rang = 0 ; Marquez la colonne actuelle de scanné
int ledState [8] [8] ; Marque de l’état actuel de la LED
/ * haveUpdate utilisé pour éliminer la gigue photostyle, lorsque l’acquis photostyle signal front descendant lorsque les données sont mises à jour, * et cet indicateur a la valeur 1 indique que les données a été mis à jour et puis ouvrez la minuterie à la gigue de climat prochaine * puisque les données a été actualisées à la négligence de la gigue, lorsque le temps régulier à temps pour re-définir cet indicateur est 0 * /
int haveUpdate = 0 ;
void setup()
{
memset (ledState, 0, sizeof(ledState)) ; Toutes les valeurs d’État sont effacés.
initPort() ; Initialisation du port
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20) ;
TCCR2B = _BV(WGM22) | _BV(CS20) ; Indivis
OCR2A = 100 ;
OCR2B = 99 ; Cycle d’utilisation de 99 %
attachInterrupt (0, externInterrupt, tomber); //Set l’extérieur interrupt interruption de bord tombant
CLI() ; Fermez toutes les interruptions
TCCR1A = 0 ; Registre A configuré PWM, nous allons simplement utiliser la fonction timer
TCCR1B = (1 < TCNT1 = 0xFE79 ; //Counter valeur initiale, minuterie 25ms
TIMSK1 = 0 ; Fermer le débordement
SEI() ; Interrupt mondial ouvert
} ISR(TIMER1_OVF_vect) {//Timer, routine interruption service
TIMSK1 = 0 ; Interruption de débordement étroite enable
haveUpdate = 0 ; Remise à zéro indicateur
}
void loop()
{
Scan() ; Analyse cyclique
}
externInterrupt() Sub //External routine d’interruption du service
{
if(haveUpdate == 0)
{
ledState [en ligne] [colonne] = 1 ; Selon l’état des étiquettes de lignes et de colonnes qui sont actuellement détectés point
haveUpdate = 1 ;
TCNT1 = 0XFE79 ; Valeur initiale du compteur, 25ms minuterie
TIMSK1 =(1< 0)
OCR2B = 1 ;
d’autre
OCR2B = 98 ;
delayMicroseconds(300) ;
OCR2B = 98 ;
}
}
}
Conseils de PCBWayet plus d’infos sur électronique au http://e-gather.ui3g.com/.