× MSP430, Microcontrollori 16 bit Ultra Low Power

Problemi configurazione timer UART

12 Anni 1 Settimana fa #1 da fortezzadigitale
Problemi configurazione timer UART è stato creato da fortezzadigitale
Salve a tutti.
Sto cercando di interfacciare una scheda di sviluppo della Olimex (MOD-PULSE), basata su MSP430FG439 con uno smartphone android mediante il modulo Bluetooth RN-42 della Roving Networks.
Il codice dimostrativo della MOD-PULSE è settato per inviare i dati sull'interfaccia UART ad una velocità di 115200bps in questo modo:

UCTL0 |= SWRST;
ME1 |= UTXE0; // Enable USART1 TXD
UCTL0 |= CHAR; // 8-bit char, SWRST=1
UTCTL0 |= SSEL1; // UCLK = SMCLK
UBR00 = 52; // 115200 from 6.02MHz = 52.33
UBR10 = 0x00;
UMCTL0 = 0x45; // Modulation = 0.375
UCTL0 &= ~SWRST; // Initialise USART

mentre la parte di codice che invia i dati è questa (sono 4 byte in tutto, in cui i primi 2 servono da riconoscimento dei successivi):
TXBUF0 = 0x00; // Byte 1 - 0x00 (synchronization byte)
while (!(IFG1 & UTXIFG0));
TXBUF0 = 0xFF; // Byte 2 - 0xFF (synchronization byte)
while (!(IFG1 & UTXIFG0));
TXBUF0 = heart_rate_LSB; // Byte 3 - Heart rate data
while (!(IFG1 & UTXIFG0));
TXBUF0 = SaO2_LSB; // Byte 4 - %SaO2 data

Quando però vado a leggere i valori ricevuti dallo smartphone, noto dei valori strani che non dovrebbero esserci, e ciò succede anche se modifico il codice per inviare un pattern prefissato (ad esempio inviando ABCD mi ritrovo qualcosa del tipo (A?C#) ma mai sbagliati in modo sistematico.

Ho pensato (ed ho anche letto da qualche parte) che forse la velocità di 115200 bps è troppo alta per questo modulo bluetooth, ed in effetti per quello che devo fare io non è neanche necessaria.

Vorrei ridurre la trasmissione a 9600bps ma non ho capito che valori devo mettere nei registri UBR00, UBR10, UMCTL0.
Ho provato ad usare una delle calcolatrici disponibili online per ricavare i valori opportuni, ma i risultati che ottengo sono deludenti (non ricevo più niente di quello che dovrei ricevere).

Aggiungo che all'inzio del codice sono presenti le seguenti istruzioni:
SCFI0 |= FN_4; // x2 DCO frequency, 8MHz nominal
// DCO
SCFQCTL = 91; // 32768 x 2 x (91 + 1) = 6.03 MHz
FLL_CTL0 = DCOPLUS + XCAP10PF; // DCO+ set so freq = xtal x D x (N+1)

Qualcuno potrebbe cortesemente aiutarmi ad abbassare la velocità di trasmissione a 9600bps?
sono disperato :(

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • fortezzadigitale
  • Visitatori
  • Visitatori
12 Anni 1 Settimana fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Problemi configurazione timer UART
Ciao,

per semplificarti la vita e non dover calcolare il tuo valore usa 4MHz come frequenza di clock per la periferica.
La User Guide riporta per tale valore i valori dei registri per aver 9600bits/s sia che usi l'USCI che eUSCI.

Saluti,

Mauro
Ringraziano per il messaggio: fortezzadigitale

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login