LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

ADuCino360: termometr cyfrowy na mikrokontrolerze ADuCM360 (Cortex-M3 z Analog Devices)

Układ ADuCM360 to kolejny „analogowy” mikrokontroler z oferty Analog Devices, wyposażony w rdzeń Cortex-M3 oraz liczne peryferia. Ze szczególną starannością zaprojektowano bloki analogowe, czego należało oczekiwać po producencie. Nie zapomniano też o typowych interfejsach, bez których trudno dziś wyobrazić sobie nowoczesny mikrokontroler. W prezentowanym projekcie przedstawiono realizację termometru cyfrowego z zastosowaniem płytki ewaluacyjnej ADuCino (z mikrokontrolerem ADuCM360) i modułu KAmodTFT2.

Na płytce ewaluacyjnej ADuCino 360 (schemat przedstawiono na rysunku 1) zamontowany jest m.in. czujnik temperatury ADT7420. Jest to układ o ultraniskim dryfcie temperaturowym, równym 0,0073?C i dużej, 16-bitowej rozdzielczości, mierzący temperaturę w zakresie od –40 do +150°C.

 

Rys. 1. Schemat ideowy płytki ewaluacyjnej ADuCino360 dla mikrokontrolera ADuCM360

 

Układ komunikuje się z mikrokontrolerem za pośrednictwem interfejsu I2C. Odpowiednie połączenia wykonano na płytce. Uwzględniono przy tym rezystory podciągające 2,2 k ? . Układ ADT7420 ma dwa wejścia adresowe A0 i A1. Na płytce ewaluacyjnej są one dołączone do masy, tym samym adres bazowy czujnika jest ustalony na sztywno i jest równy 0x48. Szczegóły wyjaśniono w dokumentacji układu ADT7420. Należy pamiętać o tym, że adresowanie układów na szynie I2C jest uzupełniane bitem ustalającym kierunek transmisji. Taki bit (READ=1/WRITE=0) zajmuje najmłodszą pozycję, a bazowy adres jest przesunięty o jeden bit w lewo. Ostatecznie cały adres układu zmienia się w zależności od kierunku transmisji, co musi być uwzględnione w programie. Zasadę adresowania układów w interfejsie I2C wyjaśniono na rysunku 2, a w dalszej części artykułu przedstawiono kod źródłowy związany z obsługą transmisji.

 

Rys. 2. Zasada adresowania układów w interfejsie I2C

Rys. 2. Zasada adresowania układów w interfejsie I2C

 

Urządzeniem wyjściowym, na którym wizualizowane są wyniki pomiaru temperatury jest moduł wyświetlacza LCD – KAmodTFT2. Zamontowano na nim popularny wyświetlacz od telefonu Nokia6100 ze sterownikiem PCF8833 (uwaga: spotykane są również wersje wyświetlaczy ze sterownikiem Epsona, obie wersje nie są ze sobą kompatybilne). Matryca 132×132 punkty, mimo stosunkowo niewielkich rozmiarów ekranu (25×25 mm) umożliwia wyświetlanie grafiki z dużą liczbą szczegółów. Wyświetlacz jest skonfigurowany do pracy z 12-bitowym kolorem. Moduł komunikuje się z procesorem via interfejs SPI, przy czym w projekcie ograniczono się jedynie do komunikacji w kierunku od procesora do wyświetlacza. Jest on zerowany sygnałem Reset generowanym przez port P0.0 mikrokontrolera. Schemat połączenia modułu KAmodTFT2 przedstawiono na rysunku 3.

 

Rys. 3. Schemat połączenia modułu wyświetlacza KAmodTFT2 do płytki ewaluacyjnej mikrokontrolera ADuCM360

Rys. 3. Schemat połączenia modułu wyświetlacza KAmodTFT2 do płytki ewaluacyjnej mikrokontrolera ADuCM360

 

Inicjalizacja systemu

Po włączeniu zasilania (lub po zerowaniu) mikrokontroler ADuCM360 nie jest gotowy do pracy. Wszystkiej jego bloki funkcjonalne muszą być odpowiednio do potrzeb skonfigurowane. Te peryferia, które nie są wykorzystywane w aplikacji mogą, a nawet powinny być wyłączone. Konfiguracji wymaga również układ taktowania procesora. Fragment programu odpowiedzialny za prawidłową inicjalizację systemu przedstawiono na listingu 1. W aplikacji nie przewidziano wykorzystywania watchdoga, jest on więc wyłączony. Interfejs I2C zajmuje linie P2.0 (SCL) i P2.1 (SDA), zaś interfejs SPI jest programowo emulowany na liniach P1.7 (CS), P1.6 (MOSI), P1.5 (SCLK). Port P0.0 jest skonfigurowany jako wyjście cyfrowe. W programie konieczne jest ustalenie źródła przebiegu taktującego i jego częstotliwości (przyjęto 16 MHz). Konfigurowane są pozostałe peryferia wykorzystywane w aplikacji. Należy też pamiętać o włączeniu przerwań. W opisywanym programie nie było jednak takiej potrzeby, przerwania są więc wyłączone. Pozostawiono natomiast zakomentowane odpowiednie instrukcje konfigurujące.

 

