LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Zestaw startowy Microchip PIC16F18446 Sensor Board – demonstracja możliwości płytki, część 1

Standardowo wbudowano też mechanizm PPS (Peripherial Pin Select) pozwalający na przypisywanie sygnałów układów peryferyjnych do wybranych wyprowadzeń mikrokontrolera, rozbudowany moduł watchdoga WWD, oraz tryby oszczędzania energii IDLE oraz DOZE. Ciekawe jest wprowadzenie mechanizmu MAP (Memory Acces Partition) zapewniającego ochronę danych użytkownika i wspierającego użycie bootloadera.

Jak widać wyposażenie tego małego mikrokontrolera jest dosyć bogate. Zobaczmy teraz jak można je wykorzystać w standardowych oraz nietypowych zastosowaniach. Taką możliwość daje firmowy moduł ewaluacyjny PIC16F18446 Sensor Board (rysunek 10).

Rysunek 10. Moduł Sensor Board

Mikrokontroler z układem programatora/debuggera został zamontowany na małej płytce MPLAB Xpress PIC16F18446 przylutowanej do dużej płytki bazowej. Na płytce bazowej są umieszczone układy: detektora metalu, detektora zbliżenia (proximity sensor), czujnika ciśnienia atmosferycznego, czujnika temperatury otoczenia, graficzny wyświetlacz LCD ze stabilizatorem +2,8 V, dwa przyciski S2 i S3, buzzer, oraz wyłącznik zasilania. Na drugiej stronie płytki zamontowano dwa gniazda dla baterii alkalicznych 1,5 V typu AA.

Rysunek 11. Schemat blokowy modułu Sensor Board

Dość niespotykanym rozwiązaniem jest zastosowanie w układzie z małym mikrokontrolerem wyświetlacza graficznego kojarzonego z dużymi wymaganiami sprzętowymi. Wyświetlacz ma rozdzielczość 128x160pikseli i przekątną 1,8 cala. Do komunikacji z wbudowanym sterownikiem IL9163C wykorzystuje się magistralę SPI. Napięcie zasilania może mieć wartość z zakresu 2,5….3,3 V i typowo wynosi 2,8 V. W module wykorzystano ze stabilizator +2,8 V oraz układy dopasowujące sygnały z poziomów logicznych portów mikrokontrolera do poziomów logicznych akceptowanych przez sterownik wyświetlacza zasilanego napięciem +2,8 V (stan wysoki max +2,8 V). Dodatkowo zastosowano układ sterowania podświetleniem z tranzystorem FET. Schemat układu wyświetlacza został pokazany na rysunku 12.

Rysunek 12. Wyświetlacz LCD z układami dopasowującymi poziomy logiczne do +2,8 V

Program demonstracyjny dostarczany z modułem jest zorganizowany w formie siedmiu funkcji (ekranów) przełączanych przyciskami S2 (poprzedni ekran) i S3 (następny ekran). Mamy do dyspozycji 7 funkcji:

  1. Pomiar napięcia baterii zasilających moduł
  2. Pomiar temperatury otoczenia w stopniach Celsiusza z rozdzielczością 10 i 12 bitów
  3. Pomiar ciśnienia atmosferycznego z rozdzielczością 10 i 12 bitów
  4. Wykrywanie i pomiar zbliżenia. Kiedy moduł jest zasilany z baterii brak aktywności wykrywania zbliżenia powoduje wygaszenie podświetlania wyświetlacza
  5. Wykrywanie przedmiotów – metalowych ferromagnetyków
  6. Generowanie dźwięków z częstotliwością zależną od wykrytej odległości zbliżenia
  7. Generowanie dźwięków z częstotliwością zależną od wykrytej odległości przedmiotu metalowego do detektora

Pomiar napięcia baterii

Pomiar napięcia baterii wykonuje przez wbudowany przetwornik analogowo-cyfrowy ADC. Ten przetwornik jest wykorzystywany we wszystkich funkcjach: pomiaru napięcia baterii, temperatury, ciśnienia, w czujniku zbliżenia i czujniku metalu. Na rysunku 13 pokazano konfigurację tego modułu przez wtyczkę MCC pakietu MPLAB X IDE.

Rysunek 13. Konfiguracja przetwornika ADCC

Napięcie +3 V z dwóch szeregowo połączonych baterii, przez diodę Shottky’ego podawane jest na wyłącznik zasilania. Dioda zabezpiecza układ zasilania bateryjnego przed uszkodzeniem podczas korzystania z zasilania zewnętrznego (przez złącze USB).

Rysunek 14. Podłączenie zasilania bateryjnego

Ponieważ przetwornik mierzy napięcie zasilania, wystarczy ustawić napięcie referencyjne: ADNREF = VSS (GND) i ADPREF = VDD. Pomiar napięcia wykonuje procedura readBattery() pokazana na listingu 1. Mierzone jest stałe napięcie z modułu FVR Buffer podane na wejście przetwornika, a zmienia się wartość napięcia referencyjnego, w naszym przypadku napięcia zasilania VDD z baterii.

void readBattery() {  
    uint32_t res;
    uint8_t i;
    
    ADREF = 0x00; // ADNREF VSS; ADPREF VDD – ustawienie napięć referenyjnych
   
    ADCC_GetSingleConversion(channel_FVR_Buffer1); // wyzwolenie konwersji 
    res = ADCC_GetAccumulatorValue() >> 6;
    
    if(bami==-1) {
        bamAcc = 0;
        for(i=0; i<BATT_ADC_MEM_SIZE; i++) {
            battAdcMem[i] = res;
            bamAcc += res;
            }
        bami = 0;}
    else {
        bamAcc -= battAdcMem[bami];
        battAdcMem[bami] = res;
        bamAcc += battAdcMem[bami];
        bami++;
        bami = bami % BATT_ADC_MEM_SIZE;
    }    
    res = bamAcc/BATT_ADC_MEM_SIZE;
    batteryMillivolts = 4194304/res;
}

Listing 1. Procedura pomiaru napięcia baterii

 

 Zapraszamy na drugą część artykułu, w której można znaleźć procedury obsługi pozostałych peryferiów zawartych na płytce PIC16F18446 Sensor Board
Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.