× MSP430, Microcontrollori 16 bit Ultra Low Power

_delay_cycles()

9 Anni 11 Mesi fa #6 da Mauro Laurenti
Risposta da Mauro Laurenti al topic _delay_cycles()
Ciao Paolo,

potresti porre il clock SMCLK in uscita ad un pin e misurare la sua frequenza (e' un'opzione del pin della porta P1.4).
In questo modo ti accerti che hai effettivamente 32KHz e non la frequenza di DCO.
Imposta anche SMCLK su 32KHz.

Qualora il cristallo esterno non dovesse oscillare l'MSP430 cambia la fonte del clock LFXTL in maniera automatica con il DCO.

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 11 Mesi fa #7 da elpablito
Risposta da elpablito al topic _delay_cycles()
Ciao Mauro
Ho fatto due prove e sono giunto ad una conclusione di cui mi piacerebbe conoscere il tuo parere
Sono andato a vedere, a puro scopo conoscitivo, ACLK SMCLK e devo fidarmi del MCLK perchè non lo posso vedere, sono tutti rigorosamente a 32.768

//****************************************
// Impostazioni Porte I/O
//****************************************
P1OUT = 0x00;
P1SEL = BIT0 | BIT4;
P1DIR =BIT0 | BIT4 | BIT6;
P1IES = 0;
//****************************************
// Impostazioni modulo Clock
//****************************************
BCSCTL2 = SELM_3 | DIVM_0 |SELS| DIVS_0;

BCSCTL1 |=XT2OFF | DIVA_0;

BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1; //oscillatore esterno 32.768 khz

Il però !!! è che non è vero che il DCOCLK sia fermo o non esista e il

_delay_cycles(32768);

probabilmente conta il DCO e non il MCLK se così fosse si spiegherebbe perchè

for(k=5;k>0;k--){
_delay_cycles(32768);
}

invece di fare 5 secondi fa una frazione di secondo
Ciao
Paolo

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

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 11 Mesi fa #8 da Mauro Laurenti
Risposta da Mauro Laurenti al topic _delay_cycles()
Ciao Paolo,

potresti testare i flag di errore per verificare lo stato del clock.
Per controllare MCLR potresti anche fare un semplice toggling di un pin in un ciclo infinito:

while (1) {

P1OUT ^= BIT0;
P1OUT ^= BIT0;

}

Ogni istruzione viene eseguita in un ciclo di clock, per cui puoi risalire alla frequenza misurando l´ampiezza. Se e´ il DCO a scandire il tempo devi avere una base dei tempi piuttosto piccola altrimenti non vedi l´impulso e il trigger dell´oscilloscopio potrebbe non generarsi.

Saluti,

Mauro

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