Scoreboard (Teil 2: Reading UART aus dem Bluetooth-Modul)
In diesem Beitrag finden Sie, wie das Bluetooth-Modul mit dem interagiert ATtiny45 im VGA-Anzeiger Projekt.
Das Bluetooth-Modul wird für eine Verbindung von einem Gerät warten (z. B. ein Android-Handy) und wird als SPP (Serial Port Profile) re-Passing-alles aus dem Gerät auf die UART-Schnittstelle empfangen zu handeln. In unserem Fall ist das ATtiny werden die Daten zu lesen, aber nicht "wieder sprechen" mit dem Modul, also ist es wirklich ein one-way Kommunikation von diesem Standpunkt aus betrachtet.
Elektrisch gesehen, brauchen wir nur noch ein Kabel an den TXD-Pin des Bluetooth-Modul (PIN 1) an den PB5 (PIN 1) des ATtiny, die als Eingang konfiguriert werden zu verbinden.
Jetzt kommt der schwierige Teil ist auf dem Mikrocontroller-Firmware Seite, da wir um die Eingabe, ohne dass der VGA-Timing lesen müssen. Unsere ATtiny wird bei 20MHz, die pro Zyklus gibt 0.05μs läuft, im Programm die Hauptschleife auf dem VGA horizontalen Timings beruht, so lesen wir können das Eingangssignal alle 635 Zyklen (31.75μs). Auf der anderen Seite das BT-Modul wird bei 2400 Baud, dass jedes Bit wird für 416.66μs letzte Mittel konfiguriert. Also, tun, eine schnelle Mathematik, 416,66 / 31,75 = 13,12, dh jedes Bit über 13 Mal gelesen. Wir nehmen die Lese Nr. 7 als gültig ein, und wir pflegen jede Art von Kontrollen zu tun.
Der UART schickt einen "High"-Signal, wenn im Leerlauf ist, sobald wir eine "low" bekommen wir wissen, dass das "Startbit" ankommt, so dass wir ein globales Flag gesetzt und starten Sie das Lesen der 8 Bit und sie in ein Register (r19). Sie können mehr über UART lesen auf dieser Wikipedia-Artikel . Wir verwenden ein anderes Register (R25) als Zähler, zu wissen, wann zu lesen und aufhören zu lesen.
Dies ist, wie der Code aussieht:
; ; UART Lese-Eingang ; Dieser Code wird alle 635 Zyklen im Anzeiger-Code ausgeführt ; in r18, _SFR_IO_ADDR (PINB), 1 Uhr 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; hinzufügen 17 andi r25, 0xF1 rjmp chkend chkend3togo: nop nop nop chkend: nop rjmp hsyncoff waitlow: Und wartet nur auf niedrigem SBR R18, INPUT inc r25 nop delay3x 4 nop nop rjmp hsyncoff hsyncoff: ...... HSYNC Code ...... ...... wenn R25 == 0x91 dann die UART gelesen wurde und in R19 gespeichert ...... ...... verarbeiten und stellen Sie jetzt beide Register ....
Da wir ein Byte gelesen zu der Zeit, so scheint es sehr nützlich für unser Projekt, eine Reihe von "Befehlen" (von einem Byte lang) zu definieren, um die Zeichen, die angezeigt wird (vier Befehle, um jedes einzelne Zeichen gesetzt) gesetzt werden muss, und zusätzlich ein weiterer Befehl zum anzeigen kleinen Platz an den Ecken des Bildschirms, die anzeigen, wer gerade Dienst wird.
Hier ist unsere Liste der Befehle:
0 0 0 1 DDDD (Zeichen 1) [0-D] -> 0 1 2 3 4 5 6 7 8 9 (SPACE) BOG 0 0 1 0 DDDD (Zeichen 2) 0 0 1 1 DDDD (Zeichen 3) 0 1 0 0 DDDD (Charakter 4) 0 1 0 1 0 0 0 1 (servieren eine oben) 0 1 0 1 0 0 1 0 (B dienen unten) 0 1 0 1 0 1 0 0 (servieren eine oben) 0 1 0 1 1 0 0 0 (b dienen unten)
Alles, was wir jetzt brauchen, ist ein Gerät mit dem Bluetooth-Modul anschließen und senden Sie die Befehle.
Verpassen Sie nicht den letzten Teil dieses Projektes, dass ich in Kürze veröffentlichen, einschließlich Source-Codes und einem Controller für Android-Plattformen entwickelt.
Konfigurieren des Bluetooth-Modul mit Arduino
Das Bluetooth-Modul kommt mit einem Firmware namens "linvor1.5" standardmäßig (zumindest die, die auf DX). Um ihn zu programmieren, müssen Sie eine Reihe von AT-Befehle über die TX / RX-Pins senden müssen, scheint Arduino als ideal für diese Aufgabe. Schließen Sie zwei Kabel zwischen dem TX / RX des Arduino und der RX / TX des Bluetooth-Moduls (sie müssen überquert werden, RX mit TX und TX mit RX). Dann legen Sie den folgenden Code auf dem Arduino:
int incomingByte = 0; / / für eingehende serielle Daten void setup () { Serial.begin (9600); Serial.print ("AT"); } void loop () { / / Daten senden nur, wenn Sie Daten zu empfangen: wenn (Serial.available ()> 0) { / / Lesen des ankommenden Byte: incomingByte = Serial.read (); / / Sagen, was du hast: Serial.write (incomingByte); } }
Laden Sie es auf der Arduino und klicken Sie auf den Monitor, erhalten Sie die folgende Antwort:
Jetzt werden wir um den vorgegebenen Namen zu "Anzeigetafel", ändern, dies zu tun, ersetzen Sie die Serial.print("AT") mit Serial.print("AT+NAMEscoreboard") und wiederholen Sie den Vorgang.
Schließlich brauchen wir, um die Baudrate auf 2400 gesetzt, mit dem folgenden Befehl: Serial.print("AT+BAUD2")
Kommentare und Fragen sind herzlich willkommen!
Related Posts
Scoreboard (Teil 1: VGA-Signal von einem ATtiny45)
