STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST Obor SOČ: 18. informatika INTELIGENTNÍ PROGRAMÁTOR JEDNOČIPOVÝCH MIKROPOČÍTAČŮ INTELIGENT PROGRAMMER SIGNGLECHIP MICROCONTROLLERS Autor: Martin Krásl Škola: Kraj: Vyšší odborná škola, Střední škola, Centrum odborné přípravy, Budějovická 421, Sezimovo Ústí http://www.copsu.cz/cs/ Jihočeský Konzultant: Ing. Jiří Bumba Sezimovo Ústí 2016
Prohlášení Prohlašuji, že jsem svou práci SOČ vypracoval samostatně a použil jsem pouze podklady (literaturu, projekty, SW atd.) uvedené v seznamu, vloženém v práci SOČ. Prohlašuji, že tištěná verze a elektronická verze soutěžní práce SOČ jsou shodné. Nemám závažný důvod proti zpřístupňování této práce v souladu se zákonem č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) v platném znění. V Sezimově Ústí dne 12.4.2016 podpis:
Poděkování Děkuji škole, že mi umožnila se seznámit s programováním jednočipových mikropočítačů PIC.
ANOTACE Cílem této práce bylo vytvořit inteligentní programátor s přívětivým grafickým uživatelským rozhraním, který by umožňoval autonomně bez použití osobního počítače programovat jednočipové mikropočítače, a dokonce pomocí něho přímo vytvářet jednoduché programy. Parametry programátoru jsou uvedeny v první kapitole. Ve druhé kapitole jsou popsány informace o hardwarovém řešení programátoru. Skládá se ze dvou částí a obě jsou v této práci blíže popsány. Třetí kapitola popisuje software, který obsluhuje jednotlivé části programátoru včetně grafického uživatelského rozhraní. Všechny důležité podprogramy jsou podrobně vysvětleny. Lze se dozvědět i důležité informace o obsluze LCD zobrazovačů s dotykovým panelem. V popisu grafického uživatelského rozhraní jsou popsány jednotlivá okna a další objekty. Text je doplněn o obrázky pro jeho lepší pochopení. Ve čtvrté kapitole je stručně popsán programovací jazyk assembler. Dále je zde popsána instrukční sada jednočipového mikropočítače PIC16F628, který je použit v ukázce práce s programátorem v páté kapitole. Vzorový program byl vytvořen pro simulaci činnosti klopného obvodu RS a jeho pomocí je demonstrován způsob obsluhy programátoru. Součástí ukázky je i schéma zapojení, podle kterého si čtenář může obvod sestavit, a vytvořený program vyzkoušet. Klíčová slova: Jednočipový mikropočítač; deska programátoru; modul MIKROE-597; grafické uživatelské prostředí; assembler.
ANNOTATION The purpose of this work was to create an intelligent programmer with a favourable controlling that would allow program particular chips without using a personal computer. Programmer parameters are presented in the first chapter. The second section provides information about the hardware solutions programmer. It consists of two parts and both are described in the thesis in details. The third chapter describes the software that operates the programmer individual parts, including a graphical user interface. All-important subroutines are explained in details. You can also learn important information about the operation of LCD displays with a touch panel. In the description of the graphical user interface are described particular windows and other objects. The text is supplemented by pictures for better understanding. In the fourth chapter it is briefly described the programming language assembler. Also there is depicted an instruction set PIC16F628 microcontroller, which is used in the example of working with a programmer in the fifth chapter. The sample program was created to simulate activities of RS flip-flop, and by its help it 3is demonstrated the way of the service programmer. The component of the demonstration is a circuit diagram, according to which the reader can assemble the circuit and try the created program. Keywords: single-chip microcomputer; board programmer; MIKROE module 597; graphical user interface; assembler.
OBSAH Strana Úvod... - 8-1 Hlavní parametry programátoru... - 9-2 Hardwarové řešení programátoru... - 10-2.1 Základní deska programátoru... - 10-2.2 Modul MIKROE-597... - 12-2.2.1 Zobrazovač s dotykovým panelem... - 13-2.2.2 Řídicí mikropočítač PIC32MX460F512L... - 16-2.2.3 Způsob práce se zobrazovačem... - 16-3 Softwarové vybavení... - 19-3.1 Řídicí program... - 19-3.1.1 Programová obsluha zobrazovače... - 19-3.1.2 Čtení z dotykového panelu... - 21-3.1.3 ICSP protokol... - 23-3.2 Grafické uživatelské rozhraní... - 26-3.2.1 Hlavní nabídkové menu... - 26-3.2.2 Obrazovka pro výběr instrukce... - 27-3.2.3 Obrazovka pro zadání adresy nebo dat... - 28-3.2.4 Obrazovka zvolení bitu... - 29-3.2.5 Volba uložení výsledku... - 30-3.2.6 Upřesnění činnosti... - 30-3.2.7 Informační okno... - 31-3.2.8 Návrh tlačítek a oken... - 31-3.2.9 Programová obsluha grafického uživatelského rozhraní... - 33-4 Assembler... - 35-4.1 Instrukční sada PIC16F628... - 35-4.1.1 Bajtově orientované... - 36 - - 6 -
4.1.2 Bitově orientované... - 36-4.1.3 Instrukce pro práci s konstantou a řídicí instrukce... - 37-5 Ukázka práce s programátorem... - 37-5.1 Popis klopného obvodu RS... - 38-5.2 Schéma zapojení... - 38-5.3 Vývojový diagram programu... - 39-5.4 Vytvoření programu... - 40 - Závěr... - 48 - - 7 -
Úvod Na VOŠ, SŠ a COP Sezimovo Ústí se v rámci předmětu Projektování mikroprocesorových systémů učí žáci pracovat s jednočipovými mikropočítači. Programy vytvořené během výuky se do mikropočítače zavádějí prostřednictvím programátorů, které ke své činnosti potřebují osobní počítač, na kterém je nainstalován ovládací software. K vytváření programu se zde používá vývojové prostředí MPLAB. Cílem této práce bylo vytvořit inteligentní programátor s přívětivým grafickým uživatelským rozhraním, který by umožňoval autonomně bez použití osobního počítače programovat jednočipové mikropočítače od firmy Microchip, a dokonce pomocí něho přímo vytvářet jednoduché programy. Tyto programy umí přeložit do strojového kódu a následně zavést do programovaného mikropočítače. Pro konstrukci Inteligentního programátoru byl využit modul MIKROE-597 od firmy mikroelektronika, který kromě řídícího mikropočítače a pomocných obvodů obsahuje současně i barevný LCD zobrazovač s rozlišením 320x240 pixelů. Modul disponuje dotykovou obrazovou. - 8 -
1 Hlavní parametry programátoru Programátor sestává ze dvou dílčích částí, ze základní desky programátoru a z modulu MIKROE-597. Modul byl použit proto, že již obsahuje všechny důležité prvky potřebné pro stavbu programátoru. Výroba těchto částí by nebyla efektivní neboť škola již tento modul vlastní. Nedílnou součástí Inteligentního programátoru je řídicí software, který kromě obsluhy programátoru zajišťuje i komunikaci s uživatelem. Technické parametry programátoru: Napájecí napětí Programované mikropočítače Velikost vytvářeného programu Rychlost zavádění programu +14 až +20V DC 8bit, pouzdro DIL18 do 256 instrukcí max. 8s Obrázek 1-1 Inteligentní programátor - 9 -
2 Hardwarové řešení programátoru Jak již bylo uvedeno v předcházející kapitole, konstrukce programátoru sestává ze dvou částí. Základní deska programátoru obsahuje napájecí obvody, obvody pro úpravu signálů, patici s nulovou axiální silou k programování mikropočítačů a konektory pro řídící modul. Na modul MIKROE-597 lze nahlížet jako na samostatnou část, řídící činnost programátoru a zajišťující komunikaci s uživatelem. Blokové schéma programátoru je na obrázku 2-1. Uživatel Komunikační rozhraní pro uživatele Modul MIKROE-597 Grafické uživatelské prostředí Řídící systém Komunikační rozhraní Základní deska programátoru Programovaný mikropočítač Obrázek 2-1 Blokové schéma programátoru Komunikační rozhraní pro uživatele - zobrazovač s dotykovým panelem Grafické uživatelské prostředí - formulářové objekty (tlačítka, okna, texty) Řídicí systém - mikropočítač PIC32MX460F512L modulu MIKROE Komunikační rozhraní - komunikace mezi řídicím systémem a základní deskou Základní deska programátoru - hlavní konstrukční část programátoru Programovaný mikropočítač - patice pro vložení programované součástky 2.1 Základní deska programátoru Deska má rozměry 160x100 mm. V levé horní části je napájecí konektor a pojistka. Pod nimi se nachází spínaný zdroj s výstupním napětím +5V pro napájení modulu a obvodů pro úpravu signálů. Napravo je 13V stabilizátor programovacího napětí. V levém dolním rohu je patice s nulovou axiální silou, do které se vkládají programované mikropočítače. Vpravo od ní jsou 4 signalizační LED diody, indikující jednotlivé stavy - 10 -
během programování. V pravé části desky se nachází konektor, do kterého se zasouvá řídicí modul. Mezi paticí a modulem jsou obvody pro úpravu signálů. Zajišťují vzájemnou obousměrnou komunikaci mezi modulem, jehož mikropočítač pracuje s napájecím napětím +3,3V a programovaným mikropočítačem, napájeným napětím +5V. Schéma základní desky je v příloze A. Příklad obvodu pro úpravu jednoho ze signálů je na obrázku 2-2. Pracuje jako obousměrný napěťový převodník. Přenášíme-li logický signál zleva doprava, to znamená, že provádíme převod ze signálu 0/+3,3V na 0/+5V, je jeho funkce následující: je-li vlevo úroveň logická 0, tranzistor Q1 je otevřený a rezistory R2 a R3 propojuje s logickou 0. Ta je přes rezistor R3 přiváděna na signál ICSP_PGD. Úbytek napětí na sepnutém tranzistoru Q1 leží bezpečně v tolerančním poli logické 0. je-li vlevo úroveň logická 1 (+3,3V), tranzistor Q1 má na elektrodě G a S téměř shodné napětí +3,3V a je uzavřen. Odděluje tak obvod s napájením +3,3V od obvodu s napájením +5V. Pro ten vytváří logickou 1 sériově spojený rezistor R2 a R3. Přenášíme-li logický signál zprava doleva, to znamená, že provádíme převod ze signálu 0/+5V na 0/+3,3V, je jeho funkce následující: je-li vpravo výstupní úroveň logická 0, otevírá se schottkyho ochranná dioda tranzistoru Q1 a rezistory R1 a R3 v sérii protéká proud. Na rezistoru R3 tím vzniká úbytek napětí okolo 150mV. Současně do rezistoru R3 vtéká proud i z rezistoru R2. Ten vytváří příspěvek k napětí na rezistoru R3 také přibližně 150mV. Celkový úbytek na rezistoru R3 je dán součtem těchto dvou napětí a leží bezpečně v tolerančním poli logické 0. je-li vpravo výstupní úroveň logická 1 (+5V), tranzistor Q1 má na elektrodě G a S téměř shodné napětí +3,3V a je uzavřen. Odděluje tak obvod s napájením +5V od obvodu s napájením +3,3V. Pro ten vytváří logickou 1 rezistor R1. - 11 -
Obrázek 2-2 Jeden z obvodů Deska plošných spojů pro základní desku je jednostranná, vyrobená fotocestou. Osazená klasickými součástky. V rozích je opatřena nožičkami. Řídicí mikropočítač pracuje s napětím 3,3V a programovaným s napětím 5V. Aby bylo možné tyto dvě struktury mezi sebou propojit, byl navrhnut jednoduchý napěťový převodník. 2.2 Modul MIKROE-597 Základem modulu je deska plošných spojů o rozměrech 8x6 cm. Téměř celou horní stranu překrývá barevný zobrazovač s rozlišením 320x240 pixelů. Po levé a pravé straně modulu je celkem 52 vývodů, pro komunikaci s okolím, v našem případě se základní deskou programátoru. Vývody zahrnují napájení, analogové a digitální vývody procesoru, výstup PWM, sériovou komunikaci USART, I 2 C a SPI, stereo audio výstup a resetovací vstup. Na spodní straně modulu jsou konektory pro ICSP, pro připojení programátoru. Nad zobrazovačem se nachází resetovací tlačítko. Na spodní straně DPS se kromě řídicího mikropočítače nachází zbývající obvody modulu. Za zmínku stojí např. paměť flash s kapacitou 8Mbitů, audio MP3 procesor, akcelerometr. Dále je zde USB konektor, konektor pro akumulátor a sluchátka a patice pro zasunutí paměťové SD karty. - 12 -
Obrázek 2-3 Modul MIKROE-597 2.2.1 Zobrazovač s dotykovým panelem Zobrazovač s dotykovým panelem je využit pro komunikaci s uživatelem (vstup a výstup informací). Jedná se o barevný LCD zobrazovač s rozlišením 320x240 pixelů, jehož součástí je dotykový panel, který ho činí interaktivním. Každému pixelu lze přiřadit jednu z 262144 nastavitelných barev. Rozlišení dotykového panelu je 1024x1024 bodů. Mikropočítač komunikuje se zobrazovačem prostřednictvím 47 vodičů, viz obrázek 2-4 a tabulka 2-1. Datová sběrnice je 16 bitová. Obrázek 2-4 Vývody zobrazovače - 13 -
LED-K Katoda podsvícení LED-A1~A4 Anody podsvícení IM0~IM3 Výběr rozhraní RESET Reset zobrazovače VSYNC Vertikální synchronizační signál HSYNC Horizontální synchronizační signál DOTCLK Hodinový signál DE Povolení vstupu dat DB0~BD17 Paralelní datová sběrnice SDO Datový výstup pro sériovou komunikaci SDI Datový vstup pro sériovou komunikaci RD Zahájení čtení WRX(D/CX) Zahájení zápisu D/CX(SCL) Hodinový signál CSX Aktivace řadiče zobrazovače TE Synchronizace VDDI Napájení 1,65V - 3,3V VCI Napájení 2,5V - 3,3V GND Zem XR (X+) YD (Y+) XL (X-) Vývody dotykového panelu YU (Y-) Tabulka 2-1 Názvy signálů Princip činnosti LCD zobrazovače modulu MIKROE-597 je podrobně popsán v práci Návod k práci s inteligentním displejem MIKROE-597 [5]. Součástí zobrazovače je i dotykový panel, který se skládá ze dvou od sebe oddělených průhledných ploch. Jejich vzájemné oddělení zajišťují distanční vrcholky (angl. spacer dot), rozmístěné v pravidelném rastru. Průhledné plochy jsou vyrobeny z odporového materiálu. Každá plocha je na dvou protilehlých okrajích opatřena vodivou elektrodou viz obrázek 2-5. - 14 -
Obrázek 2-5 Dotykový panel Při dotyku v určitém místě dojde k propojení těchto dvou ploch. Jedna z ploch umožňuje snímat souřadnici X a druhá Y stisknutého bodu. Vznikne tak soustava čtyř rezistorů zapojených do kříže. Jedna dvojice takto vzniklých rezistorů je připojena k napájecímu napětí a vytváří dělič napětí. Druhá dvojice je připojena na vstup analogového převodníku a slouží jako snímací vodič. Při snímání druhé souřadnice se úloha obou odporových ploch vymění. Obrázek 2-6 Náhradní schéma propojených ploch - 15 -
SIGNÁL X- X+ Y- Y+ Konfigurace vývodů DIGITAL DIGITAL ANALOG ANALOG OUTPUT OUTPUT INPUT INPUT Čtení osy X 0 1 READ - Tabulka 2-2 Odečtení souřadnice X SIGNÁL X- X+ Y- Y+ Konfigurace vývodů ANALOG ANALOG DIGITAL DIGITAL INPUT INPUT OUTPUT OUTPUT Čtení osy X - READ 0 1 Tabulka 2-3 Odečtení souřadnice Y 2.2.2 Řídicí mikropočítač PIC32MX460F512L Tento 32 bitový mikropočítač vyrábí firma Microchip. Využívá instrukční sadu MIPS32. Mezi jeho hlavní parametry patří: maximální taktovací kmitočet 80MHz kapacita programové paměti 512K slov kapacita datové paměti 32K slov podpora USB/OTG sériové komunikace I 2 C, SPI, PMP, UART ALU, jejíž výpočet trvá jeden cyklus Podrobnější informace jsou uvedeny v manuálu [4]. 2.2.3 Způsob práce se zobrazovačem Zobrazovač je k mikropočítači připojen paralelní sběrnicí. Komunikace se provádí pomocí zasílání příkazů nebo dat. Příkazy mají za úkol sdělit řadiči zobrazovače jakou činnost má provádět. Může to být příkaz pro zapnutí zobrazovače, softwarový reset nebo určení polohy kurzoru na obrazovce apod. Za některými typy příkazů následují data, která mohou nést například informaci o barvě, adrese atd. Data mohou být osmibitová nebo šestnácti bitová. - 16 -
Řídicí příkaz může být následován jedním nebo více datovými slovy, zapsanými v přesně definovaném pořadí. Postup při zápisu příkazu pro zobrazovač je následující: 1. RS=1; CS=0; RD=1; WR=0 - nastavení řídicích bitů pro zápis příkazu 2. Data na port LCD (b7:b0) - vlastní příkaz 3. WR=1 - zápis do řadiče zobrazovače se provede vzestupnou hranou Při většině datových přenosů se přenáší osmibitová informace. Některé příkazy, např. nastavení barevného odstínu, vyžadují šestnáctibitové přenosy. Modul MIKROE-597 neumožňuje využít plnou osmnáctibitovou komunikaci zobrazovače, je zablokována nastavením signálů IM0:IM3. Datové vodiče DB0 a DB9 jsou v tomto případě spojeny se společným vodičem. Postup při zápisu dat pro zobrazovač je následující: 1. RS=1; CS=0; RD=1; WR=0 - nastavení řídicích bitů pro zápis dat 2. Data na port LCD (15b:0b) - data 3. WR=1 - zápis do řadiče zobrazovače se provede vzestupnou hranou V následující tabulce jsou uvedeny příklady komunikace mikropočítače se zobrazovačem: - 17 -
Typ Adresa/Hodnota Označení příkazu Poznámka zápisu HEX BIN DEC Příkaz 01 -- 1 -- 1 SOFTWARE_RESET Resetuje MCU LCD Příkaz 28 -- 101000 -- 40 DISPLAY_OFF Vypnutí LCD + se smaže Příkaz 29 -- 101001 -- 41 DISPLAY_ON Zapnuti LCD Příkaz 2A -- 101010 -- 42 COLUMN_ADDRESS_SET Výběr oblasti v ose X Data 8bitová Horních 8bitů "SC" Data 8bitová Spodních 8bitů "SC" Data 8bitová Horních 8bitů "EC" Data 8bitová Spodních 8bitů "EC" Příkaz 2B -- 101011 -- 43 PAGE_ADDRESS_SET Výběr oblasti v ose Y Data 8bitová Horních 8bitů "SP" Data 8bitová Spodních 8bitů "SP" Data 8bitová Horních 8bitů "EP" Data 8bitová Spodních 8bitů "EP" Příkaz 2C -- 101100 -- 44 MEMORY_WRITE Zápis do paměti Data 16bitová Barva pixelu *) Tabulka 2-4 Komunikace se zobrazovačem *) Výsledná barva vzniká smícháním tří základních složek. Červenou a modrou barvu je možné nastavit v 32 odstínech (5bitů informace) a zelenou v 64 odstínech (6bitů). Celkem lze vytvořit 65536 různých barevných odstínů. b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0-18 -
3 Softwarové vybavení Kromě řídicího programu Inteligentního programátoru je v této kapitole popsáno i grafické uživatelské prostředí. Program byl vytvářen ve vývojovém prostředí MPLAB a zdrojový text byl napsán programovacím jazykem XC32. 3.1 Řídicí program Jedná se o jádro systému, které se stará o obsluhu vnějších periférií. Patří sem zobrazovač, dotykový panel a ICSP vývody. V budoucnu může být programátor doplněn o další periférie. Komentovaný zdrojový kód všech programů je na přiloženém CD. Některé ukázky programu jsou vloženy přímo do textu této práce. 3.1.1 Programová obsluha zobrazovače Programová obsluha zobrazovače zahrnuje především následující úkony: Inicializace zobrazovače Práce s kurzorem Vymazání obrazovky Kreslení geometrických obrazců Zobrazení textů a obrázků Po zapnutí napájení je nejprve nutné provést inicializaci zobrazovače. To zajišťuje podprogram LCD_init. Na přiloženém CD je uveden v souboru nazvaném mi0283q9.c. Provede reset řadiče a jeho nakonfigurování pro práci v modulu MIKROE. Dalším důležitým úkolem programu je nastavení kurzoru na požadovanou pozici. Základem práce se zobrazovačem je vymezení pracovní oblasti ve tvaru obdélníku. Proto se vždy zadávají dvě pozice kurzoru, levý horní roh a dolní pravý roh. Pokud chceme pracovat s jedním barevným pixelem, nastavíme obě polohy kurzoru do stejného bodu. Následně provedeme potřebnou grafickou operaci pro vymezený obdélník. Většinou se jedná o zaslání informace o barvě jednotlivých pixelů. Data se posílají v bloku, jehož velikost odpovídá počtu pixelů uvnitř obdélníku. Pro každý pixel můžeme nastavit libovolnou barvu. Pro vymazání obrazovky byl vytvořen podprogram LCD_clear, jehož zdrojový text se nachází v souboru mi0283q9.c. Podprogram nejprve vymezí kurzory celou oblast - 19 -
zobrazovače a následně ji zaplní 86700 pixely stejné barvy. Zdrojový text je uveden v následujícím odstavci. void LCD_clear(unsigned int color) { unsigned long cnt; //nejprve nastavíme výběr celé oblasti LCD_write_cmd(0x2a); //cmd = COLUMN_ADDRESS_SET (vybere oblast v ose X) LCD_write_data(0x00); //dat = 0x00 ( => LCD_write_data(0x00); //dat = 0x00 ( => 0x0000 ~ SC(x0) = 0) LCD_write_data(0x00); //dat = 0x00 ( => LCD_write_data(0xef); //dat = 0xef ( => 0x00ef ~ EC(x1) = 239) LCD_write_cmd(0x2b); //cmd = (PAGE_ADDRESS_SET (vybere oblast v ose Y) LCD_write_data(0x00); //dat = 0x00 ( => LCD_write_data(0x00); //dat = 0x00 ( => 0x0000 ~ SP(y0) = 0) LCD_write_data(0x01); //dat = 0x00 ( => LCD_write_data(0x3f); //dat = 0x00 ( => 0x013f ~ EP(y1) = 319) LCD_write_cmd(0x2c); //aktivujeme povolení zápisu do LCD //cmd = MEMORY_WRITE } for(cnt = 0; cnt<76800; cnt++) { LCD_write_data16(hi(color), lo(color)); } //a celou paměť vyplníme stejnou barvou Pro práci s Inteligentním programátorem byly vytvořeny následující podprogramy, vytvářející různé obrazce: Podprogram LCD_setLine Podprogram LCD_setRectangle Podprogram LCD_setFillRectangle Podprogram LCD_setEllipse vykreslí libovolnou přímku danou dvěma body a barvou vykreslí orámování obdélníku zvolenou barvou vykreslí vyplněný obdélník zvolenou barvou vykreslí obrys elipsy, která je vymezená svojí šířkou a výškou K vykreslování obrázků, jejichž data jsou uložena v paměti programu, slouží podprogram LCD_setImage. V paměti jsou data uložena ve formě bitové tabulky. Pro vytvoření této tabulky vznikla aplikace ImageToMI0283QT9 v3.0. Je napsána v jazyce Visual C# a jejím cílem je převést běžný počítačový obrazový formát (JPG, BMP, GIF apod.) do bitové tabulky, která se uloží do paměti programu. Aplikace umí obrázek vygenerovat, jak v nekomprimované podobě, tak ve ztrátové komprimované podobě. Protože během procesu konverze docházelo k zamrzání okna v OS Windows, byl proces přemístěn do jiného vlákna. Díky tomu k zamrzání nedochází a je možné - 20 -
pozorovat pokrok konverze v ProgressBaru. Nechybí ani možnost změny velikosti obrázku, výběr mezi typy bitových tabulek a určení zda výsledná hexadecimální čísla budou vytvořena z číslic a velkých nebo malých písmen viz obrázek 3-1, kde v levé části je editační okno pro konverzi obrázku a v pravé části jsou vygenerovaná data. Následné zobrazení vygenerovaných dat se provádí stejně jako u geometrických obrazců. Obrázek 3-1 Aplikace ImageToMI0283QT9 v3.0 Pro zobrazování textů byla vytvořena sada znaků o velikosti 9x16 pixelů uložená v paměti programu ve formě tabulek. Pozadí nabývá hodnoty 0 a text hodnoty 1. Z těchto znaků se poskládá požadovaný text a následně při zobrazování se 0 nahradí barvou pozadí a 1 barvou textu. Vzhledem k tomu, že znaky jsou vytvořeny pouze ze dvou barev, zabírají v paměti mnohem méně místa a jejich vykreslování trvá kratší dobu. Původně vykreslování probíhalo po osmi bitech. To se ale následně ukázalo být velmi neefektivní. Například vykreslení celého rolovacího menu v hlavní obrazovce trvalo čtyři sekundy. Proto byl zvolen jiný algoritmus vykreslení znaku a celý postup se tak zrychlil a zefektivnil. Čas na vykreslení nakonec trvá jen půl sekundy. 3.1.2 Čtení z dotykového panelu Princip práce s dotykovým panelem, pro vyhodnocení místa dotyku, byl popsán v kapitole 2.1.2.1 Zobrazovač s dotykovým panelem. Následující podprogramy byly k tomuto účelu vytvořeny: - 21 -
Podprogram TS_readX Podprogram TS_readY Podprogram TS_read Podprogram TS_waitToTouch Podprogram TS_waitToUnTouch Podprogram map Zahájí čtení osy X, podprogram navrátí hodnotu z AD převodníku Zahájí čtení osy Y, podprogram navrátí hodnotu z AD převodníku Zjistí, jestli je panel stisknutý a pokud ano do registru readx a ready uloží souřadnice. Čeká, dokud není panel stisknut, a následně uloží souřadnice do registru readx a ready Čeká, dokud není panel uvolněn. V registrech readx a ready zůstává předchozí pozice Tento podprogram vypočítá souřadnici pixelu na zobrazovači na základě dodaných parametrů. K výpočtu používá trojčlenku, kde vstupními daty je požadovaná pozice a krajní meze. Všechny výše uvedené podprogramy jsou uloženy v souboru touchscreen.c. Podprogramy TS_readX a TS_readY navrátí pouze hodnoty z AD převodníku, ty ale neodpovídají souřadnicím zobrazovače. Proto podprogram TS_read využívá k přepočtu souřadnice pixelu na zobrazovači podprogram map, který je uveden níže. Výsledek pro osu X nabývá hodnoty 0-240 a pro osu Y 0-320. Podprogram pro čtení osy X: unsigned int TS_readX() { TP_XL_AnalogDigital = _DIGITAL; //nastavení vývodů TP_XR_AnalogDigital = _DIGITAL; // TP_YU_AnalogDigital = _ANALOG; // TP_YD_AnalogDigital = _ANALOG; // TP_XL_Direction = _OUTPUT; //vstupy/výstupy TP_XR_Direction = _OUTPUT; // TP_YU_Direction = _INPUT; // TP_YD_Direction = _INPUT; // TP_XL = 0; // napájení děliče napětí TP_XR = 1; // AD1CON1 = 0; AD1CHS = 0x000C0000; AD1CSSL = 0; AD1CON3 = 0x0002; AD1CON2 = 0; // ADC je vypnut, A/D převodník formát INTEGER // připravit ke čtení pin // manuální spuštění, TAD = interval 6 TBP - 22 -
AD1CON1SET = 0x8000; delay_us(100); AD1CON1SET = 0x0002; delay_ms(1); AD1CON1CLR = 0x0002; while(!ad1con1bits.done); // zapnout A/D // spuštění konverze // spuštění konverze // čekej, dokud čtení není dokončeno } return ADC1BUF0; Podprogram pro přepočet: unsigned long map(unsigned long x, unsigned long in_min, unsigned long in_max, unsigned long out_min, unsigned long out_max) { double calculate = 0; //registr ve kterém se provádí výpočet if(x>=in_min & x<=in_max) //přepočet provést jen tehdy, když vstup splňuje vstupní rozpětí } { //výpočet calculate = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } return calculate; //návrat vypočítané hodnoty V grafickém uživatelském rozhraní je často potřeba čekat na stisk nebo uvolnění tlačítka před následující akcí. Pro tento účel byly vytvořeny podprogramy TS_waitToTouch a TS_waitToUnTouch, které využívá podprogram TS_read. 3.1.3 ICSP protokol Mikropočítače od firmy Microchip umožňují programování pomocí rozhraní ICSP. Pro toto rozhraní jsou definovány následující signály: Pin 1 Programovací napětí Vpp +13V Pin 2 Napájecí napětí Vdd +5V Pin 3 Společný vodič GND Pin 4 Datový vodič PGD log. 0/1 Pin 5 Hodinový vodič PGC log. 0/1 Pin 6 Není využit Komunikace prostřednictvím ICSP protokolu probíhá zasíláním příkazů a následným zasláním dat. Způsob komunikace je popsán v [4], a je zde uvedena i následující tabulka a časové průběhy komunikace. Uvedené časové průběhy je nutné přesně dodržet. - 23 -
Tabulka 3-1 Příkazy ICSP Obrázek 3-2 Časování Následující podprogramy zajišťují komunikaci mezi programátorem a programovaným mikropočítačem: Podprogram ICSP_init provede počáteční nastavení programátoru pro komunikaci prostřednictvím ICSP Podprogram ICSP_writeBit vyšle jeden bit po datové sběrnici do mikropočítače Podprogram ICSP_readBit přečte jeden datový bit z programovaného mikropočítače Podprogram ICSP_start_PIC16F628 nahraje do mikropočítače PIC16F628 program vytvořený uživatelem včetně konfiguračního slova - 24 -
Zavedení vytvořeného a přeloženého programu do mikropočítače má následující průběh: Před první komunikací prostřednictvím ICSP je nejprve nutné provést počáteční nastavení programátoru podprogramem ICSP_init. Následuje série příkazů, která vymaže veškerý předcházející obsah programovaného mikropočítače. Do vymazaného mikropočítače se nahrají konfigurační slova. Posledním úkonem je zavedení přeloženého programu do paměti mikropočítače. Všechny tyto úkony se provádějí v podprogramu ICSP_start_PIC16F628, jehož zdrojový text vypadá následovně: void ICSP_start_PIC16F628(unsigned int *prog, unsigned int progsize, unsigned int config) { unsigned int i; ICSP_init(); ICSP_VPP = 1; //připojit programovací napětí (Vpp=13V) ICSP_VCC = 1; //připojit napájení procesoru (Vcc=5V) delay_ms(1); //vymazat veškerou paměť ICSP_loadDataForProgramMemory(0x3fff); ICSP_beginErase(); ICSP_bulkEraseProgramMemory(); //naprogramovat konfigurační slovo ICSP_loadConfiguration(0x3fff); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_incrementAddress(); ICSP_loadDataForProgramMemory(config); ICSP_beginErase(); ICSP_incrementAddress(); //reset MCU ICSP_VCC = 0; //opojit napájecí napětí delay_ms(50); ICSP_VCC = 1; //připojit napájení procesoru (Vcc=5V) delay_ms(1); } //naprogramování paměti flash for(i = 0; i < progsize; i++) { ICSP_loadDataForProgramMemory(prog[i]); ICSP_beginErase(); ICSP_incrementAddress(); } ICSP_VPP = 0; //odpojit programovací napětí ICSP_VCC = 0; //opojit napájecí napětí - 25 -
3.2 Grafické uživatelské rozhraní Uživatelské prostředí zahrnuje vykreslování jednotlivých obrazovek a dílčích objektů, ze kterých se skládají. V uživatelském prostředí programátoru jsou zahrnuty následující obrazovky: 1. Hlavní nabídkové menu 2. Výběr instrukce 3. Stanovení adresy nebo vstup dat 4. Zvolení bitu 5. Volba uložení výsledku 6. Upřesnění činnosti 7. Informační okno 3.2.1 Hlavní nabídkové menu Obrazovka hlavního menu slouží pro editaci programu v jazyku symbolických adres. Skládá se z několika částí. V levém sloupečku se nachází adresy uložení instrukce v paměti programu. Jsou uspořádány vzestupně shora dolů. Prostřední sloupeček se zeleným podkladem je určen pro zápis instrukcí a jejich parametrů. V pravém sloupci jsou tlačítka. Ve střední části sloupce pod sebou následují tlačítko pro posun nahoru, tlačítko pro posun dolů a editační tlačítko. Ve spodní části pravého sloupce je tlačítko Nahrát pro nahrání programu do mikropočítače. V pravém dolním rohu se zobrazuje operační kód instrukce v hexadecimální podobě. Levý a prostřední sloupec umožňují současné rolování nahoru nebo dolů. Právě editovaná instrukce je zvýrazněna modrým podkladem, viz obrázek 3-3. Stiskem tlačítka Editovat přejdeme na obrazovku Výběr instrukce, stiskem tlačítka Nahrát na obrazovku Upřesnění činnosti. - 26 -
Obrázek 3-3 Hlavní nabídkové menu 3.2.2 Obrazovka pro výběr instrukce V horní části obrazovky je 35 tlačítek s názvy jednotlivých instrukcí. Instrukce jsou rozděleny podle druhu do tří skupin. V každé skupině jsou seřazeny podle abecedy. Tlačítka pro bajtově orientované instrukce jsou na světle červeném pozadí, bitově orientované instrukce na světle zeleném pozadí, řídicí instrukce a instrukce pro práci s konstantou mají světle modré pozadí. Výběr požadované instrukce se provede stisknutím příslušného tlačítka a její název se pro kontrolu zobrazí ve střední části obrazovky za nápisem Vybráno:. Ve spodní části jsou umístěna tlačítka Storno a Pokračovat. Tlačítko Storno slouží ke zrušení výběru a následuje návrat zpět do hlavního menu. Stiskem tlačítka Pokračovat se volba potvrdí a podle typu instrukce následuje návrat do hlavního menu nebo se vyvolá další obrazovka k vložení parametrů. - 27 -
Obrázek 3-4 Obrazovka pro výběr instrukce 3.2.3 Obrazovka pro zadání adresy nebo dat Pomocí této obrazovky se vkládají do programu hodnoty adres nebo data. V obou případech musí jít o osmibitovou hodnotu, to znamená, že číslo musí nabývat hodnotu z intervalu 00h až FFh. V horní části obrazovky se zobrazuje klávesnice se 16 tlačítky pro vkládání hexadecimálních číslic. Nad nimi se zobrazuje navolená hodnota za nápisem Zadáno:. Právě editovaná číslice je podtržena černým kurzorem ve tvaru obdélníčku. Stiskem některého tlačítka se zobrazí zvolená hodnota a kurzor se přesune na další pozici. Po druhé číslici se vrací opět na začátek. Navolené hodnoty lze libovolně opakovaně přepisovat. Stiskem tlačítka Pokračovat v pravém dolním rohu se zvolená hodnota vyhodnotí a uloží do programu. - 28 -
Obrázek 3-5 Obrazovka pro zadání adresy nebo dat 3.2.4 Obrazovka zvolení bitu U bitově orientovaných instrukcí, je jako druhý parametr potřebné zadat číslo bitu, se kterým má instrukce pracovat. Číslo bitu musí být z intervalu 0 až 7. Stiskem tlačítka s vybranou číslicí se obrazovka uzavře a následuje návrat do hlavního menu. Obrázek 3-6 Obrazovka zvolení bitu - 29 -
3.2.5 Volba uložení výsledku U některých instrukcí se výsledek operace ukládá, proto po zadání zdrojového registru (první parametr instrukce), je nutné zadat cílový registr (druhý parametr instrukce). Cílovým registrem může být střadač, nebo se výsledek uloží zpět do zdrojového registru. Volbu provedeme stisknutím příslušného tlačítka ve střední části obrazovky. Obrázek 3-7 Volba uložení výsledku 3.2.6 Upřesnění činnosti V některých případech je potřeba upřesnit další činnost, příklad takové obrazovky je na obrázku 3-8 Obrázek 3-8 Obrazovka upřesnění činnosti. Nad tlačítky Ano a Ne ve střední části je upřesňující dotaz. Obrázek 3-8 Obrazovka upřesnění činnosti - 30 -
3.2.7 Informační okno Během zavádění programu do mikropočítače se zobrazuje obrazovka pro upřesnění činnosti. Po provedení volby se uprostřed obrazovky zobrazí informační okno, které informuje obsluhu o průběhu programování. Obrázek 3-9 Informační okno 3.2.8 Návrh tlačítek a oken Jako nástroj pro tvorbu tlačítek byl použit grafický editor Da Button Factory, který běží online na webové stránce http://www.dabuttonfactory.com. Poskytuje jednoduché a přehledné nástroje pro tvorbu tlačítek. K dispozici je několik předdefinovaných typů tlačítek, z nichž si vybereme nejvhodnější. Umožňuje nastavit např. font písma, barvu tlačítka i textu, velikost textu atd. - 31 -
Obrázek 3-10 Grafický editor Da Button Factory Grafická podoba obrazovek byla navržena v programu MS Paint, který je součástí každého operačního systému Windows. V programu byla zobrazena pomocná mřížka pro snazší vytváření obrazovek. Souřadnice umístění jednotlivých objektů na obrazovce lze odečíst pomocí kurzoru grafického editoru viz obrázek 3-11, kde kurzor umístění v levém horním rohu tlačítka má souřadnice [168, 2]. Pro snazší umísťování textů na obrazovce byla vytvořena pomocná podkladová plocha o velikosti jednoho znaku (9x16px) viz obrázek 3-12. Obrázek 3-11 Odečítání souřadnice - 32 -
Obrázek 3-12 Editované okno v programu MS Paint 3.2.9 Programová obsluha grafického uživatelského rozhraní Pro práci s grafickým uživatelským rozhraním byly vytvořeny následující podprogramy: GUI_showForm_FORM_SELECTBIT zobrazí Obrazovku zvolení bitu GUI_showForm_FORM_WREG zobrazí okno Volba uložení výsledku GUI_showForm_FORM_SELECTINSTRUCTION zobrazí Okno výběru instrukce GUI_showForm_FORM_YESNO zobrazí okno Upřesnění činnosti GUI_showForm_FORM_HEXAINPUT zobrazí okno pro zadání adresy/dat GUI_scanButtons GUI_drawObject GUI_drawObject2 navrátí, který objekt byl stisknut vykreslí objekt vykreslí opak objektu (např. stisknuté tlačítko *) - 33 -
GUI_HEXToText podprogram pro převod čísla do textu v hexadecimální soustavě Tyto podprogramy zajišťují vykreslování a správu všech objektů. Aby systém dokázal pracovat s těmito formulářovými objekty, každý objekt, tlačítko, rolovací menu nebo celé okno je opatřeno číselným identifikátorem o velikosti 8 bitů. Pomocí tohoto čísla systém vyhodnotí, který objekt se má vykreslit a jaké akce se mají vykonat při aktivaci tohoto objektu nebo jenom vrátí informaci o stavu. Pro identifikaci stisknutého tlačítka slouží podprogram GUI_scanButtons. Ten na základě informace, uložené v identifikátoru form_, zjistí, zda došlo ke stisku uvnitř zadaného objektu a popř. které tlačítko bylo stisknuto. Každý z objektů se nachází na určitých souřadnicích a zabírá určitou plochu, vždy ve formě obdélníku. Tento obdélník (prostor, obálka) je opatřen souřadnicemi osy X a Y. Systém pak porovnává, jestli se pozice stisku nachází uvnitř tohoto prostoru nebo je mimo něj. Systém následně vrátí informaci stisknutí. Jeden z takových podprogramů se nachází v souboru gui.c. Část podprogramu je uvedena níže. object GUI_scanButtons(form form_) { unsigned int index = 0; unsigned int x = 0; unsigned int y = 0; switch(form_) //zjištění, jaké tlačítko se má vyhledat v rámci oken { //je to z důvodu překrývání case FORM_MAIN: //hlavní okno scanarea(168, 31, 70, 31, BUTTON_UP); scanarea(168, 74, 70, 31, BUTTON_DOWN); //scanarea(168, 160, 70, 31, BUTTON_LOAD); //scanarea(168, 203, 70, 31, BUTTON_SAVE); scanarea(168, 246, 70, 31, BUTTON_UPLOAD); scanarea(168, 117, 70, 31, BUTTON_EDIT); break; case FORM_WREG: scanarea(22, 145, 70, 31, BUTTON_REGISTER); scanarea(149, 145, 70, 31, BUTTON_LATCH); break;... //okno WREG - 34 -
*) Stisk tlačítka se graficky většinou projeví prohození barev v barevném přechodu nebo změnou barvy tlačítka. Obrázek 3-13 Uvolněná a stisknutá tlačítka 4 Assembler Assembler = jazyk symbolických adres, je nízkoúrovňový strojově orientovaný programovací jazyk. Mikropočítač umí pracovat pouze s binárními čísly. Pro člověka je takováto komunikace obtížná a vytvořený program je málo přehledný. V assembleru jsou proto jednotlivým instrukcím přiřazeny snáze zapamatovatelné symboly, které jsou často vytvořeny z počátečních písmen slov, popisujících činnost instrukce. Instrukcí je zde myšlen příkaz pro mikropočítač, aby vykonal určitou činnost. Z assembleru získáme binární čísla pomocí překladače. Příkazy assembleru víceméně odpovídají přímo instrukcím, proto je překlad programu velmi rychlý. 4.1 Instrukční sada PIC16F628 Tento mikropočítač patří do skupiny mikropočítačů s redukovanou instrukční sadou (RISC). Ta obsahuje celkem 35 instrukcí. Složitější operace, jako je například násobení nebo dělení, se musí řešit softwarovým způsobem - použitím více jednoduchých instrukcí. Veškeré instrukce jsou uloženy v paměti programu. Délka instrukčního slova je 14 bitů. Omezený počet instrukcí například neumožňuje přímý přesun obsahu z jednoho registru do druhého. Takový přesun se provádí nepřímo přes střadač. Bližší informace týkající se programování a instrukcí lze nalézt v literatuře, např. v [6] a [7]. V následujících kapitolách jsou stručně popsány instrukce, rozdělené do tří skupin podle vykonávané činnosti. - 35 -
4.1.1 Bajtově orientované U těchto instrukcí je zapotřebí předem určit jestli daný výsledek operace má být uložen do střadače nebo registru. ADDWF f, d Sečte střadače s registrem ANDWF f, d Logický součin střadače s registrem CLRF f Vynulování registru CLRW Vynulování střadače COMF f, d Jedničkový doplněk registru DECF f, d Dekrementace registru DECFSZ f, d Dekrementace registru. Pokud je výsledek roven nule, následující instrukce se nevykoná INCF f, d Inkrementace registru INCFSZ f, d Inkrementace registru. Pokud je výsledek roven nule, následující instrukce se nevykoná IORWF f, d Logický součet registru a střadače MOVF f, d Přesunutí obsahu registru MOVWF f Přesunutí obsahu střadače do registru NOP Žádná operace RLF f, d Rotace registru vlevo RRF f, d Rotace registru vpravo SUBWF f, d Odečtení obsahu střadače od registru SWAPF f, d Prohození horní a dolní čtveřice bitů XORWF f, d Provede nonekvivalenci registru Tabulka 4-1 Bajtově orientované instrukce 4.1.2 Bitově orientované Pomocí těchto instrukcí lze pracovat s jedním libovolným bitem v paměti dat. BCF f, b Vynulování bitu BSF f, b Nastavení bitu BTFSC f, b Pokud má bit logickou hodnotu 0, následující instrukce se nevykoná BTFSS f, b Pokud má bit logickou hodnotu 1, následující instrukce se nevykoná Tabulka 4-2 Bitově orientované instrukce - 36 -
4.1.3 Instrukce pro práci s konstantou a řídicí instrukce Tyto instrukce provádějí operace mezi střadačem a konstantou, výsledky jsou vždy uloženy do střadače. ADDLW k Sečti obsah střadače s konstantou ANDLW k Proveď logický součin střadače s konstantou CALL k Volání podprogramu adresu určuje konstanta CLRWDT Smazání časovače WATCHDOG GOTO k Skok na adresu, která je určena konstantou IORLW k Logický součet střadače s konstantou MOVLW k Přesun konstanty do střadače RETFIE Návrat z přerušení + povolí přerušení RETLW k Návrat z podprogramu + uložit do střadače konstantu RETURN Návrat z podprogramu SLEEP Mikropočítač přejde do úsporného režimu SUBLW k Odečte střadač od konstanty XORLW k Nonekvivalence střadače s konstantou Tabulka 4-3 Instrukce pro práci s konstantou 5 Ukázka práce s programátorem Práci s programátorem si ukážeme na jednoduchém programu pro jednočipový mikropočítač PIC16F628. Úkolem tohoto programu je nasimulovat činnost klopného obvodu RS včetně ošetření jeho zakázaného stavu. Pro odzkoušení správné funkčnosti programu, je potřeba sestavit obvod podle schéma viz obrázek 5-2. Tento obvod si lze sestavit například na experimentálním nepájivém poli viz obrázek 5-1. Obrázek 5-1 Obvod na nepájivém poli - 37 -
5.1 Popis klopného obvodu RS Klopný obvod RS má dva vstupy, S a R, a dva výstupy, a. Následující tabulka popisuje stavy klopného obvodu: Tabulka 5-1 Tabulka popisující jednotlivé stavy Princip činnosti klopného obvodu RS: pokud je na vstupech R a S současně log. 0, klopný obvod zůstává v předchozím stavu - jedná se o paměťový stav je-li na vstupu S log. 1 a současně na nulovacím vstupu R log. 0, klopný obvod nastaví výstup do logické 1 a výstup do logické 0 pokud je na vstupu R log. 1 a současně na nastavovacím vstupu S log. 0, klopný obvod resetuje výstup do log. 0 a výstup nastaví do log. 1 současné přivedení log. 1 na vstupy R a S je tzv. zakázaný stav. Ten je signalizován současným nastavením výstupů a do log. 1 Uvolněnému tlačítku odpovídá log. 0 na příslušném vstupu, stisknutému log. 1. Rozsvícená LED dioda na výstupu indikuje log. 1, zhasnutá LED dioda log. 0. 5.2 Schéma zapojení Obrázek 5-2 Schéma zapojení - 38 -
5.3 Vývojový diagram programu Následující vývojový diagram simuluje činnost klopného obvodu RS a je určen pro mikropočítač PIC16F628. START INIT Počáteční nastavení mikropočítače Test tlačítek S=1 NE R=1 NE ANO ANO R=1 ANO NE Q=1 Q=1 Q=0 Aktualizace výstupů _ Q=0 _ Q=1 _ Q=1 Obrázek 5-3 Vývojový diagram hlavního programu - 39 -
INIT Odpojit komparátor CMCON = b'00000111' Nastavení počátečních hodnot na portech PORTA = b'00000010' PORTB = 0 Konfigurace vstupních a výstupních linek TRISA = 0 TRISB = b'00000011' Odpojit pull-up rezistory na portu B OPTION_REG = b'10000000' návrat Obrázek 5-4 Vývojový diagram podprogramu INIT 5.4 Vytvoření programu Postup vytváření nového programu je následující: 1. Připojíme Inteligentní programátor k napájecímu zdroji s napětím 14-20V, který je schopen dodat proud alespoň 300 ma. 2. Po úvodní obrazovce zůstává na zobrazovači hlavní nabídkové menu a programátor je připraven k vytvoření programu. - 40 -
Obrázek 5-5 Obrazovka hlavního menu 3. Prvním příkazem programu bude volání podprogramu INIT instrukcí CALL. Vložení instrukce se provede stisknutím tlačítka Editovat. Ze zobrazeného seznamu vybereme instrukci CALL. Obrázek 5-6 Obrazovka výběru instrukce 4. Stiskem tlačítka Pokračovat přejdeme na výběr adresy počátku volaného podprogramu INIT. Navolená adresa je pro kontrolu zobrazena v horní části obrazovky. V našem případě jsme vybrali adresu 20h a opět stiskneme tlačítko Pokračovat. Tím se vrátíme do hlavního nabídkového menu. Instrukce se do paměti programu vkládají počínaje adresou 00h viz obrázek 5-8. Po návratu se kurzor automaticky nastavil na následující adresu. Stiskem tlačítka Nahoru se můžeme vrátit zpět na právě vloženou instrukci a v pravém dolním rohu si - 41 -
zkontrolovat hexadecimální kód instrukce CALL, který bude uložen do paměti programu mikropočítače, nebo pokračujeme v programování. Obrázek 5-7 Obrazovka zadání adresy/dat Obrázek 5-8 Obrazovka hlavního menu s vloženou instrukcí 5. Následuje instrukce BTFSC, testující stav tlačítka Set. Opět stiskneme tlačítko Editovat a vybereme příslušnou instrukci. Zadáme adresu testovaného registru. V našem případě je to registr PORTB, který je na adrese 06h. Tlačítkem Pokračovat přejdeme na výběr bitu testovaného registru. Tlačítko Set je připojeno na bit 0 portu B, proto zvolíme číslici 0. Tím se automaticky vracíme do hlavního nabídkového menu s kurzorem na adrese 02h. - 42 -
Obrázek 5-9 Obrazovka výběru instrukce Obrázek 5-10 Obrazovka zadání adresy/dat - 43 -
Obrázek 5-11 Obrazovka zvolení bitu Obrázek 5-12 Obrazovka hlavního menu s další vloženou instrukcí 6. Obdobným způsobem vkládáme postupně další instrukce. Potřebujeme-li u některé instrukce zadat adresu pro předání řízení, kterou zatím neznáme, vložíme prozatím instrukci s adresou 00h. V okamžiku, kdy budeme znát tuto adresu, vrátíme se zpět na tuto instrukci a tlačítkem editovat adresu dodatečně upravíme. 7. Podprogram INIT začíná na adrese 20h. Tzn., že mezi poslední instrukcí hlavního programu (adresa 11h) a počátkem INITu zůstává část programové paměti nevyužita. - 44 -
Obrázek 5-13 Obrazovka hlavního menu s podprogramem 8. Podprogram INIT končí instrukcí RETURN. Tím máme program vytvořen. Pro kontrolu si můžeme prohlédnout jednotlivé řádky a případné chyby editovat. Je-li vše v pořádku, následuje zavedení programu do paměti mikropočítače. 9. Do patice s nulovou vkládací silou vložíme mikropočítač PIC16F628. V průběhu vytváření programu ho kompilátor průběžně překládal a výsledný kód zavedeme do mikropočítače stisknutím tlačítka Nahrát. Aby se zabránilo nechtěnému přepsání, je nutné volbu ještě potvrdit stiskem tlačítka Ano, nebo stiskem tlačítka Ne nahrávání zrušit. Během zavádění programu do mikropočítače se provede nejprve vymazání paměti programu a teprve následně se na příslušné adresy uloží strojový kód. Zavádění programu je indikováno nápisem Probíhá nahrávání... na zobrazovači. Po ukončení programování se text nápisu změní na Nahrávání dokončeno!. Na desce Inteligentního programátoru jsou jednotlivé stavy programování indikovány několika LED diodami vpravo dole vedle patice. - 45 -
Obrázek 5-14 Obrazovka upřesnění činnosti Obrázek 5-15 Informační okno 10. Naprogramovaný mikropočítač vyjmeme z patice a vložíme na aplikační desku, kde si ověříme správnou činnost vytvořeného programu. Tabulka 5-2 přehledně znázorňuje námi vytvořený program. Údaje vložené do paměti mikropočítače jsou zde navíc doplněny ještě symbolickými adresami pro zvýšení přehlednosti. - 46 -
Adresa Návěstí Kód Přiřazení adres 0x00 START CALL INIT CALL 0x20 0x01 STARTHP BTFSC S BTFSC 0x06, 0 0x02 GOTO SKOK GOTO 0x06 0x03 BTFSC R BTFSC 0x06, 1 0x04 GOTO Q01 GOTO 0x0C 0x05 GOTO STARTHP GOTO 0x01 0x06 SKOK BTFSC R BTFSC 0x06, 1 0x07 GOTO Q11 GOTO 0x0F 0x08 GOTO Q10 GOTO 0x09 0x09 Q10 BSF Q BSF 0x05, 0 0x0A BCF QNON BCF 0x05, 1 0x0B GOTO STARTHP GOTO 0x01 0x0C Q01 BCF Q BCF 0x05, 0 0x0D BSF QNON BSF 0x05, 1 0x0E GOTO STARTHP GOTO 0x01 0x0F Q11 BSF Q BSF 0x05, 0 0x10 BSF QNON BSF 0x05, 1 0x11 GOTO STARTHP GOTO 0x01... 0x20 MOVLW 0x07 MOVLW 0x07 0x21 MOVWF CMCON MOVWF 0x1F 0x22 INIT MOVLW 0x01 MOVLW 0x02 0x23 MOVWF PORTA MOVWF 0x05 0x24 CLRF PORTB CLRF 0x06 0x25 BSF STATUS, RP0 BSF 0x03, 5 0x26 CLRF TRISA CLRF 0x05 0x27 MOVLW 0x03 MOVLW 0x03 0x28 MOVWF TRISB MOVWF 0x06 0x29 MOVLW 0x80 MOVLW 0x80 0x2A MOVWF OPTION_REG MOVWF 0x01 0x2B BCF STATUS, RP0 BCF 0x03, 5 0x2C RETURN RETURN Tabulka 5-2 Vytvořený program - 47 -
Závěr Výstupem této práce SOČ je Inteligentní programátor jednočipových mikropočítačů od firmy Microchip. Programátor tvoří kompaktní celek o rozměrech 100x160 mm. Vyznačuje se přívětivým grafickým uživatelským rozhraním a obsluze umožňuje vytvářet jednoduché programy pro jednočipový mikropočítač, tyto programy přeložit a zavést do mikropočítače. Vznikla tak hodnotná výuková pomůcka, která bude využívána k výuce žáků na VOŠ, SŠ, COP, Sezimovo Ústí. Tato práce může také posloužit jako návod ke stavbě programátoru pro další zájemce, kteří by se chtěli naučit programovat jednočipové mikropočítače. Zároveň se z ní dozvědí, jak pracuje modul MIKROE-597 a jak ho lze využít pro praktickou aplikaci. Dalším přínosem této práce jsou cenné zkušenosti, které jsem při jejím řešení získal. Zdokonalil jsem se jak v programování, tak v návrhu elektronických obvodů, jejich výrobě a zprovoznění. Cenné jsou pro mě především zkušenosti získané při práci s modulem MIKROE-597. Do budoucna by bylo vhodné rozšířit tento programátor o další typy mikropočítačů a umožnit ukládání vytvořených programů do externí paměti flash nebo na micro SD kartu. - 48 -
Soupis použité literatury [1] BLÁBOLIL. Technické vybavení osobních počítačů. Soukromé stránky Ing. Romana Blábolila. [online]. [cit. 2015-04-15]. Dostupné z: http://www.blabik.cz/vyuka/ict/07_vystupni%20zarizeni_monitory.pdf [2] HRUŠKA. Vše co potřebujete vědět o LCD. Jablíčkář.cz. [online]. [cit. 2015-03- 11]. Dostupné z: http://jablickar.cz/vse-co-potrebujete-vedet-o-lcd/ [3] MICROCHIP. PIC32MX460F512L 32-bit PIC Microcontrollers. Microchip Technology Inc. [online]. [cit. 2015-02-15]. Dostupné z: http://www.microchip.com/wwwproducts/devices.aspx?product=pic32mx460f512 l [4] MICROCHIP. In-Circuit Serial Programming [online]. [cit. 2016-04-12]. Dostupné z: https://www.elnec.com/sw/30277d.pdf [5] KRÁSL, Martin. Návod k práci s inteligentním displejem MIKROE-597 [cit. 2016-12-4] [6] BUMBA, Jiří. Programování mikroprocesorů: praktický návod nejen pro mikroprocesory PIC. Vyd. 1. Brno: Computer Press, 2011. Učebnice (Computer Press). ISBN 978-80-251-2838-1. [7] MICROCHIP. PIC16F628 Microchip Technology Inc. [online]. [cit. 2015-02-15]. Dostupné z: http://ww1.microchip.com/downloads/en/devicedoc/40300c.pdf - 49 -
Seznam obrázků Obrázek 1-1 Inteligentní programátor... - 9 - Obrázek 2-1 Blokové schéma programátoru... - 10 - Obrázek 2-2 Jeden z obvodů... - 12 - Obrázek 2-3 Modul MIKROE-597... - 13 - Obrázek 2-4 Vývody zobrazovače... - 13 - Obrázek 2-5 Dotykový panel... - 15 - Obrázek 2-6 Náhradní schéma propojených ploch... - 15 - Obrázek 3-1 Aplikace ImageToMI0283QT9 v3.0... - 21 - Obrázek 3-2 Časování... - 24 - Obrázek 3-3 Hlavní nabídkové menu... - 27 - Obrázek 3-4 Obrazovka pro výběr instrukce... - 28 - Obrázek 3-5 Obrazovka pro zadání adresy nebo dat... - 29 - Obrázek 3-6 Obrazovka zvolení bitu... - 29 - Obrázek 3-7 Volba uložení výsledku... - 30 - Obrázek 3-8 Obrazovka upřesnění činnosti... - 30 - Obrázek 3-9 Informační okno... - 31 - Obrázek 3-10 Grafický editor Da Button Factory... - 32 - Obrázek 3-11 Odečítání souřadnice... - 32 - Obrázek 3-12 Editované okno v programu MS Paint... - 33 - Obrázek 3-13 Uvolněná a stisknutá tlačítka... - 35 - Obrázek 5-1 Obvod na nepájivém poli... - 37 - Obrázek 5-2 Schéma zapojení... - 38 - Obrázek 5-3 Vývojový diagram hlavního programu... - 39 - Obrázek 5-4 Vývojový diagram podprogramu INIT... - 40 - Obrázek 5-5 Obrazovka hlavního menu... - 41 - Obrázek 5-6 Obrazovka výběru instrukce... - 41 - Obrázek 5-7 Obrazovka zadání adresy/dat... - 42 - Obrázek 5-8 Obrazovka hlavního menu s vloženou instrukcí... - 42 - Obrázek 5-9 Obrazovka výběru instrukce... - 43 - Obrázek 5-10 Obrazovka zadání adresy/dat... - 43 - Obrázek 5-11 Obrazovka zvolení bitu... - 44 - Obrázek 5-12 Obrazovka hlavního menu s další vloženou instrukcí... - 44 - - 50 -
Obrázek 5-13 Obrazovka hlavního menu s podprogramem... - 45 - Obrázek 5-14 Obrazovka upřesnění činnosti... - 46 - Obrázek 5-15 Informační okno... - 46 - Seznam tabulek Tabulka 2-1 Názvy signálů... - 14 - Tabulka 2-2 Odečtení souřadnice X... - 16 - Tabulka 2-3 Odečtení souřadnice Y... - 16 - Tabulka 2-4 Komunikace se zobrazovačem... - 18 - Tabulka 3-1 Příkazy ICSP... - 24 - Tabulka 4-1 Bajtově orientované instrukce... - 36 - Tabulka 4-2 Bitově orientované instrukce... - 36 - Tabulka 4-3 Instrukce pro práci s konstantou... - 37 - Tabulka 5-1 Tabulka popisující jednotlivé stavy... - 38 - Tabulka 5-2 Vytvořený program... - 47 - Seznam příloh Příloha A: Inteligentní programátor - schéma zapojení Příloha B: Inteligentní programátor - předloha plošného spoje Příloha C: Inteligentní programátor - rozmístění součástek Seznam příloh na CD Příloha A, B a C ve formátu.pdf Zdrojové kódy systému programátoru Přeložený soubor ve formátu.hex - 51 -