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á slouit 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ø. umisováním na datová média, na jiné internetové stránky (ani prostøednictvím odkazù) apod. redakce nakladatelství BEN technická literatura
[email protected]
11.3.5
Pøípravek ATSPITST
Pro test funkce SPI rozhraní byl navren 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 74HCT595 (IO1). Posuvný registr typu 74HCT595 byl popsán napøíklad v [1, 5 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. ,2
8&& ' ' ' 3,63
'
8&&
6&.
&
026,
66
'
'
6&/5
4
&/.
4 4
6,
4
67%
4 4
2(
4
'
4
'
62
*1'
Obr. 11.21
8&&
*1'
8&& ' ' ' ' '
32
' ' ' *1'
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 Q1 a Q8. 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
A
Ploný spoj pøípravku ATSPITST (BEN 0204)
Obr. 11.23
Osazovací plánek
Práce s mikrokontroléry Atmel AT89LP2052/4052
167
Rozpis souèástek pro pøípravek ATSPITST (cena asi 50 Kè): C1 IO1 PISP, PO
11.3.6
CK 100N/63V 74HCT595 MLW10G
1 ks 1 ks 2 ks
Pøíklad PROG_12
Tento pøíklad ukazuje pouití 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 vechny jeho bity budou kvaziobousmìrné. Dále musíme povolit alternativní funkci vývodù P1.5 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øeruení (SPIE = 0), n
bit SPE musíme nastavit a po volbì reimu (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.4 volíme CPOL = 0 a CPHA = 0 (datové bity se potvrzují nábìnou hranou hodin, mají malý pøedstih),
n
pouijeme 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). Take do registru SPCR zapíeme hodnotu 00010000B. Následnì nastavíme bit SPE, take 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 sputì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ý, take budeme zvyovat adresu obsaenou v registru DPTR (uchovávání jeho obsahu by bylo velmi pracné).
168
Práce s mikrokontroléry Atmel AT89LP2052/4052
A
Po vykonání instrukce MOV SPDR,A zaène vysílání. Bude vak 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 obsaený v registru SPSR. Nelze k nìmu bohuel 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í. Take mùeme pokraèovat dále. Nakonec tedy pøenesený údaj zapíeme na výstupy obvodu 74HCT595 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 obsaenou 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(LP2052.INC) SS POCET
EQU P1.4 EQU 9
;inicializace: MOV P1M0,#0 MOV P1M1,#0 MOV P1,#11100000B MOV SPCR,#00010000B MOV SPCR,#01010000B SMYCKA: MOV DPTR,#TAB MOV B,#POCET CYKL: CLR SS CLR A MOVC A,@A+DPTR MOV SPDR,A SPITST: MOV A,SPSR JNB ACC.7,SPITST SETB SS ACALL CEKANI INC DPTR DJNZ B,CYKL SJMP SMYCKA ;èekací rutina: CEKANI: MOV R0,#0 MOV R1,#208 MOV R2,#10
;/SS signál ;poèet bajtù
RESET:
A
;P1 konfigurován ;kvaziobousmìrnì ;alt.f. P1.5 a P1.7 ;konfig. SPI ;nastav SPE ;DPTR na TAB ;B na poèet ;STB=0 ;A=0 ;èti z TAB ;poli pøes SPI ;test konce ;SPIF ;STB=1 ;èekání 0,1 s ;zvy pozici ;zpìt do cyklu ;zaèni znovu ;nastavení ;èekací doby ;zhruba 0,1 s
Práce s mikrokontroléry Atmel AT89LP2052/4052
169
CEKEJ:
TAB:
DJNZ R0,CEKEJ DJNZ R1,CEKEJ DJNZ R2,CEKEJ RET ;data pro vysílání: DB 11111111B DB 11111110B DB 11111101B DB 11111011B DB 11110111B DB 11101111B DB 11011111B DB 10111111B DB 01111111B
;1. smyèka ;2. smyèka ;3. smyèka
;zhasnuto ;D0 ;D1 ;D2 ;D3 ;D4 ;D5 ;D6 ;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 umoní vybudovat z mikroprocesoru jednoduchý digitální osciloskop (viz kapitolu 13.4). Schéma zapojení je uvedeno na obr. 11.24. Konektor P1 je urèen pro pøipojení na port P1, konektor P3 pak zase na port P3. Jádrem zapojení je A/D pøevodník MCP3002 (IO2). Napájecí a referenèní napìtí je získáno pøímo z vývojového kitu (není pouit vnìjí zdroj), pouze je vyhlazeno èlánkem L1, C4. 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 CH0, je schopen zpracovat napìtí v rozsahu 0 a UCC. Ochrana proti pøepìtí na vstupu je zajitìna omezovaèem R6, D1, D2. Operaèní sí vystavìná kolem zesilovaèe IO1 (MCP602) slouí k posuvu vstupního napìtí. Napìtí pøivedené na svorkovnici X1 mùe bít bipolární v rozsahu zhruba 1/2 UCC a +1/2 UCC (tedy asi ±2,5 V). Vstupní napìtí pøivedené se ziskem 1 (tedy invertovanì) na výstup se toti sèítá s polovinou UCC. 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 jetì 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ý R7, C5. Tento pøevodník je vytvoøen z PWM signálu produkovaného na vývodu T0 (P3.4). Dané zapojení bude slouit pro spoutìní osciloskopu. Kdy vstupní napìtí dosáhne spoutìcí úrovnì (nastavené D/A pøevodníkem), odstartuje se snímání vstupního signálu.
170
Práce s mikrokontroléry Atmel AT89LP2052/4052
A
8&& ' ' ' 3
'
8&&
6&.
' ' *1'
,2
0,62
026,
66
' '
5
/ &/.
8&&85
'287
&+
',1
&+
&6
*1'
'
5
5 '
,2
±
;
5
5
5 &
& & &
8&& ' ' ' 3
'
5
'
&
' ' ' *1'
Obr. 11.24
Schéma zapojení pøípravku ATOSC
Obr. 11.25
Ploný spoj pøípravku ATOSC (BEN0205)
A
Obr. 11.26
Osazovací plánek
Práce s mikrokontroléry Atmel AT89LP2052/4052
171
Rozpis souèástek pro pøípravek ATOSC (cena asi 150 Kè): C1 a C3 C4 C5 D1, D2 IO1 IO2 L1 P1, P3 R1, R2 R3, R5 R4 R6 R7 X1
CK 100N/63V E100M/16V E1M/50V 1N4148 MCP602-I/P MCP3002-I/P TL. 100µH MLW10G RR 150K RR 100K RR 200K RR 1K RR 10K ARK500/2
3 ks 1 ks 1 ks 2 ks 1 ks 1 ks 1 ks 2 ks 2 ks 2 ks 1 ks 1 ks 1 ks 1 ks
Nyní si povíme nìco více o obvodu MCP3002. Jedná se o dvoukanálový A/D pøevodník s rozliení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, take 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 sputìní pøevodu se musí po lince DIN vyslat startovací sekvence. První bit (start) má vdy hodnotu log. 1, ostatní tøi bity urèují: reim 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 mono zkrátit, pøijmout napøíklad jen 8 bitù (nejnií dva bity prostì vynecháme), pøedèasným vytaením linky CS na log. 1. W&<&
W&6+
W&<&
&6 W68&6
2'' 6,*1
06%)
6*/ ',)) 2'' 6,*1
6WDUW
&/.
',1
'287
W6$03/(
Obr. 11.27
172
%
%
%
%
%
%
%
%
%
%
Y\VRNiLPSHGDQFH
QXORYê ELW
KRGQRWDQHPiYOLY
W&219
Y\VRNiLPSHGDQFH
W'$7$
Èasový diagram komunikace
Práce s mikrokontroléry Atmel AT89LP2052/4052
A