Cuadro de indicadores (Parte 2: Lectura de la UART del módulo Bluetooth)
En este post, usted encontrará cómo el módulo Bluetooth interactúa con el ATTINY45 en el Cuadro de Indicadores de VGA proyecto.
El módulo Bluetooth esperar una conexión desde un dispositivo (por ejemplo, un teléfono con Android) y actuará como un SPP (Serial Port Profile) volver a pasar todo lo recibido desde el dispositivo a la interfaz UART. En nuestro caso el ATtiny leerá los datos, pero no "hablar de nuevo" en el módulo, por lo que es realmente una comunicación de una vía desde ese punto de vista.
Eléctricamente hablando, sólo necesitamos un cable para conectar el pin TXD del módulo Bluetooth (PIN 1) a la PB5 (PIN 1) de la ATtiny, que se configura como una entrada.
Ahora la parte difícil está en el lado del firmware del microcontrolador, ya que tenemos que leer la entrada sin interrumpir la temporización VGA. Nuestro ATtiny está funcionando a 20 Mhz que da 0.05μs por ciclo, en el programa en el bucle principal se basa en los tiempos horizontales VGA para que podamos leer la entrada de cada 635 ciclos (31.75μs). En el otro lado del módulo BT está configurado a 2400 baudios lo que significa que cada bit durará 416.66μs. Por lo tanto, haciendo un cálculo rápido, 416,66 / 31,75 = 13,12, es decir, cada bit será leído unas 13 veces. Vamos a suponer la lectura # 7 como una válida y que no hará ningún tipo de control.
La UART va a enviar un "alto" de la señal cuando está inactivo, tan pronto como se obtiene un "bajo" sabemos que el "bit de inicio" está llegando, por lo que establecer una marca global y empezar a leer los 8 bits y su puesta en un registro (r19). Usted puede leer más acerca de UART en este artículo de Wikipedia . Nosotros usamos otro registro (R25) como un contador, para saber cuándo dejar de leer y la lectura.
Así es como el aspecto del código:
; ; UART leer la entrada ; Este código se ejecuta cada 635 ciclos en el código Marcador ; en el R18, _SFR_IO_ADDR (PINB), 1 reloj de cpi r25, 0 BREQ waitlow inc r25 mov r16, r25 andi r16, 0x0F cpi R16, 7 brne chkfornext5togo LSR r19 SBRC R18, INPUT Ori r19, 0x80 nop rjmp chkfornext chkfornext5togo: nop nop nop nop nop chkfornext: cpi r16, 14 brne chkend3togo subi R25, 0xEF, añadir 17 andi r25, 0xF1 rjmp chkend chkend3togo: nop nop nop chkend: nop rjmp hsyncoff waitlow: ; La espera de baja SBR R18, INPUT inc r25 nop delay3x 4 nop nop rjmp hsyncoff hsyncoff: ...... HSYNC código de ...... ...... Si R25 == 0x91 entonces la UART se leen y se almacenan en el R19 ...... ...... procesar y restablecer ambos registros ....
Como se lee un byte a la vez, parece muy conveniente para nuestro proyecto para definir un conjunto de "comandos" (de un byte de longitud), para fijar los caracteres que deben ser exhibidos (cuatro comandos para ajustar cada uno de los personajes), y, además, otro comando para mostrar pequeña plaza en las esquinas de la pantalla que indicará que está sirviendo actualmente.
Aquí está nuestra lista de comandos:
0 0 0 1 DDDD (carácter 1) [0-D] -> 0 1 2 3 4 5 6 7 8 9 (ESPACIO) del Consejo Directivo 0 0 1 0 DDDD (carácter 2) 0 0 1 1 DDDD (carácter 3) 0 1 0 0 DDDD (carácter 4) 0 1 0 1 0 0 0 1 (servir a un superior) 0 1 0 1 0 0 1 0 (servir a la parte inferior B) 0 1 0 1 0 1 0 0 (servir a un superior) 0 1 0 1 1 0 0 0 (sirven de fondo b)
Todo lo que necesitamos ahora es un dispositivo para conectar al módulo bluetooth y enviar los comandos.
No te pierdas la parte final de este proyecto, que voy a publicar pronto como los códigos fuente y un controlador desarrollado para las plataformas Android.
Configuración del módulo Bluetooth con Arduino
El módulo Bluetooth viene con un firmware llamado "linvor1.5" por defecto (por lo menos el de DX). Para programarlo, tiene que enviar una serie de comandos AT a través de los pines de TX / RX, Arduino parece ser ideal para esta tarea. Conecte dos cables entre el TX / RX de la Arduino y el RX / TX del módulo Bluetooth (que necesitan para ser cruzado, RX con TX y TX con RX). A continuación, poner el siguiente código en el Arduino:
int incomingByte = 0; / / para datos en serie entrantes void setup () { Serial.begin (9600); Serial.print ("AT"); } void loop () { / / Enviar los datos sólo cuando recibe datos: if (Serial.available ()> 0) { / / Lee el byte de entrada: incomingByte = Serial.read (); / / Decir lo que tienes: Serial.write (incomingByte); } }
Subir a la Arduino y haga clic en el monitor, usted recibirá la siguiente respuesta:
Ahora vamos a cambiar el nombre predeterminado de "marcador", para ello, sustituir el Serial.print("AT") , con Serial.print("AT+NAMEscoreboard") y repita el procedimiento.
Por último, tenemos que establecer la velocidad de transmisión hasta 2400, con el siguiente comando: Serial.print("AT+BAUD2")
Comentarios y preguntas son bienvenidas!
Artículos Relacionados
Marcador (1 ª parte: la señal VGA de un ATTINY45)
