Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv. copyright. To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby ètenáø vidìl, jakým zpùsobem je titul zpracován a mohl se také podle tohoto, jako jednoho z parametrù, rozhodnout, zda titul koupí èi ne). Z toho vyplývá, že není dovoleno tuto ukázku jakýmkoliv zpùsobem dále šíøit, veøejnì èi neveøejnì napø. umis ováním na datová média, na jiné internetové stránky (ani prostøednictvím odkazù) apod. redakce nakladatelství BEN technická literatura redakce@ben.cz
11.3. Pøípravek ATSPITST Pro test funkce SPI rozhraní byl navržen pøípravek ATSPITST. Jedná se o jednoduchý SPI pøíjímaè vystavìný na základì posuvného registru typu SIPO s oznaèením 7HCT9 (IO 1 ). Posuvný registr typu 7HCT9 byl popsán napøíklad v [1, nebo 6] a lze jej bez vážnìjších potíží pøipojit na SPI sbìrnici. Schéma zapojení je uvedeno na obr. 11.21. 3,63 *1 6. 026, 66 6/ /. 6, 67 2( *1,2 62 *1 32 Obr. 11.21 Schéma zapojení pøípravku ATSPITST Vývod SI je vstup sériových dat, pøipojí se tedy na signál MOSI od mastera. Podobnì CLK jsou hodiny pøenosu, pøipojí se tedy na signál SCK mastera. Poslední je hodinový vstup STB, který byl pøipojen na vývod 66 (mohl by být ale pøipojen i jinam). Ten jediný musíme ovládat programovì (jeho obsluhu nezajistí SPI rozhraní). Nábìžná hrana tohoto signálu provede pøepis sériovì pøijatých dat na paralelní výstup tvoøený vývody Q 1 až Q 8. Signály SPI sbìrnice jsou pøivedeny na konektor PISP, 8bitová výstupní sbìrnice vèetnì napájení je k dispozici na konektoru PO. Na konektor PO tedy mùžeme pøipojit libovolný z výstupních pøípravkù, napøíklad AT8LED nebo ATDISP. Obr. 11.22 Plošný spoj pøípravku ATSPITST (BEN 020) Obr. 11.23 Osazovací plánek A Práce s mikrokontroléry Atmel AT89LP202/02 167
Rozpis souèástek pro pøípravek ATSPITST (cena asi 0 Kè): C 1 CK 100N/63V 1 ks IO 1 7HCT9 1 ks PISP, PO MLW10G 2 ks 11.3.6 Pøíklad PROG_12 Tento pøíklad ukazuje použití SPI rozhraní pro výstup dat. Pøíklad è.12: Pøipojte konektor PISP pøípravku ATSPITST na port P1. Na konektor PO pøipojte pøípravek AT8LED. Vytvoøte program, který pomocí SPI rozhraní odesílá sekvenci dat odpovídající bìžícímu svìtlu (PROG_03, varianta RLC). V tomto pøípadì budeme používat pouze port P1. Pro jednoduchost jej nakonfigurujeme tak, že všechny jeho bity budou kvaziobousmìrné. Dále musíme povolit alternativní funkci vývodù P1. až P1.7 (vývody SPI rozhraní). Nyní se dostáváme ke konfiguraci SPI rozhraní. Musíme tedy správnì nastavit obsah registru SPCR: n nebudeme používat pøerušení (SPIE = 0), n bit SPE musíme nastavit až po volbì režimu (SPE = 0), n bity musíme odeslat v poøadí LSB až MSB, jinak budou pøetoèeny na výstupu (DORD = 0), n hodinový signál generuje mikrokontrolér (MSTR = 1), n v souladu s obr. 11. volíme CPOL = 0 a CPHA = 0 (datové bity se potvrzují nábìžnou hranou hodin, mají malý pøedstih), n použijeme nejrychlejší hodinový signál, SPR1 = 0, SPR0 = 0 (pro 16 MHz krystal vychází v souladu s tab.11.1 hodinový kmitoèet 8 MHz). Takže do registru SPCR zapíšeme hodnotu 00010000B. Následnì nastavíme bit SPE, takže zapíšeme podobnou hodnotu 01010000B. Tím je SPI rozhraní konfigurováno a aktivováno. Vlastní odesílání dat bude probíhat jejich zápisem do registru SPDR. Narozdíl od pøíkladu PROG_03 nebudeme používat rotaci, ale data budeme tahat z tabulky oznaèené návìštím TAB. Tato tabulka je vytvoøena v programové pamìti, pro pøístup k tìmto konstantám se používá instrukce MOVC A,@A+DPTR. Èili adresa do programové pamìti je dána souètem obsahu akumulátoru a registru DPTR, pøeètený údaj se uloží do akumulátoru. Pøed spuštìním smyèky CYKL naplníme DPTR adresou tabulky konstant a registr B zase jejich poètem. Vývod SS ovládá signál STB, zápis probíhá nábìžnou hranou, na zápis se tedy pøipravíme instrukcí CLR SS (SS = 0). Pøi ètení konstant bude akumulátor nulový, takže budeme zvyšovat adresu obsaženou v registru DPTR (uchovávání jeho obsahu by bylo velmi pracné). 168 Práce s mikrokontroléry Atmel AT89LP202/02 A
Po vykonání instrukce MOV SPDR,A zaène vysílání. Bude však nìjakou dobu trvat. Nové vysílání nemùžeme zaèít døíve, než se dokonèí zapoèatý pøenos. Proto se testuje pøíznak SPIF obsažený v registru SPSR. Nelze k nìmu bohužel pøistoupit bitovou adresu, musíme jej nahrát do akumulátoru a pak jej testovat (jedná se o sedmý bit). Pokud bude pøíznak SPIF nastaven, pøeètením registru SPSR dojde k jeho hardwarovému vynulování. Takže mùžeme pokraèovat dále. Nakonec tedy pøenesený údaj zapíšeme na výstupy obvodu 7HCT9 vykonáním instrukce SETB SS (STB = 1, generovala se nábìžná hrana), zaøadíme krátkou èekací smyèku realizovanou podprogramem CEKANI, zvýšíme adresu obsaženou v registru DPTR. Pokud není vynulován registr B, pokraèuje dalším bajtem. Po odeslání celé tabulky (B = 0) se provede skok na návìští SMYCKA a celá sekvence se opakuje. PROG_12.ASM: $INCLUDE(LP202.INC) SS EQU P1. ;/SS signál POCET EQU 9 ;poèet bajtù RESET: ;inicializace: MOV P1M0,#0 ;P1 konfigurován MOV P1M1,#0 ;kvaziobousmìrnì MOV P1,#11100000B ;alt.f. P1. až P1.7 MOV SPCR,#00010000B ;konfig. SPI MOV SPCR,#01010000B ;nastav SPE SMYCKA: MOV DPTR,#TAB ;DPTR na TAB MOV B,#POCET ;B na poèet CYKL: CLR SS ;STB=0 CLR A ;A=0 MOVC A,@A+DPTR ;èti z TAB MOV SPDR,A ;pošli pøes SPI SPITST: MOV A,SPSR ;test konce JNB ACC.7,SPITST ;SPIF SETB SS ;STB=1 ACALL CEKANI ;èekání 0,1 s INC DPTR ;zvyš pozici DJNZ B,CYKL ;zpìt do cyklu SJMP SMYCKA ;zaèni znovu ;èekací rutina: CEKANI: MOV R0,#0 ;nastavení MOV R1,#208 ;èekací doby MOV R2,#10 ;zhruba 0,1 s A Práce s mikrokontroléry Atmel AT89LP202/02 169
CEKEJ: DJNZ R0,CEKEJ ;1. smyèka DJNZ R1,CEKEJ ;2. smyèka DJNZ R2,CEKEJ ;3. smyèka RET ;data pro vysílání: TAB: DB 11111111B ;zhasnuto DB 11111110B ;D0 DB 11111101B ;D1 DB 11111011B ;D2 DB 11110111B ;D3 DB 11101111B ;D DB 11011111B ;D DB 10111111B ;D6 DB 01111111B ;D7 END Pøíklad najdete na doprovodném CD-ROM v adresáøi PROGRAMY\PROG_12. 11.3.7 Pøípravek ATOSC Pøípravek ATOSC nám umožní vybudovat z mikroprocesoru jednoduchý digitální osciloskop (viz kapitolu 13.). Schéma zapojení je uvedeno na obr. 11.2. Konektor P 1 je urèen pro pøipojení na port P1, konektor P 3 pak zase na port P3. Jádrem zapojení je A/D pøevodník MCP3002 (IO 2 ). Napájecí a referenèní napìtí je získáno pøímo z vývojového kitu (není použit vnìjší zdroj), pouze je vyhlazeno èlánkem L 1, C. Vývody CLK, DOUT, DIN a CS jsou pøipojeny na odpovídající signály SPI kanálu: SCK, MISO, MOSI a 66. Z analogové èásti se používá pouze kanál CH 0, je schopen zpracovat napìtí v rozsahu 0 až U CC. Ochrana proti pøepìtí na vstupu je zajištìna omezovaèem R 6, D 1, D 2. Operaèní sí vystavìná kolem zesilovaèe IO 1 (MCP602) slouží k posuvu vstupního napìtí. Napìtí pøivedené na svorkovnici X 1 mùže bít bipolární v rozsahu zhruba 1/2 U CC až +1/2 U CC (tedy asi ±2, V). Vstupní napìtí pøivedené se ziskem 1 (tedy invertovanì) na výstup se totiž sèítá s polovinou U CC. Aby nebyl nutný záporný zdroj napìtí, byl zvolen operaèní zesilovaè MCP602, který vystaèí s nesymetrickým napájením. Výstup operaèního zesilovaèe je pøiveden ještì na neinvertující vstup analogového komparátoru, který je zabudován v mikrokontroléru (viz kapitolu 12). Invertující vstup je pak pøipojen na integraèní èlánek D/A pøevodníku tvoøený R 7, C. Tento pøevodník je vytvoøen z PWM signálu produkovaného na vývodu T0 (P3.). Dané zapojení bude sloužit pro spouštìní osciloskopu. Když vstupní napìtí dosáhne spouštìcí úrovnì (nastavené D/A pøevodníkem), odstartuje se snímání vstupního signálu. 170 Práce s mikrokontroléry Atmel AT89LP202/02 A
/ 3 8 6. 0,62 026, 66 /. 287,1 6,2 8 + + *1,2 ± ; *1 3 *1 Obr. 11.2 Schéma zapojení pøípravku ATOSC Obr. 11.2 Plošný spoj pøípravku ATOSC (BEN020) Obr. 11.26 Osazovací plánek A Práce s mikrokontroléry Atmel AT89LP202/02 171
Rozpis souèástek pro pøípravek ATOSC (cena asi 10 Kè): C 1 až C 3 CK 100N/63V 3 ks C E100M/16V 1 ks C E1M/0V 1 ks D 1, D 2 1N18 2 ks IO 1 MCP602-I/P 1 ks IO 2 MCP3002-I/P 1 ks L 1 TL. 100µH 1 ks P 1, P 3 MLW10G 2 ks R 1, R 2 RR 10K 2 ks R 3, R RR 100K 2 ks R RR 200K 1 ks R 6 RR 1K 1 ks R 7 RR 10K 1 ks X1 ARK00/2 1 ks Nyní si povíme nìco více o obvodu MCP3002. Jedná se o dvoukanálový A/D pøevodník s rozlišením až 10 bitù. Pracuje na principu postupné aproximace a pøevedený údaj vysílá sériovì, sbìrnicí SPI. Jedná se o pomìrnì rychlý pøevodník, takže z nìj mùžeme data naèítat velmi rychle. Podrobnìjší popis lze nalézt napøíklad v [2]. Na obr. 11.27 je ukázáno, že pro spuštìní pøevodu se musí po lince D IN vyslat startovací sekvence. První bit (start) má vždy hodnotu log. 1, ostatní tøi bity urèují: režim funkce (diferenèní proti zemi), kanál, zpùsob vysílání. Nejdøíve je z obvodu odeslán potvrzovací nulový bit a následuje 10 bitù v poøadí od nejvíce významného po nejménì významný. Poèet pøijímaných bitù je možno zkrátit, pøijmout napøíklad jen 8 bitù (nejnižší dva bity prostì vynecháme), pøedèasným vytažením linky CS na log. 1. W < W 6+ W < 6 W 686 /. 6WDUW 6*/,)) 2 6,*1 06) 2 6,*1,1 KRGQRWDQHPiYOLY 287 Y\VRNiLPSHGDQFH QXORYê ELW Y\VRNiLPSHGDQFH W 6$03/( W 219 W $7$ Obr. 11.27 Èasový diagram komunikace 172 Práce s mikrokontroléry Atmel AT89LP202/02 A