[size=150]
MSP430 Launchpad DCO(Digitally-controlled oscillator) > 1MHz
[/size]
TÀmÀ ohje ei ole oma ideani vaan suomennettu yhteenveto 43oh-foorumin nimimerkeillÀ maxpenna, simpleavr ja NatureTM esiintyvien henkilöiden pÀhkÀilyistÀ. Valokuvat ja skooppikaappaukset ovat omiani. AlkuperÀiset NatureTM:n aloittamat threadit löytyvÀt osoitteista Value Line series easy DCO setting library ja Flashing the missing DCO calibration constants.
VAROITUS: En ota vastuuta ohjeen oikeellisuudesta tai hajonneista laitteista, mutta olen itse onnistuneesti kalibroinut nÀillÀ ohjeilla oman Launchpadini tukemaan 1MHz, 4MHz, 8MHz ja 16MHz kellotaajuuksia. EsimerkissÀ kÀytetÀÀn Launchpadin mukana tullutta MSP430G2231-kontrolleria ja 32.768kHz-kidettÀ. Ilmeisesti tÀtÀ pitÀisi voida soveltaa muihinkin G-sarjalaisiin.
[size=150]SisÀltö[/size]
- Johdanto
- Kalibrointi
- Kiteen juottaminen
- Code Composerin muokkaus
- EntÀ nyt?
- Mittailuja
- Ylikellotusta
- Pikakertaus
[size=150]1. Johdanto[/size]
MSP430G2231:n sisÀinen DCO on kalibroitu toimimaan 1MHz taajuudella, jolla kyllÀ pÀÀsee hyvin alkuun. DatalehdessÀ mainitaan kyseisen kontrollerin toimivan myös sisÀisen oskilaattorin ajamana 16MHz taajuudella. 1MHz lisÀksi kontrolleriin ei ole kuitenkaan tallennettu kalibrointiarvoja nopeammille taajuuksille, mutta onneksi yllÀmainittujen nimimerkkien ansiosta itse kalibrointi eri taajuuksille on tehty helpoksi.
Kalibroinnissa kÀytetÀÀn hyvÀksi ulkoista vertailutaajuutta, joka tuotetaan Launchpadin mukana toimitetulla 32kHz kiteellÀ. Kiteen jakson aikana lasketaan DCO-oskillaattorissa tapahtuneita jaksoja, jolloin voidaan arvioida DCO:n taajuus. Kun ulkoisen 32kHz kiteen taajuus jaetaan kahdeksalla, voidaan laskea useampia DCO-oskillaattorin jaksoja, jolloin tarkkuus paranee. Kiteen vertailutaajuudeksi saadaan siis 4096Hz ja tÀmÀn perusteella voidaan laskea seuraavat kalibroinnissa tavoiteltavat DCO-jaksot/kidejakso:
- 1MHz Ë 4096Hz * 244 = 999 424Hz -596ppm
- 2MHz Ë 4096Hz * 488 = 1 998 848Hz -596ppm
- 3MHz Ë 4096Hz * 732 = 2 998 272Hz -596ppm
- 4MHz Ë 4096Hz * 977 = 4 001 792Hz 468ppm
- 5MHz Ë 4096Hz * 1221 = 5 001 216Hz 263ppm
- 6MHz Ë 4096Hz * 1465 = 6 000 640Hz 127ppm
- 7MHz Ë 4096Hz * 1709 = 7 000 064Hz 29ppm
- 8MHz Ë 4096Hz * 1953 = 7 999 488Hz -84ppm
- 9MHz Ë 4096Hz * 2197 = 8 998 912Hz -141ppm
- 10MHz Ë 4096Hz * 2441 = 9 998 336Hz -186ppm
- 11MHz Ë 4096Hz * 2686 = 11 001 856Hz 189ppm
- 12MHz Ë 4096Hz * 2930 = 12 001 280Hz 127ppm
- 13MHz Ë 4096Hz * 3174 = 13 000 704Hz 74ppm
- 14MHz Ë 4096Hz * 3418 = 14 000 128Hz 29ppm
- 15MHz Ë 4096Hz * 3662 = 14 999 552Hz -50ppm
- 16MHz Ë 4096Hz * 3906 = 15 998 976Hz -84ppm
[size=150]2. Kiteen juottaminen Launchpadiin[/size]
Kide juotetaan MSP430G2231-piirin oikealle puolelle C21:n ja C22:n vÀliin. C21 ja C22 ovat paikkoja kiteen kuormakondensaattoreille. NiitÀ ei kuitenkaan tarvitse lisÀtÀ, koska kalibroinnissa kÀytetÀÀn mikrokontrollerin sisÀisiÀ kuormakondensaattoreita (sÀÀdettÀvÀ 1-11pF).
MSP430 Launchpad
Juotetaan kide sille tarkoitettuun paikkaan. Juottamisessa kannattaa kÀyttÀÀ ohutta lankaa, ettÀ fluksia tulee tasaisesti ja juotoksista tulee nÀttejÀ. ItsehÀn oppikirjamaisesti luultavasti sotkin tuon lyijyttömÀn esitinauksen ja lyijyllisen. (pienemmÀt pÀdit himmeitÀ? paksumman pÀÀn koostumus taisi jo korjaantua sen verran tinan paljouden takia)
Poistin piikkirimalle menevÀt hyppyvastukset. LyhemmÀt johtimet kiteelle(merkitystÀ?) ja empÀhÀn kytke sinne mitÀÀn vahingossa
.
[size=150]3. Kalibrointi[/size]
C-kielinen kalibrointiohjelma on saatavissa 43oh-foorumilta (âŠköhâŠBugMeNot) kĂ€yttĂ€jĂ€n maxpenna viestistĂ€. Kalibroinnin suoritettuaan ohjelma alkaa vilkuttaa vihreÀÀ lediĂ€(huomaa ketjun viimeisellĂ€ sivulla oleva korjaus). Kalibroinnin tuloksena MSP430G2231-kontrolleriin tallentui minulla ainakin seuraavanlaiset korjaukset. Vertailuarvona jbremnant-nimimerkin lĂ€hettĂ€mĂ€t tiedot 43oh-foorumilta:
Arvot lÀhentelevÀt toisiaan aika paljon paitsi tuo DCOTL(hienosÀÀtö?). Muistia voi tutkia ainakin Code Composerin Memory-työkalulla debug-tilassa.
LisÀsin pienen tarran muokattuun kontrolleriin tietÀÀkseni, millÀ kontrollerilla voi kÀyttÀÀ suurempia taajuuksia.
Merkattu mikrokontrolleri.
Kalibroinnin jÀlkeen 32kHz kidettÀ ei tarvita, koska arvot on jo kirjoitettu flashiin talteen.
[size=150]4. Code Composerin muokkaus[/size]
Jotta uusia kalibroituja kellotaajuuksia voitaisiin kĂ€yttÀÀ, tĂ€ytyy meidĂ€n jotenkin kertoa kÀÀntĂ€jĂ€lle, missĂ€ ne sijaitsevat. Seikkaillaan aluksi Code Composerin include-kansioon ââŠ\Texas Instruments\ccsv4\msp430\includeâ.
Luodaan kopiot nÀistÀ esimerkkimikrokontrolleriin liittyvistÀ tiedostoista:
- msp430g2231.cmd
- lnk_msp430g2231.cmd
- msp430g2231.h
NimetÀÀn kopioidut tiedostot osuvasti:
- msp430g2231_16MHz.cmd
- lnk_msp430g2231_16MHz.cmd
- msp430g2231_16MHz.h
Muokataan âmsp430g2231_16MHz.cmdâ-tiedoston kalibraatio kohta nĂ€yttĂ€mÀÀn tĂ€ltĂ€, eli mÀÀritellÀÀn nimellĂ€ esitettĂ€viĂ€ osoitteita mikrokontrollerin muistista.
[code]/************************************************************
- Calibration Data in Info Mem
************************************************************/
CALDCO_16MHZ = 0x10F8;
CALBC1_16MHZ = 0x10F9;
CALDCO_12MHZ = 0x10FA;
CALBC1_12MHZ = 0x10FB;
CALDCO_8MHZ = 0x10FC;
CALBC1_8MHZ = 0x10FD;
CALDCO_1MHZ = 0x10FE;
CALBC1_1MHZ = 0x10FF;
/************************************************************[/code]
Muokataan âlnk_msp430g2231_16MHz.cmdâ-tiedoston loppua, jotta muistin kohdistus toimii.
[code]//
/ INCLUDE PERIPHERALS MEMORY MAP /
//
-l msp430g2231_16MHz.cmd[/code]
Korjataan vielĂ€ esikÀÀntĂ€jĂ€n mÀÀritelmĂ€t (âmsp430g2231_16MHz.hâ) kohdilleen, jotta eri muistialueisiin voidaan osoitella.
[code]/************************************************************
- Calibration Data in Info Mem
************************************************************/
#ifndef __DisableCalData
SFR_8BIT(CALDCO_16MHZ); /* DCOCTL Calibration Data for 16MHz /
SFR_8BIT(CALBC1_16MHZ); / BCSCTL1 Calibration Data for 16MHz /
SFR_8BIT(CALDCO_12MHZ); / DCOCTL Calibration Data for 12MHz /
SFR_8BIT(CALBC1_12MHZ); / BCSCTL1 Calibration Data for 12MHz /
SFR_8BIT(CALDCO_8MHZ); / DCOCTL Calibration Data for 8MHz /
SFR_8BIT(CALBC1_8MHZ); / BCSCTL1 Calibration Data for 8MHz /
SFR_8BIT(CALDCO_1MHZ); / DCOCTL Calibration Data for 1MHz /
SFR_8BIT(CALBC1_1MHZ); / BCSCTL1 Calibration Data for 1MHz */
#endif /* #ifndef __DisableCalData */
/************************************************************[/code]
[size=150]5. EntÀ nyt?[/size]
Uutta projektia luodessa Code Composerissa tĂ€ytyy muistaa, ettĂ€ valitsee Linker Command File -kohtaan oikean muokatun âlnk_msp430g2231_16MHz.cmdâ-tiedoston.
Valitse âlnk_msp430g2231_16MHz.cmdâ.
Itse kun rakastan lukea nÀitÀ kÀdestÀpitÀen tutoriaaleja, niin laitampa tÀhÀn loppuun vielÀ yksinkertaisen koodin, jolla itse testasin eri kellotaajuuksia.
[code]#include <msp430g2231_16MHz.h> // <âHUOMAA
void main( void ){
WDTCTL = WDTPW + WDTHOLD; // watchdog pois
//tarkista ettÀ [x]MHz on kalibroitu
if (CALBC1_16MHZ != 0xff && CALDCO_16MHZ != 0xff) {
//aseta kello
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
}
//kello ulos @ P1.4
P1SEL |= (1<<4); // P1.4 SMCLK output
P1DIR |= (1<<4); // P1.4 output
while(1);
}[/code]Anteeksi vÀlilyönnin kÀyttö koodissa, mutta tabulaattori ei toiminut BBCode:lla kirjoitetussa tekstissÀ?
Java-tyylisestÀ aaltosulkujen kÀytöstÀ en kyllÀ luovu .
[size=150]6. Mittailuja[/size]
Mittasin edellÀ olevan kappaleen testiohjelman syöttÀmiÀ signaaleja eri taajuuksilla oskilloskoopilla. Kuvista huomaa, ettÀ toivotut taajuudet toteutuivat aika hyvin, mutta kellosignaalin jaksossa on aika paljon huojuntaa. Samanlaista huojuntaa ei esiinny uudella LaunchpadillÀ eikÀ kalibroidulla jos BCSCTL1 ja DCOCTL -rekisterit jÀttÀÀ mÀÀrittelemÀttÀ. Ilmeisesti tÀmÀ jitter on ominaisuus , koska kellotaajuuden tarkka sÀÀtÀminen tapahtuu sÀÀtelemÀllÀ kahden eri kellotaajuuden suhdetta (tarkemmin alapuolen viestissÀni).
1MHz + jitter
8MHz + jitter
12MHz + jitter
16MHz + jitter
[size=150]7. Ylikellotusta[/size]
NÀköjÀÀn tuohon C-kalibrointi-ohjelmaan voi syöttÀÀ kÀsin vertailuarvoja, jolloin voi saada korkeampiakin taajuuksia.
Ylikellotettu MSP430G2231 vertailuarvona 4882.
Yritin saada vielÀ korkeampiakin taajuuksia, mutta kalibrointi ei suostunut asettumaan ja kalibrointiohjelma jÀi ikuiseen silmukkaan. Kontrolleri ei hajonnut, vaan ajoin kalibrointi-ohjelman uudestaan jÀrkevÀmmillÀ arvoilla ja taas mentiin. Luultavasti olisi mahdollista pÀÀstÀ korkeampiin taajuuksin kirjoittamalla kÀsin kalibrointiarvon flashiin.
[size=150]8. Pikakertaus[/size]
- Juota 32kHz kide
- Suorita kalibrointiohjelma
- Luo muokatut tiedostot Code Composeria varten (âmsp430g2231_16MHz.cmdâ,âlnk_msp430g2231_16MHz.cmdâ ja âmsp430g2231_16MHz.hâ).
- Uutta projektia luodessasi muista valita âlnk_msp430g2231_16MHz.cmdâ
- #Include <msp430g2231_16MHz.h>
- BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
[size=150]SiinÀpÀ se[/size]
Kumarrus ja kiitos loppuun asti lukeneille
KysymyksiÀ voi esittÀÀ ja vastaan jos osaan.
Palaute ja parannusehdotukset ovat aina tervetulleita.
EDIT:
LisÀsin noihin tavoite taajuuksiin Vuokon laskemat virheet ja lisÀsin siihen tuon ±20ppm ja ilmoitin worst case -tuloksen.
LisÀsin tuon kiteen tarpeettomuuden kalibroinnin jÀlkeen.
EDIT:
Jitterin selittellyÀ.