Tableau de bord (partie 2: Lecture UART du module Bluetooth)
Dans ce post, vous trouverez comment le module Bluetooth interagit avec le ATTINY45 dans le tableau de bord VGA projet.
Le module Bluetooth attente d'une connexion à partir d'un périphérique (par exemple un téléphone Android) et agira comme un SPP (Serial Port Profile) re-passage tout reçu de l'appareil à l'interface UART. Dans notre cas, le ATtiny va lire les données, mais ne sera pas «parler de retour" pour le module, donc c'est vraiment une communication à sens unique de ce point de vue.
Électriquement parlant, nous avons juste besoin d'un fil pour relier la broche TXD du module bluetooth (PIN 1) à l'PB5 (PIN 1) de la ATtiny, qui sera configuré comme une entrée.
Maintenant, la partie la plus délicate est sur le côté du firmware du microcontrôleur, depuis que nous avons besoin de lire l'entrée sans perturber le calendrier VGA. Notre ATtiny fonctionne à 20Mhz ce qui donne 0.05μs par cycle, dans le programme de la boucle principale est basée sur les synchronisations VGA horizontales afin que nous puissions lire l'entrée tous les 635 cycles (31.75μs). De l'autre côté du module BT est configuré à 2400 bauds ce qui signifie que chaque bit durera 416.66μs. Donc, en faisant un calcul rapide, 416,66 / 31,75 = 13,12, ce qui signifie chaque bit sera lu environ 13 fois. Nous supposons que le lire N ° 7 que celui valable et nous n'allons pas le faire n'importe quel type de contrôles.
L'UART sera l'envoi d'une "haute" signal lorsque est inactif, dès que nous aurons un «faible», nous savons que le "bit de départ" est arrivée, nous avons donc mis un drapeau global et commencer à lire les 8 bits et de les mettre en un registre (r19). Vous pouvez en savoir plus sur UART sur cet article de Wikipedia . Nous utilisons un autre registre (r25) comme un compteur, pour savoir quand à lire et à arrêter la lecture.
C'est ainsi que le code ressemble à:
; ; UART lecture d'entrée ; Ce code est exécuté tous les cycles de 635 dans le code tableau de bord ; en r18, _SFR_IO_ADDR (PINB); 1 horloge 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; ajoutez 17 andi r25, 0xF1 rjmp chkend chkend3togo: nop nop nop chkend: nop rjmp hsyncoff waitlow: ; D'attente à faible SBR r18, INPUT inc r25 nop delay3x 4 nop nop rjmp hsyncoff hsyncoff: ...... Code HSYNC ...... ...... si r25 == 0x91 puis l'UART est lu et stocké dans r19 ...... ...... de traiter et de réinitialiser les deux registres ....
Depuis que nous avons lu un octet à la fois, il semble assez pratique pour notre projet visant à définir un ensemble de "Commandes" (d'un octet de long), pour définir les caractères qui doivent être affichées (quatre commandes pour configurer chacun des personnages), et en outre une autre commande pour afficher petit carré sur les coins de l'écran qui vous indiquera qui purge actuellement.
Voici notre liste des commandes:
0 0 0 1 DDDD (caractère 1) [0-D] -> 0 1 2 3 4 5 6 7 8 9 (SPACE) BOG 0 0 1 0 DDDD (caractère 2) 0 0 1 1 DDDD (3 caractères) 0 1 0 0 DDDD (caractère 4) 0 1 0 1 0 0 0 1 (A servir en haut) 0 1 0 1 0 0 1 0 (en bas servent B) 0 1 0 1 0 1 0 0 (A servir en haut) 0 1 0 1 1 0 0 0 (servir de fond b)
Tous nous avons besoin maintenant est un appareil pour se connecter au module bluetooth et d'envoyer les commandes.
Ne manquez pas la dernière partie de ce projet, que je vais publier bientôt y compris les codes sources et un contrôleur développé pour les plates-formes Android.
Configuration du module Bluetooth avec Arduino
Le module bluetooth est livré avec un firmware appelé "linvor1.5" par défaut (du moins celle sur le modèle DX). Pour le programmer, vous devez envoyer une série de commandes AT via les broches TX / RX, Arduino semble être idéal pour cette tâche. Branchez deux câbles entre le TX / RX de l'Arduino et le RX / TX du module Bluetooth (ils ont besoin pour être traversé, RX avec TX et TX avec RX). Ensuite, mettez le code suivant sur l'Arduino:
int incomingByte = 0; / / pour les données entrantes en série void setup () { Serial.begin (9600); Serial.print ("AT"); } void loop () { / / Envoyer des données uniquement lorsque vous recevez des données: si (Serial.available ()> 0) { / / Lire l'octet entrant: incomingByte = Serial.read (); / / Dire ce que vous avez obtenu: Serial.write (incomingByte); } }
De le transférer à l'Arduino et cliquez sur le moniteur, vous obtiendrez la réponse suivante:
Maintenant, nous allons changer le nom par défaut à "tableau de bord», de le faire, remplacer le Serial.print("AT") avec Serial.print("AT+NAMEscoreboard") et répéter la procédure.
Enfin, nous avons besoin de fixer le taux de transmission à 2400, en utilisant la commande suivante: Serial.print("AT+BAUD2")
Commentaires et questions sont les bienvenues!
Related Posts
Tableau de bord (partie 1: signal VGA à partir d'un ATTINY45)
