×
MSP430, Microcontrollori 16 bit Ultra Low Power
_delay_cycles()
10 Anni 6 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
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
- Moderator
Riduci
Di più
10 Anni 6 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
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
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
10 Anni 6 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
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.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.