1. objetivos
Conseguir una pluma de escribir en la pantalla de matriz de puntos.
2. Análisis de circuito
Escritura de pantalla de matriz de punto consta de tres partes principales: la fila análisis, columna de análisis de circuito mostrado, pluma ligera detección circuito, diagrama de bloque. La pluma de luz utiliza aquí instalada dentro de un sensor sensible a la luz para detectar el estado de los puntos del enrejado. Como sigue:
(1) línea de exploración permiten a su vez decodificador Y0, Y1... eficaz, mientras que eficaz 74ls138 salida es baja, pero estamos utilizando es común pantalla de matriz de puntos del ánodo, por lo que debe ser negado, el diseño utiliza transistores PNP niega. Cada columna ocho escaneo escaneo una vez.
(2) columna de análisis a su vez activar decodificador Y0, Y1... efectiva y la señal PWM en OE1, cuando OE1 alto Y0 ~ Y7 son todos de alto nivel, cuando OE1 es baja, la salida del decodificador ABC decidido por los tres pernos. Elegido en una fila se comprueban a su vez Y0, Y1... y el brillo de cada LED de la lámpara por Reglamento OE1.
(3) pluma de luz el comparador invierte la entrada de la luz de ajuste y pluma de luz de voltaje de referencia recibidos cuando el terminal de entrada inversora de la tensión de entrada es menor que este valor, cuando el lápiz no recibe la luz cuando el terminal de entrada inversora de la tensión de entrada es superior a este valor cuando un determinado valor. Cuando el lápiz no recibe la luz a través de la R3 actual es muy pequeña, por lo que la entrada para el comparador invertir cerca de la tensión de alimentación, voltaje de entrada y la salida del comparador es alta, cuando la luz de la pluma de luz recibida a través de la corriente aumentará de R3 grande, aumente el voltaje en R3, por lo que se reduce la entrada para el comparador de voltaje de entrada de inversión , entonces la salida del comparador es baja, entonces el microcontrolador puede capturar este cambio y luego realizar el tratamiento adecuado.
3. programa de análisis
Para detectar el enrejado del punto en debe iluminar el LED en el enrejado, y es en el estado de micro-light, cuando el recorrido de un punto de luz, poner este punto para resaltar. Entonces, ¿cómo sabemos que las coordenadas de este punto a la luz? El principio es este: el LED está encendido una por una, primero la primera línea de la primera, entonces la primera línea de la segunda,..., primero de la fila a la última de ellas y luego ir a la segunda línea de la primera, el ciclo LED enciende secuencialmente, y configurar cada LED un valor de estado, tales como el valor de cero indica un micro-light , 1 representante puso de relieve. Cuando el luz golpeó el movimiento de un punto si no es el turno de este LED está iluminado, la luz no detecta la luz de la luz pluma por lo que la salida se mantiene alto, las luces LED se hacia cuando está encendida porque la luz emitida por la pluma del LED detecta la luz, la pluma de luz de salida de alta a baja , cuando el aparato detecta este nivel cambia al entrar en la secuencia de la interrupción y obtener la fila actual, los valores de la columna, y a través de las filas, columnas, modificar el valor en este punto el valor de estado es 1, por lo que la próxima vez fue cuando este poco de luz en esto de juzgar el valor de estado se establece en forma de destacar. Estado. Cuando la velocidad de exploración que vimos la pantalla de matriz de punto entero se iluminó y en lugar de uno por uno encendida.
Procedimiento de referencia es el siguiente:
#include
#define COL 1
#define fila 2
int col = 0; Marca la fila actual de la escaneada
int fila = 0; Marca la columna actual de escaneados
int ledState [8] [8]; Marca el actual estado del LED
/ * haveUpdate para eliminar a pluma ligera inquietud, cuando la pluma de la luz adquirida flanco descendente de la señal cuando los datos se actualizan, * y esta bandera se encuentra 1 indica que los datos se ha actualizado y luego abren el temporizador en la siguiente inquietud de clima * puesto que los datos se ha actualizado a la negligencia de la inquietud, cuando el tiempo regular a la hora de volver a esta bandera es 0 * /
int haveUpdate = 0;
void setup()
{
memset (ledState, 0, sizeof(ledState)); Se borran todos los valores de estado.
initPort(); Inicialización del puerto
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20); Sin repartir
OCR2A = 100;
OCR2B = 99; Ciclo de servicio del 99%
attachInterrupt (0, externInterrupt, caer); //Set externo interrumpir interrupción de borde descendente
CLI(); Cerrar todas las interrupciones
TCCR1A = 0; Registro A configurado PWM, simplemente utilizaremos la función del temporizador
TCCR1B = (1 < TCNT1 = 0xFE79; valor inicial de //Counter, contador de tiempo de 25ms
TIMSK1 = 0; Cerca de desbordamiento
SEI(); Interrupción global abierta
} ISR(TIMER1_OVF_vect) {rutina //Timer interrupción servicio
TIMSK1 = 0; Cerrar habilitar interrupción desbordamiento
haveUpdate = 0; Bandera de RESET
}
void loop()
{
Scan(); Análisis cíclico
}
anular la rutina de servicio de interrupción de //External de externInterrupt()
{
if(haveUpdate == 0)
{
ledState [fila] [col] = 1; Según el estado de las etiquetas de fila y columna que se detectan actualmente punto
haveUpdate = 1;
TCNT1 = 0XFE79; Valor inicial del contador, temporizador de 25ms
TIMSK1 =(1< 0)
OCR2B = 1;
otra cosa
OCR2B = 98;
delayMicroseconds(300);
OCR2B = 98;
}
}
}
Tableros de PCBWayy más sobre electrónica en http://e-gather.ui3g.com/.