Jste zde

Program běžícího textu pro MCU MC9S08LC60

Pro účely prezentace Freescale kitu DEMO9S08LC60 na výstavě Amper 2007 jsem
vytvořil jednoduchý prográmek, který na LCD displeji vytváří běžící reklamní
text, jehož rychlost se reguluje otáčením k MCU připojeného potenciometru. Zároveň
jde o zajímavou ukázku, jak snadné je s vývojovým programem CodeWarrior Development
Studio firmy Freescale snadno vytvořit podobnou aplikaci, kterou i méně zběhlý
začátečník zvládne za několik hodin. V tomto článku je pak uveden jak zdrojový
kód, tak jeho vysvětlení a ukázka základní práce s CodeWarriorem v návaznosti
na připojený kit.

V letošním dubnu jsem mi v rámci zkoušení výrobků firmy Freescale dostal na stůl demonstrační a vývojový kit označený jako DEMO9S08LC60 obsahující mimo mnoha různých periférií a senzorů i výkonné 8bitové MCU Freescale MC9S08LC60FKE v 80pinovém SMD pouzdru LQFP. Protože kit měl být následně vystaven na výstavě AMPER 2007 na výstavišti v Letňanech, vytvořil jsem pro tyto účely na mnohasegmentový LCD displej, který je součástí kitu, reklamní běžící text "HW SERVER A FREESCALE Vas vita na vystave Amper 2007".

Program je napsán v jazyku C a při jeho vývoji jsem využíval ke kitu přiložený vývojový PC software CodeWarrior IDE 5.1 SE. Na první pohled pro začínající programátory docela složitá věc, která se však v CodeWarrioru výrazně zjednoduší. Plno věcí je možné si nechat automaticky předdefinovat dle zvoleného typu procesoru a příp. vývojového kitu nebo lze jednoduchým klikacím způsobem přednastavit registry a periferie procesoru (mikrokontroléru) předdefinovat v CodeWarrioru vestavěném programu Processor Expert.

 

Program běžícího textu pro MCU HCS08LC60

Program běžícího textu byl vytvořen hlavně pro demonstrační účely nejen MCU MC9S08LC60, ale i kitu DEMO9S08LC60, proto není strohý, ale má do sebe začleněno využití a ovládání následujících periferií a prvků:

  • LCD displej připojený na porty
  • 8 červených LED diod připojených na portech PTA a PTB
  • Jednootáčkový potenciometr připojený na A/D převodních MCU

 

Celý program provádí následující funkci:

Na LCD displej postupně vypíše zleva doprava text "HW SERVER", "A" a "FREESCALE" a poté zprava doleva běží text "Vas vita na vystave AMPER 2007". Rychlost výpisu a běhu textu lze v reálném čase regulovat pomocí natočení potenciometru. Úroveň natočení a tedy i rychlosti je indikována sloupcem 8 LED, které indikují logický stav každého z 8 bitů výsledné hodnoty z A/D převodníku.

Struktura programu:

Program se skládá s hlavního zdrojového kódu tvořeného souborem main.c, kódem pro výpis a ASCII znaků na zadanou pozici na displeji obsaženého v souboru lcd.c a startovacího kódu (68HC08 standard startup code) start08.c pro inicializaci stack pointeru a ROM knihoven. Souboru mc9s08lc60.c pak přiřazuje adresám všech registrů MCU specifický název a u některých i inicializuje hodnoty. Soubory start08.c i mc9s08lc60.c jsou standardně automaticky vytvořeny CodeWarriorem při zakládání projektu v závislosti na volbě typu MCU, případně k PC připojeném vývojovém kitu či programátoru, na volbě programovacího jazyka (C, C++), zvolí velikosti startovacího kódu (minimal startup code vs. ANSI startup code), modelu paměti (tiny vs. small) atd. V programu použité ovládání LCD displeje definované souborem lcd.c je pak dílem tvůrce kitu, firmou SofTec Microsystems.

 

Popis zdrojového kódu main.c:

Hlavní funkční kód je tvořen hlavní smyčkou programu "void main(void)", která prakticky jen volá v určitém pořadí některou následující funkcí a posílá jim data:

  • void PeriphInit(void) - inicializace dále v programu používaných registrů a periférií (A/D převodník, časovač, frekvenci hodin, porty PTA a PTB, řadiče LCD)
  • unsigned char SpeedControl (void) - regulace rychlosti posuvu textu, resp. nastavením délky zpoždění pomocí natočení potenciometru
  • void Delay(unsigned char del, unsigned char number) - generovaní požadované prodlevy pro pohyb textu (ASCII znaků) a zpoždění mezi zobrazením a vymazáním textu na LCD displeji
  • void PrintString(unsigned char *str) - vypíše jednorázově text na displej
  • void SlideStringRight(unsigned char *str) - postupně vypíše po jednotlivých znacích text na LCD ve směru zleva doprava
  • void SlideStringLeft(unsigned char *str) - vytváří kontinuálně běžící text ve směru zprava doleva
 

Prostředí pro programování - sloupec zdrojových souborů zahrnutých do projektu (vlevo) a soubor main.c (vpravo)

