Scoreboard (Parte 2: Lettura UART dal modulo Bluetooth)
In questo post, troverete come il modulo Bluetooth interagisce con il ATTINY45 nel quadro di valutazione VGA progetto.
Il modulo Bluetooth attende una connessione da un dispositivo (ad esempio un telefono Android) e fungerà da uno (Serial Port Profile), SPP re-passaggio tutto ciò che ha ricevuto dal dispositivo per l'interfaccia UART. Nel nostro caso il ATtiny leggerà i dati ma non "parlare di nuovo" al modulo, quindi è davvero una comunicazione bidirezionale da questo punto di vista.
Elettricamente parlando, abbiamo solo bisogno di un cavo per collegare il pin TXD del modulo bluetooth (PIN 1) il PB5 (PIN 1) del ATtiny, che verrà configurato come input.
Ora la parte difficile è sul lato firmware del microcontrollore, dal momento che abbiamo bisogno di leggere l'input senza interrompere la tempistica VGA. Il nostro ATtiny è in esecuzione a 20Mhz che dà 0.05μs per ciclo, in programma il ciclo principale si basa sui tempi VGA orizzontale in modo da poter leggere l'input ogni 635 cicli (31.75μs). Dall'altra parte il modulo BT è configurato a 2400 baud che significa che ogni bit durerà per 416.66μs. Quindi, facendo un rapido calcolo, 416,66 / 31,75 = 13,12, il che significa ogni bit viene letto circa 13 volte. Si assume che la lettura # 7 come il punto di riferimento e noi non farò alcun tipo di controlli.
La UART invierà un segnale di "alto" quando è inattivo, non appena si ottiene un "basso" sappiamo che il "bit start" è in arrivo, in modo da impostare un flag globale e iniziare a leggere gli 8 bit e la loro messa in un registro (R19). Potete leggere di più su UART su questo articolo di Wikipedia . Usiamo un altro registro (R25) come un contatore, per sapere quando leggere e smettere di leggere.
In questo modo il codice è simile:
; ; UART leggere l'input ; Questo codice viene eseguito ogni 635 cicli nel codice quadro di valutazione ; in r18, _SFR_IO_ADDR (PINB); 1 orologio 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, aggiungere 17 Andi R25, 0xF1 rjmp chkend chkend3togo: nop nop nop chkend: nop rjmp hsyncoff waitlow: , In attesa di bassa SBR r18, INPUT inc R25 nop delay3x 4 nop nop rjmp hsyncoff hsyncoff: ...... HSYNC codice ...... ...... se R25 == 0x91 poi la UART è stato letto e memorizzato in R19 ...... ...... elaborare e ripristinare entrambi i registri ....
Dal momento che si legge un byte, al momento, sembra piuttosto conveniente per il nostro progetto di definire un insieme di "comandi" (di un byte di lunghezza), per impostare i caratteri che devono essere visualizzati (quattro comandi per impostare ognuno dei caratteri), e inoltre un altro comando per visualizzare piazzetta agli angoli dello schermo che indica che attualmente sta scontando.
Ecco la nostra lista di comandi:
0 0 0 1 DDDD (carattere 1) [0-D] -> 0 1 2 3 4 5 6 7 8 9 (SPACE) BOG 0 0 1 0 DDDD (personaggio 2) 0 0 1 1 DDDD (carattere 3) 0 1 0 0 DDDD (personaggio 4) 0 1 0 1 0 0 0 1 (A servire in alto) 0 1 0 1 0 0 1 0 (in basso a servire B) 0 1 0 1 0 1 0 0 (A servire in alto) 0 1 0 1 1 0 0 0 (in basso a servire b)
Tutti abbiamo bisogno ora è un dispositivo per la connessione al modulo bluetooth e inviare i comandi.
Non perdete la parte finale di questo progetto, che pubblicherà presto, compresi i codici sorgente e un controller sviluppato per le piattaforme Android.
Configurazione del modulo Bluetooth con Arduino
Il modulo bluetooth è dotato di un firmware chiamato "linvor1.5" di default (almeno quella a DX). Per programmarlo, è necessario inviare una serie di comandi AT attraverso i TX / RX pin, Arduino sembra essere l'ideale per questo compito. Collegare due cavi tra il TX / RX del Arduino e la RX / TX del modulo Bluetooth (hanno bisogno di essere attraversata, con TX RX e TX con RX). Poi, inserire il seguente codice sul Arduino:
incomingByte int = 0; / / per i dati seriali in ingresso vuoto setup () { Serial.begin (9600); Serial.print ("AT"); } void loop () { / / Invia i dati solo quando si ricevono i dati: if (Serial.available ()> 0) { / / Leggere il byte in entrata: incomingByte = Serial.read (); / / Dire quello che hai: Serial.write (incomingByte); } }
Carica al Arduino e fare clic sul monitor, si ottiene la seguente risposta:
Ora ci accingiamo a cambiare il nome predefinito "scoreboard", per farlo, sostituire la Serial.print("AT") con Serial.print("AT+NAMEscoreboard") e ripetere la procedura.
Infine, abbiamo bisogno di impostare la velocità di trasmissione a 2400, utilizzando il seguente comando: Serial.print("AT+BAUD2")
Commenti e domande sono i benvenuti!
Related Posts
Scoreboard (Parte 1: il segnale VGA da un ATTINY45)
