BDOM Cvičení 1 1. Prostředí MPLAB Pro práci s obvody MICROCHIP PIC budeme používat vývojové prostředí MPLAB a programátor MPLAB ICD 2. Tento programátor je připojen k vývojové desce PICkit 2. Po spuštění prostředí MPLAB se otevře hlavní okno programu (Obr. 1) kde se nahoře nachází ovládací menu a na ploše okna s výpisem (Output) a součásti projektu (Workspace). Obr. 1 - Hlavní okno prostředí MPLAB Průvodce založením nového projektu spustíme kliknutím na položku hlavního menu Project -> Project Wizard... Pak vybereme následující nastavení: 1. Typ obvodu (Device) PIC16F690 2. Programovací jazyk (Active Toolsuite) Microchip MPASM Toolsuite 3. Hlavní soubor projektu (Create New Project File) a vytvoříme adresář projektu 4. Na další záložce nepřidáváme zdrojové soubory, protože žádné ještě nemáme 5. A na poslední záložce zkontrolujeme nastavení projektu Vznikne prázdný projekt do kterého je nutné přidat soubor se zdrojovým kódem: 1. Vytvoříme nový prázdný soubor File -> New 2. Uložíme ho s příponou.asm File -> Save As... 3. A přidáme ho do projektu Project -> Add Files to Project Posledním krokem je výběr programátoru: Programmer -> Select Programmer -> MPLAB ICD 2
Pod hlavní nabídkou se objevil panel pro ovládání programátoru a v okně s výpisem informace o komunikaci programátoru s vývojovým prostředím. Okno Workspace osahuje název projektu a je v něm zobrazen i název zdrojového souboru (Obr. 2). Obr. 2 - Hlavní okno prostředí MPLAB s projektem a zdrojovým souborem Teď je možné v prostředí MPLAB psát program v Assembleru, kompilovat projekt a programovat cílový obvod. Projekt zkompilujeme kliknutím na ikonu Build All v horním panelu. V panelu pro ovládání jsou následující ikony: 1. Program target device Nahraje zkompilovaný program do obvodu 2. Read targer device Načte program z obvodu 3. Reads device EEPROM Načte obsah EEPROM z obvodu 4. Verify target device memory Zkontroluje zda je obvod správně naprogramován 5. Erase target device Vymaže obvod 6. Verify target device is erased Zkontroluje zda je obvod vymazán 7. Release from Reset Uvolní obvod ze stavu Reset 8. Hold in Reset Nastaví obvod do stavu Reset 9. Reset and Connect to ICD Připojí programátor a udělá jeho test
2. Assembler obvodu PIC16F690 Možnosti zápisu kódu V editoru v prostředí MPLAB je syntax barevně zvýrazněn. Kód je kvůli přehlednosti zapisován do sloupců. Sloupce jsou odděleny tabulátory V případě nedodržení tohoto zápisu oznámí překladač varování. V prvním sloupci jsou připojené soubory a návěstí. Do druhého sloupce se zapisují direktivy a instrukce. Komentáře je možné umisťovat libovolně, vždy začíná středníkem. Vše co následuje na daném řádku za středníkem je při překladu ignorováno. Příklad: #include <p16f690.inc> ; pripojeny soubor, prvni sloupec ; komentar, je jedno ve kterem sloupci ; dalsi komentar ; jeste jeden kometar ctyri equ 4 ; navest a direktiva, prvni sloupec navest ; navest, prvni sloupec goto navest ; instrukce skoku, druhy sloupec end ; direktiva ukoncujici preklad, ; druhy sloupec Číselné konstanty můžeme zapisovat v následujících formátech: 1. Binárně B'00001111' 2. Osmičková soustava O'0127' 3. Decimálně D'12'.12 4. Hexadecimálně 0x0f H'0f' 5. ASCII znaky 'n' A'n' Příklad: movlw 0x01 movlw b'00000010' movlw.32 movlw h'32' movlw 'a' V kódu je možné používat různé operátory. Nezapomeňte ale, že funkce operátorů jsou v jazyce Assembler platné pouze při překladu. Například součet dvou hodnot v paměti neuděláte operátorem + ale instrukcí ADDWF. Některé užitečné jsou popsány zde: 1. $ aktuální adresa v paměti programu 2. ( a ) závorky pro aritmetiku 3.! a ~ bitový doplněk, doplněk 4. + a - a * a / součet, rozdíl, násobení, dělení 5. % dělení modulo
Hlavičkový soubor První věc kterou je nutné při psaní programu udělat je připojit k zdrojovému programu hlavičkový soubor obvodu, pro který píšeme program. Je vhodné si hlavičkový soubor prostudovat, jsou v něm mnemotechnicky definovány konstanty. Ty je pak možné používat místo adres a nastavení. Pak můžeme psát třeba místo 0x005 jen PORTA, protože PORTA má v paměti dat adresu 0x005. Soubor s hlavičkou připojíme následovně: #include <p16f690.inc> Konfigurační slovo Konfigurační slovo je důležitou součástí obvodu. Nastavuje chování některých periferií, chování pinů, oscilátor atd. Tyto nastavení není možně měnit softvérově, jsou uložena při programování. Konfigurační slovo je možné nastavit dvěma způsoby. První možnost je pomocí nabídky Configure -> Configuration bits. Tohle nastavení nedoporučujeme. Další možnost je přímo v kódu pomocí direktivy CONFIG. To je možné po připojení hlavičkového souboru, ve kterém jsou možnosti nastavení uložené. Podrobný popis konfiguračního slova je možné najít v katalogovém listu každého obvodu. Doporučené nastavení konfiguračního slova: CONFIG _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT Řídící direktivy Jsou to direktivy ovlivňující překlad programu. V tomhle cvičení budeme používat direktivu EQU. Tahle direktiva umožňuje nahradit číselnou hodnotu mnemotechnickým výrazem. Ten pak při překladu reprezentuje danou konstantu. Většina kódu v hlavičkovém souboru jsou právě tyto direktivy. Příklad: ctyri EQU 4 osum EQU ctyri + ctyri PORTA EQU 0x005 Instrukce Většina instrukcí je u procesorů PIC vykonávána v jediném instrukčním cyklu, kromě instrukcí rozhodujících o podmínce a instrukcí skokových. Podmínkové instrukce jsou v případě splnění podmínky vykonány v jednom instrukčním cyklu a pak je vykonána instrukce následující (obvykle skok) a v případě opačném je následující instrukce vyřazena a nahrazena instrukcí NOP. Podrobný popis všech instrukcí je možné najít v katalogovém listu a doporučené literatuře. Na dnešním cvičení budou potřebné následující instrukce (i s příkladem použití): 1. bcf nastaví bit registru do 0 bcf PORTA, 1 2. bsf nastaví bit registru do 1 bsf STATUS, RP0 3. decfsz dekrementuj registr, přeskoč decfsz CITAC ;zniz hodnotu o 1 následující instrukci v případě goto $-1 ;neni nula příznaku 0 goto hotovo ;vynulovano 4. goto nepodmíněný skok goto loop 5. movlw vlož hodnotu do registru W movlw 0xC7 6. movwf ulož W do pametoveho registru movwf TEMP
Registr STATUS Mikrokontroléry PIC obsahují více speciálních registrů. K těmto registrům se přistupuje přes datovou paměť stejně jako k normálním paměťovým registrům. Před psaním programu je vhodné si projít mapu paměti a nastudovat funkci jednotlivých registrů. Nejdůležitější registry jsou: 1. STATUS výsledky operací ALU, nastavování paměťové stránky 2. OPTION nastavení pull up, nastavení časovače a děliček 3. INTCON nastavení přerušení, nastavení časovače 4. PIE1 a PIE2 povolení a zakázání přerušení 5. PIR1 a PIR2 příznaky přerušení 6. PCON příznaky resetu 7. PCL a PCLATH Nejdůležitější registr mikrokontroléru PIC je registr STATUS, do kterého je ukládán stav jednotky ALU, stav Resetu a pomocí něj je taky nastavována paměťová stránka. Popis bitů registru STATUS: 7. IRP výběr paměťové stránky při nepřímém adresování 6. RP1 výběr pam. stránky RP<1:0> 00 str. 0 (00h - 7Fh) 01 stránka 1 (80h - FFh) 5. RP0 výběr pam. stránky 10 str. 2 (100h - 17Fh) 11 stránka 3 (180h - 1FFh) 4. TO time-out bit 1 - clrwdt, sleep 0 - watch-dog timer preteceni 3. PD power-down bit 1 - clrwdt, pripojeni napajeni 0 - sleep 2. Z příznak nuly když je výsledek logické nebo aritmetické operace 0 1. DC přetečení / podtečení znaku přetečení / podtečení na 4-tém bitu 0. C přetečení / podtečení přetečení / podtečení při sčítání nebo odčítání Používání proměnných Kromě pracovního registru W je možné využívat pro práci s daty taky paměťové registry. Paměťové registry je vhodné pojmenovat. Je možné použít direktivu cblok, která vytvoří posloupnost konstant od hodnoty zadané na začátku. Nebo je možné použít direktivu EQU, která přiřazuje názvu konstanty hodnotu. Příklad 1: cblock 0x20 temp:3 citac1 citac2 vysledek endc ;promenna temp bude mit rezervovane 3 bajty ;0x20, 0x21 a 0x22 - temp, temp+1 a temp+2 Příklad 2: RAM equ 0x20 temp equ RAM citac1 equ RAM + 1 citac2 equ RAM + 2 vysledek equ RAM + 3
Zpožďovací cyklus Zpoždění je možné vytvořit vkládáním instrukce NOP (mikrosekundy). To ale zpozdí vykonávání programu jen o jeden instrukční cyklus. Větší zpoždění (milisekundy) můžeme docílit postupným nulováním registru tak, že do registru načteme požadovanou hodnotu a pomocí instrukce decfsz zmenšujeme jeho hodnotu. Ještě větší zpoždění (sekundy) vytvoříme zacyklením dvou zpožďovacích smyček do sebe. Příklad 1: movlw 0xa0 ;vytvorime zpozdeni 96 us @ 20MHz movwf citac ;nacteme hodnotu 160 do promenne citac decfsz citac, f ;znizuje hodnotu do nuly goto $-1 ;pak se zastavi opakovani Příklad 2: loop movlw 0x20 ;vytvorime zpozdeni 4,9 ms @ 20MHz movwf citac1 ;inicializace prvni smycky ;navest prvni smycky movlw 0xff ;inicializace druhe vnitrni smycky movwf citac2 decfsz citac2, f;znizi hodnotu druheho citace goto $-1 decfsz citac1, f;znizi hodnotu prvniho citace goto loop Ukončení překladu Překladač ukončuje překlad v momentě, kdy narazí na direktivu END. Tahle direktiva je povinná i když chceme přeložit celý program.
3. Úloha Vytvořte program který rozbliká LED diodu. Všechny řádky programu řádně okomentujte. 1. Nastavte konfigurační slovo obvodu pomocí direktivy CONFIG 2. Nastavte PORTC jako výstupní 3. Vytvořte zpožďovací smyčku 4. Pomocí zpožďovací smyčky rozblikejte LED diodu DS1 5. Výsledný program i jeho funkci na vývojové desce nechte zkontrolovat vyučujícímu 6. Program z obvodu vymažte
4. Vývojová deska PICkit 2 P1 ICSP RA4 RA3 RC5 RC3 C1 0,1µF +V 1 2 3 4 5 6 7 8 9 10 PIC16F690 VDD RA5 RA4 RA3/MCLR/VPP RC5 RC4 RC3 RC6 RC7 RB7 VSS AN5/RA0 RA1 RA2 RC0 RC1 RC2 RB4 RB5 RB6 20 19 18 17 16 15 14 13 12 11 RA0 RA1 RC0 RC1 RC2 VPP VDD GND ICSPDAT ICSPCLK T1G 1 2 3 4 5 6 +V RC0 RC1 RC2 RC3 DS1 DS2 DS3 DS4 R3 470R R4 470R R5 470R R6 470R RC5 +V RA0 R2 1k R7 1k R1 10k SW1 C2 0,1µF RP1 10k Obr.??? - Schéma zapojení PICkit 2 Vývojová deska PICkit 2 je osazena obvodem PIC16F690. Má konektor pro připojení k programátoru. Dále je osazena tlačidlem SW1 připojeným k pinu RC5, trimrem připojeným k pinu RA0 a čtyřmi LED diodami DS1 až DS4, které jsou připojeny k pinům RC0 až RC3.
5. Doporučená litertatura Vhodnou literaturou pro začátek s obvody PIC je knížka Učebnice programování PIC z vydavatelství BEN od Václava Vacka. Dále je vhodné si prostudovat manuály k překladači MPASM a prostředí MPLAB a taky katalogový list obvodu PIC16F690. Ty jsou volně k dispozici na internetových stránkách firmy MICROCHIP.