Podklady pro vyzkoušení programu "běžící text"

  • Zdrojové kódy celého programu lze stáhnout zazipovaném v souboru - Sources.zip

  • Celý projekt vytvořený v programu CodeWarrior verze 5.1 pro demonstrační / vývojový kit DEMO9S08LC60 lze stáhnout zazipovaný v souboru - HW_demo.zip

  • Zapojení kitu DEMO9S08LC60 a rozpis součástek pro ty, kteří kit nevlastní - demo9s08lc60_schematic.pdf

 

Základy používání programu CodeWarrior

Vývojový program CodeWarrior Development Studio je velmi kvalitní nástroj pro snadnější návrh a vývoj programu pro všechny procesorové produkty v nabídce firmy Freescale. Dle mého názoru dobře propracovaný a mě do ruky padnoucí je prvotní průvodce vytvořením projektu, který postupně umožňuje mimo samotný název projektu a místa jeho uložení i zvolit následující položky:

  • Přesný typ procesoru (MCU) - zde v mém případě MCU MC9S08LC60
  • Volba připojeného hardwarového zařízení (vývojového nebo demo kitu, programátoru apod.) nebo jen plnou simulaci chipu
  • Programovací jazyk z nabídky Asembler, C a C++ - pro výše uvedený program byl zvolen jazyk C
  • Vložit již dříve vytvořené zdrojové kódy - například soubor ovládání LCD displeje lcd.c
  • Volba modelu startovacího kódu, model paměti (tiny/small), příp. formát floating pointu
  • Využití služby "klikací" inicializace procesoru (registrů a periferií) nebo i interaktivní "klikací" návrh programu
 

Při vytváření nového projektu je nutné zvolit konkrétní MCU a desku či typ simulace

 

Při vytváření nového projektu je nutné dále vybrat typ prog. jazyka (vlevo), startovací kód a model paměti (vpravo)

Věc, která mi připadá jako velmi užitečná v CodeWarrioru, je modul Processor Expert, který výrobce označuje heslem "The Human Interface to the World of Silicon". Ta umožňuje buď v jednodušším případě zjednodušit inicializaci a nastavení registrů na chipu obsažených periferií, které je téměř vždy nutné provést na počátku běhu hlavní smyčky programu, nebo i přímo interaktivně vytvářet samotné funkce programu. Například ve výše uvedeném programu běžícího textu je nutné inicializovat a nastavit A/D převodník, časovač, nastavit vstupy a výstupy. K tomu je běžně nutné buď mít podrobně nastudovanou strukturu a vlastnosti MCU a jejich registrů nebo v časové tísni (což je dnes běžné) se snažit použít něco z nějakých demo programů. V případě CodeWarrioru lze však použít Processor Expert, kde se klikacím způsobem prakticky vše dá vybrat z nabídek, přičemž se průběžně graficky zobrazuje změna stavu bitů v příslušných registrech. Pokud tedy někdo zná alespoň obecné základy programování MCU, není nastavování problém a navíc se dá takto rychleji prakticky naučit označení (adresy) registrů a význam jednotlivých jejich bitů. Nastavení ADC nebo přiřazení vstupů a výstupů jednotlivým I/O pinům se stává hračkou.

 

Klikací prostředí modulu Processor Expert pro nastavení vstupů a výstupů MCU

ladeniKompletní vytvořený program lze kompletně přeložit kliknutím na ikonku DEBUG, kde v případě syntaktických chyb se vypíší ve zvláštním okně hlášky. Když se na ně klikne, zobrazí se příslušný chybný řádek. Pokud je program v pořádku vytvoří se příslušný binární kód pro nahrání do MCU. Pokud je k PC napojen nějaký vývojový kit nebo programátor (v mém případě DEMO9S08LC60), hned se nabídne k výběru a po potvrzení je provede nahrání programu. Následuje otevření okna modulu emulátoru / simulátoru "True-Time Simulator & Real-Time Debugger", kde je možné program spustit, krokovat ve 4 režimech, sledovat hodnoty všech proměnných a registrů, disasemblovaný program nebo výpis paměti. Vše je z pohledu ovládání docela intuitivní a uživatel alespoň částečně znalý nějaké práce s jinými vývojovými programy pro MCU či FPGA nebude myslím si mít žádné problémy.

 

Prostředí modulu True-Time Simulator & Real-Time Debugger určený pro simulaci programu nebo jeho reálné ladění na desce

 

Závěr

Tento program byl původně vytvořen hlavně jako jednoduchý ukázkový a propagační pro kit DEMO9S08LC60, ale hezky demonstruje základy programování MCU v jazyku C ve vývojové prostředí CodeWarrior firmy Freescale. Pokud ve svých zapojeních však využijete MCU MC9S08LC60 a připojení LCD displeje dle schématu kitu firmy SofTec Microsystems, lze zde uvedený program přímo použít.

Vývojový a demonstrační kit DEMO9S08LC60 si můžete objednat též v našem HW Shopu za cenu 2 999,- Kč bez DPH.

Antonín Vojáček
vojacek@ hwg.cz

DOWNLOAD & Odkazy

Hodnocení článku: