XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 39 Implementation of C Language and ASIX Modules into the Programming of PIC Microcontrollers Implementace jazyka C a modulů ASIX do programování mikrokontrolérů PIC BALŠÁNEK, Miroslav Ing., Katedra ATŘ-352, VŠB-TU Ostrava, 17. listopadu, Ostrava Poruba, 708 33, miroslav.balsanek.fs@vsb.cz Abstract: Project deals with implementation of C language into the programming of PIC microcontrollers at the Department's laboratories with support of ASIX development modules. The main advantage for beginners in developing applications for PIC microcontrollers using C language is its transparency. The programming tool PicAnt IDE offers 1/3 source code optimization during conversion into the Assembler and following compilation, because it does not compile functions, which were not called and it inline attribute is used. For the education process the use of assembled ASIX modules is more advantageous. PIC microcontrollers are connected there with common peripheries as a display, potentiometers, buttons, and the developer can deal only with the development of his applications. The results of this works are two head files for C language which are universal to development of applications using the intelligent display with HD44780 Hitachi controller and RS-232 communication. Keywords: PIC microcontrollers, programming, C language 1 Úvod Tato práce se zabývá začleněním výukových kitů ASIX do výuky a podporou pro programování mikrokontrolérů PIC v jazyce C. Na katedře ATŘ je zakoupena sada těchto kitů, které studentovi usnadňují práci s mikrokontroléry tím, že jsou to již osazené tištěné spoje běžně používanými periferiemi jako jsou potenciometry, sedmisegmentovky, tlačítka Druhá část projektu je věnována programování mikrokontroléru s využitím jazyka C. Katedra 352 disponuje licencí na programový modul C2C a PicAnt, s jejichž pomocí je možné programovat mikrokontroléry podle standardu ANSI C. Poslední část práce se zabývá návrhem dvou hlavičkových funkcí pro ovládaní inteligentního displeje a pro komunikaci po sériové lince s mikrokontrolérem. Hlavičkové soubory pro tyto dvě periferie obsahují funkce pro vyslání znaku, řetězce a jedno až čtyřmístných čísel. 2 Výukový kit ASIX Výukový kit ASIX je vhodným nástrojem jak pro začínající programátory procesorů PIC tak pro již pokročilé programátory, kteří mohou vyžívat širokou škálu ladících nástrojů, např. zařízení pro monitorování vnitřních stavů součástek INSIDER nebo emulátory MU Alfa a univerzálnější MU Beta. Pro začínající programátory stavebnice nabízí řadu tištěných spojů osazených tlačítky, trimry, diodami, sedmisegmentovkami nebo obvody umožňujícími příjem a vysílaní dat po sériovém rozhraní RS-232, USB a infraportu. Programátor tak není zatěžován návrhem a osazováním tištěných spojů a může se věnovat jen programování.
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 40 Všechny obvody jsou doplněny podrobnými elektrickými schématy zapojení a tak se programování stává ještě přehlednější. Pokud však programátorovi nestačí, nebo nevyhovuje zapojení jednotlivých modulů, může využít prototypovou desku ProtoKit84 doplněnou o kontaktní pole, kde je možné na jednotlivé porty libovolně připojovat vlastní součástky. 2.1 Programátory mikrokontroléru PIC a sériových EEPROM pamětí Výukový kit ASIX obsahuje širší výběr programátorů. V této práci budou popsány dva základní, PicQuick a CAPR-PI. Programátory jsou určeny pro programování po paralelní lince nebo prostřednictvím technologie ICSP (In-Circuit Serial Programming), programování součástek již osazených v desce tištěného spoje. Programátor PicQuick Jedná se o univerzální programátor všech dostupných druhů mikrokontrolérů PIC a sériových EEPROM pamětí (Mikrochip). Kompatibilita s novými součástkami je zajištěna upgradem ovládacího softwaru. Programátor umožňuje programování jak připojením k paralelnímu portu PC, tak také technologií ICSP. Programátor je doplněn o proudové omezení při napájení a programování mikroprocesoru, tak se programátor stává odolný vůči chybnému programování, např. chybnému výběru programované součástky v programovacím software. Programátor CAPR-PI CAPR-PI je jednoduchý programátor napájený z paralelního portu PC, tato technologie však nepodporuje všechny rodiny mikrokontrolérů PIC. Jeho výhoda je možnost programování napevno usazeného procesoru v desce tištěného spoje. Obrázek 1 Programátor CAPR-PI 2.2 Výukové desky ASIX a podpora programování mikrokontrolérů Výukové desky jsou určeny především k odlaďování naprogramovaných aplikací a jejich simulaci. Desky jsou osazeny mnoha periferiemi, připojenými na piny mikrokontrolérů. Emulátor MU Beta/MU Alfa MU Beta je hardwarový real-time emulátor mikrokontrolérů Microchip PIC v pouzdrech od 8 do 18 pinů, včetně typů s A/D převodníkem a analogovými komparátory. Mezi některé výhody emulátoru patří, že může fungovat bez připojené koncové aplikace, při simulování různých součástek stačí pouze měnit jejich typ v obslužné aplikaci.
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 41 Obrázek 2 Emulátor MU Beta PVK40 PVK40 je plošný spoj osazený většinou z běžně používaných periférií. Procesor lze programovat technologií ICSP nebo lze pro simulaci využít emulátor MU Beta. Jako procesory určené k programování se dají použít velmi používané mikrokontroléry PIC s pamětí Flash PIC16F87x, PIC16F7x, PIC18Fxx v pouzdrech se čtyřiceti vývody. Obrázek 3 Výukový modul PVK40 Externí periferie Dva potenciometry připojené na vstupy A/D převodníků, Fotorezistor připojený na vstup A/D převodníku, Mikrofon s předzesilovačem připojeným na vstup A/D převodníku, Patice pro sériové EEPROM (3 typy: I 2 C - 24xx, MicroWire - 93xx, SPI - 25xx), včetně paměti 24LC01, Konektor a převodník úrovní pro RS232 pro sériový přenos dat (UART), Patice pro převodník USB-RS232 realizovaný přídavným modulem UMS1, IR vysílač a přijímač, Čtyři sedmisegmentové LED displeje, LED bargraph (desetimístný), Interface pro modul inteligentního alfanumerického LCD displeje (MC1602), Samostatná (nemultiplexovaná) LED, Osm tlačítek, Piezo-měnič (připojený na výstupní pin PWM), Krystal 3.2768 MHz, Možnost připojení dalšího krystalu nebo RC oscilátoru, Tlačítko reset,
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 42 Stabilizované napájení 5 V, Konektor zpřístupňující všechny piny PIC (všechny I/O mohou být připojeny interně nebo externě podle potřeb uživatele), Podpora programování PIC osazeného v aplikaci (ICSP), ProtoKit84 Jedná se o další plošný spoj určený pro sestavování a odlaďování aplikací s využitím emulátorů. S jejich pomocí lze aplikace na prototypové desce simulovat bez použití mikrokontroléru PIC16F84A, pro který je deska navržena, nebo lze naprogramovat mikrokontrolér umístěný v patici na desce plošného spoje. Programování a simulace probíhá při přepnutí přepínače do polohy MU Alfa, v poloze 16F84 jsou periferie ovládány z mikrokontroléru. Na rozdíl od ostatních výukových kitů, nemá ProtoKit84 připojené žádné periferie jako jsou displeje a tlačítka, ale vývody z mikrokontroléru jsou přivedeny na pájecí pole a je tak možné připojovat periferie dle vlastního uvážení s libovolným zapojením pinů. Obrázek 4 Prototypový kit ProtoKit84 Externí periferie mikrokontrolér PIC16F84A v patici, obvody pro programování, konektor pro připojení emulátoru, napájecí obvody +5V, resetovací tlačítko, přepínač režimu emulátor/mikrokontrolér, indikační LED, pájecí pole, EduKitBeta EduKitBeta je výuková deska určená výhradně pro spolupráci s emulátory MU Beta/MU Alfa, protože neobsahuje vlastní řídicí mikrokontrolér. EduKitBeta podporuje všechny mikrokontroléry, které lze simulovat prostřednictvím emulátorů ASIX. Deska obsahuje řadu periferií jako obvody pro komunikaci po sériové lince, sedmisegmentovky, tlačítka a je tak možné vyvíjet a ladit aplikace větších rozměrů. Po připojení RS-232 USB (UDS1 + UMS1) převodníku do sériového portu CANON 9 na výukové desce, je možné využívat komunikaci s PC po USB lince. Externí periferie čtyři potenciometry zapojené na vstupy analogových A/D převodníků a komparátorů, čtyři sedmisegmentové LED displeje s třídrátovým sériovým ovládáním,
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 43 samostatná LED, dvě tlačítka, součástky s I 2 C: seriová EEPROM 24LC01 + teploměr TCN75, konektor RS232 a napěťový převodník (připojen k pinům UART PIC16F62x), piezo-měnič (zapojený na výstupní piny PWM PIC16F62x), resetovací tlačítko, napájecí obvody, konektor pro připojení k emulátoru, konektor s vyvedenými piny emulovaného mikrokontroléru, PIC Verification Kit PVK PVK je výuková deska sloužící k odlaďování a simulování aplikací využíváním připojených tlačítek, LED diod a čtyř sedmisegmentovek nebo využíváním konektoru připojeného do bezkontaktního pole a tak realizovat vlastní zapojení. Tato deska je vybavena paticí pro zasouvání mikrokontrolérů s nulovou silou, tudíž je možné procesory bez obav opakovaně programovat prostřednictvím externích programátorů nebo využít simulování emulátory MU Beta/MU Alfa (redukce). Externí periferie napájecí zdroj, oscilátor, obvod resetu, sedmisegmentové číslicovky LED, 8 samostatných LED, 8 tlačítek, patice s nulovou zasouvací silou, konektor pro využití pinů k jiným účelům, INSIDER INSIDER slouží k monitorování pozice programu v aplikacích s libovolným typem mikrokontroléru (Microchip PIC, Atmel, Dallas, Philips, Motorola,...) nebo stavu aplikací s programovatelnými logickými obvody pracujícími s úrovněmi napětí 3V nebo 5V. INSIDER pomocí vstupů CLK, DATA a umožňuje zobrazení generovaných synchronních sériových dat o délce 4/8/12/16 bitů. Základními funkčními bloky INSIDERu jsou 16-bitový posuvný registr, 16-bitový záchytný registr, dekodér do hexadecimálního tvaru a čtyřmístný sedmisegmentový displej. 3 Software pro programování a simulaci procesorů PIC Programů k programování mikrokontroléru PIC je dnes celá řada. Tato kapitola ale bude soustředěna na software podporující produkty ASIX. Software napsaný pro operační systémy MS-DOS, Windows 3.1x a Windows 9x/ME může přistupovat přímo k I/O portům hardware. V operačních systémech Windows NT/2000/XP je tento přístup možný jedině přes speciální ovladače (drivery), které musí běžet na systémové úrovni. Jako program umožňující pracovat s paralelním portem mžeme použít např. freeware UserPort. 3.1 Software pro komunikace s emulátory MU Beta/MU Alfa Existují dva programy pro simulaci aplikací pro tyto emulátory. Původní verze s názvem ARTEMIS, určená pro operační systém MS-DOS (fungující také s MS Windows), a jeho novější verze určená pro operační systémy MS Windows s názvem IDEA.
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 44 ARTEMIS V tomto programu lze aplikace programovat v jazyce Assembler a tyto aplikace spouštět a ověřovat funkci prostřednictvím emulátorů s různými vývojovými deskami podporujícími MU Beta/Mu Alfa. V první řadě je nutné nastavit emulátor, se kterým se bude pracovat. Toto nastavení se provádí v menu OPTIONS/Global. V případě operačních systémů MS Windows NT/2000/XP je nutné paralelní port nastavit jako LPTx a jeho adresu zadat ručně (musí být spuštěna aplikace UserPort). Prostřednictvím menu TOOLS/Initialize system je nutné emulátor inicializovat. Poté stačí vytvořit nový projekt nebo využít předem vytvořený soubor *.asm. Aplikace spouští v menu RUN/Run. Ovládání programu ARTEMIS je omezeno pouze na použití klávesnice. IDEA Toto prostředí je v podstatě předchozí program ARTEMIS přepsaný pro operační systém MS Windows. Proto také nastavení a ovládání těchto dvou programů je téměř shodné. Je nutné správně nastavit paralelní port a hardware inicializovat. Obrázek 5 Vzhled vývojového prostředí IDEA 3.2 Software pro programátory ASIX Pro programování mikrokontrolérů PIC existuje mnoho vývojových prostředí. Asi nejzákladnějším je freeware MPLAB vytvářený přímo firmou Microchip. MPLAB je ovšem určen pro programování po sériové lince a proto pro výše popsané programátory CAPR-PI a PicQuick je vhodné využívat programy PicQuick a UP!. PicQuick PicQuick je nástoj pro programování mikrokontrolérů PIC s využitím programátorů ASIX, vytvořený pro operační systém MS-DOS (je možné je použít s operačními systémy MS Windows). Při používání aplikace pod operačním systémem MS Windows NT/2000/XP je nutné mít pro správnou komunikaci s programátory spuštěný program UserPort. Program nedisponuje vlastním překladačem a je proto nutné sestavit soubor *.hex. Je nutné dbát na správném výběru před zahájením programování.
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 45 Obrázek 6 Programovací prostředí UP! UP! Program UP! je druhým programem vytvořeným pro programování všemi druhy programátorů ASIX, vytvořený pro operační systémy MS Windows, ovšem je omezen pouze na některé řady mikrokontrolérů PIC. Ovladač pro přístup k paralelnímu portu PC (asixio.sys) je instalován automaticky, proto ovladač UserPort není třeba instalovat. 4 Možnost programování PIC v jazyce C Obrázek 7 Vývojové prostředí PiCAnt
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 46 Při programování mikrokontrolérů není programátor omezen pouze na programování pouze v jazyce Assembler, ale může využívat i jiné, vyšší programovací jazyky jako jazyk C, Basic, Pascal atd. Při programování mikrokontrolérů PIC je možné využít aplikace C2C, PicANT, SourceBoost určené pro mikrokontroléry PIC nebo další, např. PICC, PICC18, 8051 C určené i k programování procesorů značek: PIC, AMD, Atmel, Cygnal, Dallas, Goal, Infineon/Siemens, Intel, Philips, STM, Temic, Texas Instruments, Winbond, ON/Motorola, Zilog Z80 Tabulka 1: Výběr funkcí využívající PicAnt Funkce Význam void enable_interrupt(number) Povolit přerušení void disable_interrupt(number) Zakázat přerušení void set_tris_a(expression) Nastavení portu A jako I/O (také porty B, C, D, E) void output_port_a(expression) Vyslání bajtu na port A (také porty B, C, D, E) void output_high_port_a(number) Nastavení bitu na port A do 1(také porty B, C, D, E) void output_low_port_a(number) Nastavení bitu na port A do 0 (také porty B, C, D, E) char input_port_a(void) Čtení bajtu z portu A (také porty B, C, D, E) char input_pin_port_a(number) Čtení bitu z portu A (také porty B, C, D, E) void sleep(void) Procesor v sleep módu void nop(void) Prázdní instrukce void putchar(expression) Vyšle znak na RS232 char getchar(expression) Přečte znak z RS232 delay_s Pauza v sekundách delay_ms Pauza v milisekundách delay_us Pauza v mikrosekundách char_to_bcd Převede znak do binární soustavy bcd_to_char Převod z binární soustavy na znak Kromě výše uvedených funkcí na assemblerovské úrovni jsou samozřejmě k dispozici funkce standardu ANSI C. Všechny soubory zakomponované v projektu jsou při sestavování převedeny do jazyka assembler a dále jsou zkompilovány do souboru *.hex. Program PicAnt nedisponuje vlastním překladačem, simulátorem ani programátorem, ale je možné využít volně šířitelný program MPLAB, MPASMWIN a MPSIM. Při kompilaci je možné využít několika možností 4.1 Hlavičkové soubory pro ovládání displeje a pro komunikaci po sériové lince Prozatím byly vytvořeny dva hlavičkové soubory pro ovládání sériové linky a inteligentního displeje HD44780. Tyto funkce byly vytvořeny k jednoduššímu ovládání uvedených periferií pouhým voláním jednotlivých funkcí. Tabulka 2: Funkce hlavičkového souboru display.h Funkce Význam void LCDPutch(char znak) Vyšle znak na LCD void LCDClear(void) Vymazáni displeje a nastaveni kurzoru na 1 void LCDInit(void) Inicializace displeje void LCDPrintf( const char *lcdptr ) Vyšle řetězec na LCD void LCDInt1(int LCDnum) Vyšle jednomístné číslo na LCD max. 9 dec void LCDInt2(int LCDnum) Vyšle dvojmístné číslo na LCD max. 99 dec void LCDInt3(int LCDnum) Vyšle trojmístné číslo na LCD max. 999 dec void LCDInt4(int LCDnum) Vyšle čtyřmístné číslo na LCD max. 9999 dec
XXX. ASR '2005 Seminar, Instruments and Control, Ostrava, April 29, 2005 47 Tabulka 3: Funkce hlavičkového souboru RS232.h Funkce Význam void COMInt1(int COMnum) Vyšle jednomístné číslo po RS232 max. 9 dec void COMInt2(int COMnum) Vyšle dvojmístné číslo po RS232 max. 99 dec void COMInt3(int COMnum) Vyšle trojmístné číslo po RS232 max. 999 dec void COMInt4(int COMnum) Vyšle čtyřmístné číslo po RS232 max. 9999 dec void COMPrintf( const char* Vyšle řetězec po RS232 COMtext ) 5 Závěr Tato práce se zabývá implementací vývojových kitů do výuky pro usnadnění práce s mikrokontroléry PIC. V práci je popsáno několik zakladních modulů a různá vývojová prostředí pro programování v assembleru, ale hlavně v jazyce C. Součástí práce je návrh dvou hlavičkových souborů pro ovládání periferií jako jsou inteligentní displej s čipem Hitachi a sériové komunikační rozhraní mikrokontroléru. Tyto soubory byly vytvořeny pro snazší zacházení s těmito periferiemi proto, aby začátečník v programování mikrokontrolérů mohl využít svých znalostí v strukturovaném programování a nemusel programovat procesory v nižších programovacích jazycích. Další náplní práce by mohlo být vytvoření univerzálních hlavičkových souborů pro ovládání např. AD převodníků, sběrnic, klávesnic atd. 6 References ASIX S.R.O. Katalog produktů[online]. [cit. March 15, 2005]. Available from www: http://www.asix.cz/a6products.htm. KAČMÁŘ, D. 2001. Jazyk C. Computer Press, Praha, 190 p. ISBN 80-7226-295-5. MICROCHIP PIC 16F84A Data Sheet [online].. [cit. March 15, 2005]. Available from www: http://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf. MURGHARD, M. C pro mikrokontroléry PIC ANSI-C, kompilátory, linkery, příklady nástroje, tipy a triky,.., BEN, 279 p., ISBN 80-7300-077-5