mikrokontroleri Ricci Projekt mbed 2

Projekt sostoji se od jedan Mbed LPC1768 board element, tri elementa za 7 segmenata LED-display, zajednički anodo, trimmer od 0 do 10KOhm i jedan piezo buzzer i dva tipka SELECT i ENTER. Sve to skupa je posizionirao na breadboard.

Cilj od ovo projekt je koristiti funkcije od mbed RTOS što smo učili na predavanje i napraviti neka aplikacija kao primijer. Ja sam se fokusirao na state machine koja napravi formatirani menu u LCD display. Cilj je da taj mehanizam s izbornicima menu je dosta čvrsti i radi na dvije razine: preko horizontalni (u dubini funkcije) i vertikalni (izbor menu), jedan put kada je ovo implementirao, vrlo lagano je dodati funkcije i menu koliko god se želi.

Ovo dio kod se vrti stalno u mainloop, svakih 200 ms ažurira se. Kako se vidi ima jedan INIT state gdje se može implementirati neki initHW za moduli (npr ako imamo modem itd) za koji je potreban određena inicijalizacija i neko posebno vrijeme. Nakon INIT, state machine radi samo između određeni menu, jako je lako dodati jos menu, to se samo javi kao nova macro u switch-case naredba.

* -------- * * state machine menu * * -------- * if (TimVis.read_ms() >= 200) { TimVis.reset(); restart timer

switch (stateMbd) { case ST_INIT: stateMbd = ST_M1; break; case ST_M1: Menu1(); break; case ST_M2: Menu2(); break; case ST_M3: Menu3(); break; } }

npr kada se javi funkcija Menu1(), će se selektirati dubina u menu.

Prvi nivo, varijabla Level, nam prikaza samo ime Menu koji će biti vizualizirano, Seg1, Seg2, Seg3 prikazaju red od 7 segmenti, tablice su definirane u memoria.h : kada je 0 onda segment je upalijeno a kada je 1 nije upaljeno (pinovi mikrokontroler su u pull-up). A drugi nivo radi funkcija koja će mjeriti napon i prikaza u real time vrijednosti od 0 do 3,3Volt. Ako jos idemo u dubini, treći nivo, i stistnemo jos jedanput Enter, onda ćemo se vratiti u prvi menu i možemo onda sa tipkom SEL ići dalje kod ostali menu.

* ----------- * * Menu * * ----------- * void Menu1(void) { switch (Level) { case LEVEL1: Seg1 = tabFunc[0U]; DG = 0u; Seg2 = tabSeg[0U]; Seg3 = tabSeg[1U]; break; case LEVEL2: Voltmetro(); break; case LEVEL3: Level = LEVEL1; break; } }

/media/uploads/marcoricci/untitled.jpg

druge dodatne funkcije su Menu2 i Menu3.

U Menu2 imamo timer koji će inkrementirati vrijeme svako sekundo i u istovrijeme svoni s jednom kratki zvuk. Početna vrijednost ćebiti 000 i na dalje do 999. Ovo treba za mjeriti sekundi, znaći kada želimo prekidati stistnemo OK i vrijeme zaustavi, još jedanput OK i se vraćamo u prvi Level Menu.

U Menu3 imamo jedan timer koji će dekrementirati vrijeme svako sekundo i u istovrijeme svoni s jednom kratki zvuk (kao timer bombi što se vidi često na televiziji). Početna vrijednost će se selectirati preko menu sa strelicom SELECT i onda OK, nakon da smo dali OK, timer krene i zaustavi se u 000, i taj trenutak će pisati End i zvoni za neko sekundo.

Tipke koriste posebni interrupt i razlićiti zvuk frekvencije za SELECT i OK.

Vizualizacija je svaki 200 millisekundi tako da ne upalino stalno LED-ovi, ovaj trik ne ometa vidljivost oćiju.


All wikipages