Programování mikropočítačů Programování HCS08 v C A/D převodník
Vytvoření projektu v C Ostatní volby jsou stejné jako u projektu v ASM Vybereme C zde Ostatní volby jsou stejné jako u projektu v ASM
A/D převodník A/D převodník: Analogově-digitální převodník (Analog-To- Digital Converter (ATD)) = zařízení pro převod analogového signálu na diskrétní Vlastnosti ATD u HCS-08: Rozlišení 8 nebo 10 bitů Doba převodu 14 mikrosekund Nastavení příznaku nebo vyvolání přerušení po dokončení převodu (vektor přerušení na adrese $FFD0) Multiplexer pro 8 vstupních kanálů Funkce A/D převodníku je sdílena s portem B Režim jednoho převodu nebo kontinuální převod (single or continuous)
Analogově-Digitální převodník Schéma A/D převodníku Registry A/D převodníku ATDC 1 ATD1SC Vstup Např. 0 až 3.3V A/D ATD1PE ATDRH 7 ATDRL Port B Multiplexer Výstup 0 až 1023 pro 10-bitový režim převodníku
Registry A/D převodníku (1/3) ATD1C: řídicí registr A/D převodníku ATDPU – zapnutí/vypnutí převodníku (pro úsporu energie). 1 = zapnut, 0 = vypnut DJM – zarovnání 10-bitového výsledku ve výsledkových registrech. 1 = zarovnáno vpravo, 0 = vlevo RES8 – vybírá 8/10-bitový režim 1 = 8-bit, 0 = 10-bit převod SGN – vybírá režim se znaménkem 1 = výstup se znaménkem -512 až 511 0 = výstup bez znaménka 0 až 1023 PRS – výběr dělícího poměru děličky hodinového kmitočtu (je nutno nastavit tak, aby frekvence hodinového kmitočtu nepřesáhla 2MHz) Pro fbus = 20 MHz musí být nastaven faktor 10 nebo vyšší. PRS = 0100b
Registry A/D převodníku (2/3) ATD1SC: stavový a řídicí registr CCF – příznak dokončení převodu 1 = dokončen, 0 = není dokončen ATDIE – povolení přerušení při dokončení převodu 1 = povoleno, 0 = zakázáno ATDCO – povolení průběžného převodu (continuous mode) 1 = průběžný, 0 = jeden převod ATDCH – výběr kanálu pro převod, viz. tabulka Podrobnosti viz dokumentace CPU, kapitola 14.
Registry A/D převodníku (3/3) ATD1RH, ATD1RL: výsledná data, tj. výsledek A/D převodu. 10-bit. výsledek je uložen ve dvou osmi-bitových registrech ATD1RH a ATD1RL. Zarovnání viz bit DJM v reg. ATDC. Při 8-bit konverzi je výsledek v ATD1RH ATD1PE: registr povoluje použití pinů pro použití A/D převodníkem 1 = pin povolen, 0 = pin zakázán Podrobnosti viz dokumentace CPU, kapitola 14.
Programová obsluha A/D převodníku Nastavení vstupů pro A/D převodník Nastavení převodníku (kanál, režim) a start převodu Čekání na dokončení převodu v případě, že není použita signalizace dokončení převodu pomocí přerušení Zpracování výsledku
Příklad – A/D převod Zadání: Vytvořte program, který rozsvítí 0 až 4 LED diody v závislosti na nastavení potenciometru na vývojovém kitu. Princip: Hodnotu nastavenou potenciometrem budeme snímat pomocí A/D převodníku ve smyčce a podle její velikosti rozsvítíme příslušný počet LED. Potenciometr je připojen na vstupu AD0 (kanál 0 A/D převodníku), tj. bit 0 portu B.
Program – vývojový diagram 1 Start udaj > 112 Ano Rozsviť LED1 Inicializace portu F (piny 0-3 výstupní režim) inicializace A/D pře- vodníku udaj > 266 Ano Rozsviť LED2 2 udaj > 522 Ano Zhasni všechny LED Start převodu na kanálu č.0 Rozsviť LED3 udaj > 767 Ano Převod dokončen? Ne Rozsviť LED4 Ano Čekej 100ms 1 2
Program – A/D převodník // opakujeme v nekonecne smycce... while ( 1 ) { ATD1SC = 0; // start prevodu, jednorazovy, kanal 0 while (ATD1SC_CCF == 0) ; // zpracuj vysledek prevodu (ATD1RH) PTFD = 0xFF; // zhasni vsechny LED if ( ATD1RH > 50 ) PTFD_PTFD0 = 0; // LED1 on if ( ATD1RH > 100 ) PTFD_PTFD1 = 0; // LED2 on if ( ATD1RH > 150 ) PTFD_PTFD2 = 0; // LED3 on if ( ATD1RH > 200 ) PTFD_PTFD3 = 0; // LED4 on cekej(); } for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ } // main void cekej(void) { int i; for ( i= 0; i<6000; i++ ) __RESET_WATCHDOG(); void cekej(void); void MCU_init(void); void main(void) { /* Uncomment this function call after using Device Initialization to use the generated code */ EnableInterrupts; /* enable interrupts */ /* include your code here */ PTFD = 0xFF; // zhasneme LED diody PTFDD_PTFDD0 = 1; // bity 0 az 3 portu F jako vystupy PTFDD_PTFDD1 = 1; PTFDD_PTFDD2 = 1; PTFDD_PTFDD3 = 1; PTFPE = 0x00; // pull-up vypnuty ATD1C = 0xE4; // zapnuti prevodniku, 8 bit vysledek ATD1PE = 1; // pin PTB0 prepneme do rezimu // vstupu A/D prevodniku
Zvládli jste základy programování HCS08 v C Konec Zvládli jste základy programování HCS08 v C