Inicio > Proyectos electrónicos > Marcador (Parte 2: Lectura de la UART del módulo Bluetooth)

Cuadro de indicadores (Parte 2: Lectura de la UART del módulo Bluetooth)

Bluetooth Module 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)

  1. No hay comentarios todavía.

Protección anti-spam por WP Captcha-Free