× MSP430, Microcontrollori 16 bit Ultra Low Power

Baud rates con MSP

9 Anni 2 Mesi fa - 9 Anni 2 Mesi fa #1 da elpablito
Baud rates con MSP è stato creato da elpablito
-> Mauro
In primis un saluto alla bada, poi il quesito.
Non riesco a far andare l'UART a 115200 baud con il G2553, cosa che invece mi è riuscita quasi al primo colpo con F2559.
Probabilmente anticipo un tuo spiegone, ma visto che un altro collega ha problemi consimili, lancio il sasso.
faccio un esempio pratico a 9600 baud, poichè con tale baud rate il tutto funziona e non capisco perchè non deva essere anche a 115200 così, forse ci capiamo meglio.
Il mio clock di sistema e 16 Mhz scelgo 9600 baud.
16000000/9600= 1666,6666666
1666/256 = 6,5078.... considero solo la parte intera che costituisce il valore dei primi 8 bit di UCA0BRx quindi
UCA0BR1 = 6;
moltiplico quindi 256*6 = 1536 che vado a sottrarre da 1666, vado se vogliamo a valutare la parte decimale
1666-1536 = 130 e poi c'era il 6 periodico della prima divisione per cui ho considerato
UCA0BR0 = 131;
Fino a qui OK, la tabella sul manovale della famiglia suggerisce poi un
UCBRSx = 6
e forse qui casca l'asino perchè se mi par di aver capito a cosa serve, in effetti probabilmente non lo adopero correttamente e provabilmente a bassa velocità la sua influenza è scarsa. Ti riporto il settagio globale della periferica.
void UART_Init(){
P1SEL |= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2;
//UCA0CTL0 |= UCPEN ; //Parita even
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 131; // 16Mhz/9600=1666,6666
UCA0BR1 = 6;
UCA0MCTL |= UCBRS_1; // Modulation UCBRSx = 1
UCA0CTL1 &=~ UCSWRST; // **Initialize USCI state machine**
IE2 &= ~(UCA0RXIE+UCA0TXIE); // abilito USCI_A0 RX interrupt
}
Funziona il tutto che è una meraviglia qualsiasi sia il valore di UCBRSx che stando alla tabella dovrebbe essere UCBRS_6
Se invece faccio 16000000/115200 = 138,8 periodico e quindi
UCA0BR0 = 138;
UCA0BR1 = 0;
UCA0MCTL |= UCBRS_6; // Modulation UCBRSx = 6, come da tabella
e anche con 139 invece che 138, non funziona niente, compaiono i soliti caratteri arabi di quando è sbagliata la velocità.
Sugo o sbaglio con UCBRS_6 o è il mistero dell'egizia sfinge, almeno per il momento.
Ho fatto una lunga tiritera, ma non sono riuscito a essere più conciso.
Sono graditi i commenti
Saluti
Paolo

Dimenticavo di dire che i dati vanno dalla Launchpad al Pc via USB.
Ultima Modifica 9 Anni 2 Mesi fa da elpablito.

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

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Baud rates con MSP
Ciao Paolo,

mi ero imbattuto in questo problema eseguendo degli esempi MSP430Ware. Formalmente erano corretti ma con il baud-rate elevato non funzionavano.
Non ho investigato oltre visto che con baud rate bassi erano funzionanti.
Ho sospettato che il problema potesse essere un errore troppo elevato sulla frequenza di trasmissione.
Si dovrebbe verificare con l'oscilloscopio.

In particolare l'MSP430G2553 possiede solo il DCO per frequenze elevate o il cristallo da 32KHz.
Il DCO puo' gia' introdurre un errore fino al 3% anche per i valori calibrati.

In alcune applicazione critiche ad alto baud-rate ho visto calibrare il DCO con il cristallo da 32KHz in questo modo si ha un errore limitato visto che si puo' calibrare il DCO al variare della temperatura.

...una bella misura dei tempi con l'oscilloscopio e' quello che ci vuole.
...e si taglia la testa al toro!

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 2 Mesi fa #3 da elpablito
Risposta da elpablito al topic Baud rates con MSP
-> Mauro
Mi fa piacere sentirtelo dire, vorrà dire che lo spiegone fatto servirà a qualcuno. Purtroppo di oscilloscopi ne ho più di uno, ma sono tutti analogici. Però potrei metterci uno di quei blocchetti metallici a quattro gambe che generano un clock come si deve e vedere cosa succede.
Appena ritorno lo faccio poi ti dirò. Attualmente sono alla solita trasferta per cui imperverserò
Ciao paolo

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

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #4 da elpablito
Risposta da elpablito al topic Baud rates con MSP
->Mauro
Però posso far uscire il clock su un piedino, una volta lo avevo fatto, poi con frequenzimetro fino a 1G non ho problemi.
Però con gli MSP 430 si può variare la frequenza del PLL? Ok in qualche modo poi faccio. Mi serve invece una dritta sugli
interrupt. Ho una directory in cui ho:

Library
motor.c
motor.h
UART.c Qui c'e un interrupt in RX che mi sono perso, inviando dati dal PC non finisco mai nella routinne
UART.h
CLOCK.H

poi c'è il file principale

Motor_test.c con un altro paio di interrupy che funzionano

Avevi detto che gli interrupt li organizzavi tutti in un file per evitare pasticci. potresti dirmi come, che ci provo.

Saluti
Paolo

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

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Baud rates con MSP
Relativamente al controllo del clock potrebbe non bastare.
Il clock e' solo una parte dell'errore. Anche l'impostazione del baud rate introduce un errore visto che approssimi il valore desiderato.

Un trucco che si adatta ad un oscilloscopio analogico e' quello di inviare in maniera continua un carattere.
Per esempio 'U' che in esadeciamale e' 0x55.

In questo modo l'oscilloscopio analogico vede un segnale periodico e lo aggancia sul fronte desiderato.
Misurando l'ampiezza del bit ti accorgerai della frequenza effettiva del baudrate.

relativamente al PLL, non lo trovi nella famiglia MSP430F2xx ma solo nei fratelli maggiori.

Per le interruzioni accertati che:
  • il file sia incluso
  • le relative interruzioni sia attive (sia della periferica che globali)
  • l'interrupt vector sia quello relativo al modulo desiderato (con il modulo USCI e' facile prendere l'interrupt vector errato).

Saluti,

Maro

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