List. 1. Inicjalizacja systemu

//inicjalizacja systemu 
 WdtGo(T3CON_ENABLE_DIS);       //watchdog wylaczony
 DioCfg(pADI_GP2,0x05);         //P2.0 P2.1 jako piny I2C
 //DioCfg(pADI_GP1,0xaa00);     //P1.7..4 jako SPI0 (SS, MOSI, SCLK, MISO) w realizacji sprzetowej
 DioOen(pADI_GP1,0xe0);         //P1.7 - CS,     realizacja programowa SPI
                                //P1.6 - MOSI, 
                                //P1.5 - SCLK 
 DioOen(pADI_GP0,0x01);         //P0.0 - reset LCD
 
//konfiguracja zegarow
 ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG); //system 16MHz
 ClkSel(CLK_CD0,CLK_CD0,CLK_CD7,CLK_CD7);                //SPI: 8MHz, I2C: 16MHz, UART: - (125kHz), PWM: - (125kHz) - istotne tylko I2C 
 ClkDis(CLKDIS_DISSPI0CLK|CLKDIS_DISSPI1CLK|CLKDIS_DISUARTCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDACCLK|CLKDIS_DISDMACLK|CLKDIS_DISADCCLK);  //blokuj niewykorzystywane

//Konfiguracja SPI0 (w tej wersji programu tryb ten nie jest jednak wykorzysywany
 SpiBaud(pADI_SPI0,0,SPIDIV_BCRST_DIS); //8MHz bez detekcji bledu linii CS
 SpiCfg(pADI_SPI0,SPICON_MOD_TX2RX2,SPICON_MASEN_EN,SPICON_CON_EN|
     SPICON_RXOF_EN|SPICON_ZEN_EN|SPICON_TIM_TXWR|SPICON_CPHA_SAMPLETRAILING|SPICON_ENABLE_EN); 
                               //przerwanie po 1 wpisie do TX, tryb master, tryb ciagly
                               //zezwolenie na nadmpisanie RX, transmituj 00 jesli brak nowych danych w TX
                               //inicjaclizacja transmisji po wpisie do TX, probkowanie na opadajacym zboczu SCLK
                               //SPI0 wlaczone
            
//Konfiguruj I2C jako Master 100kHz
 I2cMCfg(I2CMCON_TXDMA_DIS|I2CMCON_RXDMA_DIS,I2CMCON_IENCMP|I2CMCON_IENRX|I2CMCON_IENTX,I2CMCON_MAS_EN); 
 I2cBaud(0x4E,0x4F);           // 100kHz
  
 //NVIC_EnableIRQ(I2CM_IRQn);  //przerwania I2C nie beda wykorzystywane
 //NVIC_EnableIRQ(SPI0_IRQn);  //uaktywnij przerwania SPI0 - w tej wersji programu nie ma przerwan

 InitLcd();                    //inicjalizacjaa wywietlacza LCD
 ZapiszKomendeSpi(SETCON);
 ZapiszDanaSpi(48);            //ustaw optymalny kontrast=45
 LcdClearScreen(WHITE);        //czysc ekran
Jarosław Doliński jest absolwentem Wydziału Elektroniki na Politechnice Warszawskiej. Pracował w Przemysłowymi Instytucie Telekomunikacji oraz Instytucie Fizyki Plazmy i Laserowej Mikrosyntezy, gdzie zajmował się konstruowaniem urządzeń transmisji danych. Współpracował z Zakładem Urządzeń Teatralnych m.in. w zakresie konstrukcji interkomów teatralnych i urządzeń dla inspicjentów. Brał także udział w pracach projektowych rejestratorów urządzeń wiertniczych i elektroniki montowanej na żurawiach mobilnych. Obecnie prowadzi firmę zajmująca się konstruowaniem i produkcją urządzeń elektronicznych dla rehabilitacji i wspomagania treningu sportowego. Jest autorem czterech książek poświęconych elektronice i mikrokontrolerom, współpracuje ponadto z miesięcznikami „Elektronika Praktyczna”, „Elektronik” oraz „Świat Radio”.