STEDNÍ PRMYSLOVÁ ŠKOLA ELEKTROTECHNIKY

Transkript

STEDNÍ PRMYSLOVÁ ŠKOLA ELEKTROTECHNIKY
STěEDNÍ PRģMYSLOVÁ ŠKOLA ELEKTROTECHNIKY A INFORMATIKY
OSTRAVA, PěÍSPċVKOVÁ ORGANIZACE
MODEL VÝTAHU
Dlouhodobá maturitní práce
Autor: Martin Kresta, EP4A
Vedoucí práce: Ing. Ladislav Škapa
Konzultant: Ing. Ladislav Škapa
Ostrava 2007/2008
Anotace
PĜedmČtem práce bude návrh a výroba modelu výtahu urþeného k pĜepravČ osob v nČkolika
patrovém domČ. ěídící systém bude komunikovat s ovládacími panely zobrazovacími
jednotkami, þidly a pohonem. PĜedpokládá se realizace na bázi monolitického mikropoþítaþe.
-2-
© Copyright, Martin Kresta 2008
PodČkování
Úvodem bych chtČl podČkovat tČmto lidem, bez jejichž ochotné pomoci by byla práce
výraznČ složitČjší:
• Ing. Ladislavu Škapovi, vedoucímu i konzultantovi mé práce, který mi poskytl nČkolik
zajímavých tipĤ v oblasti softwaru.
• Ing. ZdeĖkovi Nálevkovi za trpČlivé vysvČtlení problematiky elektrických pohonĤ
zejména PFM a užiteþné rady v této oblasti.
• Petru Stehlíkovi a firmČ ZAM-servis s.r.o. za poskytnutí schématu a softwaru pro
výrobu ISP programátoru, který byl použit pĜi vývoji modelu výtahu.
• JiĜímu Starému za soustružnické práce pĜi výrobČ ocelového hĜídele a ložisek.
-3-
© Copyright, Martin Kresta 2008
Prohlášení a licenþní ujednání
Prohlášení
Prohlašuji, že svou dlouhodobou maturitní práci na téma „Model výtahu“, jsem vypracoval
samostatnČ pod vedením vedoucího dlouhodobé maturitní práce a s použitím odborné
literatury a dalších informaþních zdrojĤ, které jsou uvedeny v seznamu literatury. Jako autor
uvedené dlouhodobé maturitní práce dále prohlašuji, že v souvislosti s vytvoĜením této práce
jsem neporušil autorská práva tĜetích osob, zejména jsem nezasáhl nedovoleným zpĤsobem
do cizích autorských práv osobnostních a jsem si plnČ vČdom následkĤ porušení ustanovení §
11 a následujících autorského zákona þ. 121/2000 Sb., vþetnČ možných trestnČprávních
dĤsledkĤ vyplývajících ustanovení § 152 trestního zákonaþ. 140/1961 Sb.“
Licenþní ujednání
•
•
•
Ve smyslu §60 autorského zákona þ. 121/2000 Sb. poskytuji SPŠei Ostrava, výhradní
a neomezená práva (§46 a §47) k využití mé dlouhodobé maturitní práce.
Bez svolení školy se zdržím jakéhokoliv komerþního využití mé práce.
Pro nekomerþní a výukové úþely školy se vzdávám nároku na odmČnu za užití díla.
V OstravČ, 25.2.2008
-4-
© Copyright, Martin Kresta 2008
OBSAH
Anotace .............................................................................................................. 2
PodČkování......................................................................................................... 3
Prohlášení a licenþní ujednání ........................................................................... 4
Prohlášení ........................................................................................................................... 4
Licenþní ujednání ............................................................................................................... 4
1. CHARAKTERISTIKA TÉMATU ............................................................................ 8
1.1. ZdĤvodnČní tématu práce............................................................................ 8
1.2. Specifikace problému ................................................................................. 8
1.3. Použité metody............................................................................................ 9
1.4. Organizace práce......................................................................................... 9
2. POPIS FUNKCE ................................................................................................. 10
3. NÁVOD K OBSLUZE .......................................................................................... 11
4. KONSTRUKCE .................................................................................................. 12
4.1. Výtahová šachta ........................................................................................ 12
4.2. Pohonná jednotka...................................................................................... 12
4.3. Kabina a protizávaží ................................................................................. 13
4.4. Stabilita ..................................................................................................... 13
4.5. Technické parametry................................................................................. 13
5. ELEKTRONIKA ................................................................................................. 14
5.1. Zdroje........................................................................................................ 15
5.2. Elektronická pojistka ................................................................................ 15
5.3. NapČĢový supervisor................................................................................. 16
5.4. Elektrický pohon....................................................................................... 16
5.5. Displej ....................................................................................................... 17
5.6. Tlaþítka ..................................................................................................... 17
5.7. LED........................................................................................................... 17
5.8. Elektronika v kabinČ ................................................................................. 17
5.9. OdĤvodnČní použitých souþástek ............................................................. 18
6. SOFTWARE ....................................................................................................... 20
6.1. Atmel......................................................................................................... 20
6.2. Program..................................................................................................... 20
6.3. MASTER .................................................................................................. 21
6.3.1. Nastavení ................................................................................................................ 21
6.3.2. Test þidel ................................................................................................................ 22
6.3.3. Test tlaþítek ............................................................................................................ 22
6.3.4. Vyhodnocení požadavku ........................................................................................ 22
6.3.5. Nástup/výstup......................................................................................................... 22
6.3.6. Kontrola pamČti...................................................................................................... 23
6.3.7. Odeslání dat............................................................................................................ 23
6.3.8. Plynulý rozjezd....................................................................................................... 23
6.3.9. Plynulé zastavení.................................................................................................... 24
6.3.10. Subrutina on a off................................................................................................. 24
6.3.11. Zobrazení.............................................................................................................. 24
-5-
© Copyright, Martin Kresta 2008
6.3.12. Subrutina ledka..................................................................................................... 24
6.3.13. ýasování 4 sekundy.............................................................................................. 24
6.3.14. Subrutina savetest................................................................................................. 25
6.3.15. Obsluha pĜerušení Timeru 0................................................................................. 25
6.3.16. Obsluha pĜerušení sériové linky........................................................................... 25
6.4. SLAVE...................................................................................................... 27
6.4.1. Testování tlaþítek ................................................................................................... 27
6.4.2. Odeslání dat............................................................................................................ 27
6.4.3. Subrutina antikmit .................................................................................................. 27
6.4.4. Obsluha pĜerušení sériové linky............................................................................. 28
6.4.5. Subrutina dekoder .................................................................................................. 28
6.4.6. Generování tónĤ ..................................................................................................... 28
6.4.7. Obsluha pĜerušení timeru 0 .................................................................................... 28
6.5. Výpoþty þasových prodlev........................................................................ 29
7. ZÁVċR .............................................................................................................. 30
8. LITERATURA .................................................................................................... 30
9. PěÍLOHY .......................................................................................................... 31
9.1. Blokové schéma elektroniky..................................................................... 31
9.2. Elektrotechnická schémata ....................................................................... 32
9.2.1. MASTER (Schéma) ............................................................................................... 32
9.2.2. SLAVE (schéma) ................................................................................................... 33
9.2.3. Výpis souþástek...................................................................................................... 34
9.2.4. Zdroj (schéma) ....................................................................................................... 35
9.2.5. Control (schéma) .................................................................................................... 36
9.2.6. Sensor (schéma) ..................................................................................................... 37
9.3. Desky plošných spojĤ ............................................................................... 38
9.3.1. MASTER (DPS)..................................................................................................... 38
9.3.2. SLAVE (DPS) ........................................................................................................ 40
9.3.3. Zdroj (DPS) ............................................................................................................ 41
9.3.4. Control (DPS)......................................................................................................... 42
9.3.5. Sensor (DPS) .......................................................................................................... 42
9.4. Vývojové diagramy................................................................................... 43
9.4.1. Vývojový diagram MASTER................................................................................. 43
9.4.2. Rutina sentest ......................................................................................................... 44
9.4.3. Rutina zobraz.......................................................................................................... 45
9.4.4. Rutina posli (MASTER)......................................................................................... 46
9.4.5. Rutina buttest (MASTER)...................................................................................... 47
9.4.6. Rutina lift................................................................................................................ 48
9.4.7. Rutina ready ........................................................................................................... 49
9.4.8. Subrutina jed .......................................................................................................... 50
9.4.9. Subrutina stuj.......................................................................................................... 51
9.4.10. Subrutiny on a off................................................................................................. 52
9.4.11. Subrutina ledka..................................................................................................... 53
9.4.12. Subrutina wait4 .................................................................................................... 54
9.4.13. Subrutina savetest – 1.þást ................................................................................... 55
9.4.14. Subrutina savetest – 2.þást ................................................................................... 56
9.4.15. Obsluha pĜerušení sériové linky (MASTER) ....................................................... 57
9.4.16. Obsluha pĜerušení timeru 0 (MASTER) .............................................................. 58
9.4.17. Rutina Buttest (SLAVE) ...................................................................................... 59
-6-
© Copyright, Martin Kresta 2008
9.4.18. Subrutina antikmit ................................................................................................ 60
9.4.19. Subrutina posli (SLAVE) ..................................................................................... 61
9.4.20. Obsluha pĜerušení sériové linky (SLAVE) .......................................................... 62
9.4.21. Subrutina dekoder ................................................................................................ 63
9.4.22. Subrutiny ah a d.................................................................................................... 64
9.4.23. Obsluha pĜerušení timeru 0 (SLAVE).................................................................. 65
9.5. Zdrojové kódy MASTER a SLAVE......................................................... 66
OBSAH CD-ROM
•
•
•
•
•
•
•
Elektrotechnická schémata (EAGLE)
Návrhy DPS (EAGLE)
Software (KEIL)
Katalogové listy nČkterých souþástek (PDF)
Odkazy na webové stránky (PDF)
Dokumentace (PDF)
Videoukázka (WMV)
-7-
© Copyright, Martin Kresta 2008
1. CHARAKTERISTIKA TÉMATU
1.1. ZdĤvodnČní tématu práce
Jelikož na naší škole existuje možnost vykonat i dlouhodobou praktickou maturitní zkoušku
z jednoho odborného pĜedmČtu, využil jsem tuto možnost. I když nám byly pĜedloženy urþitá
témata ke zpracování, já jsem si vybral své téma sám. Po pĜedložení mého návrhu ing.
Škapovi, který je mým uþitelem v pĜedmČtu mikroprocesorová technika, byl mĤj návrh
schválen. Ing. Škapa se tak stal mým konzultantem i vedoucím práce. Jedná se o model
výtahu. Takovýto model jsem si vybral proto, že je vhodný pro Ĝízení mikroprocesorem a
umožĖuje s využitím vhodných periférií demonstrovat možnosti mikroprocesoru. PĜestože
tato práce bude reprezentovat pĜedmČt mikroprocesorová technika, dá se Ĝíct, že jde o
propojení pĜedmČtĤ mikroprocesorová technika, elektronika, elektrotechnická mČĜení,
programové vybavení, fyzika, matematika a další. Komplexnost práce je také jeden z dĤvodĤ
proþ jsem si toto téma vybral. Hlavním dĤvodem ale zĤstává možnost vyzkoušet si v praxi
programování mikroprocesoru pomocí jazyku symbolických adres a další praktické uplatnČní
teoretických znalostí.
V souþasnosti ještČ funguje mnoho starších výtahĤ, které se modernizují tak, že se
starý reléový systém nahradí novým modernČjším, jehož základ tvoĜí mikroprocesor. To
mimo jiné umožĖuje jednodušší realizaci plynulého pohybu, zvyšuje se tak efektivita, celkovČ
bezpeþnost a spolehlivost systému. Toto moderní Ĝešení je využito i pro realizaci modelu
výtahu, který je tímto po stránce Ĝízení srovnatelný s bČžnČ používanými výtahy.
Model jako takový mĤže sloužit jako prezentaþní nebo demonstraþní model a
díky podpoĜe ISP programování i jako výukový model pĜedmČtu mikroprocesorová technika.
1.2. Specifikace problému
Model Ĝeší problém Ĝídícího softwaru a elektroniky pro Ĝízení osobního výtahu.
Z hlediska softwaru je to pĜedevším správná algoritmizace, ošetĜení nežádoucích elektromechanických jevĤ, realizace Ĝízení motoru a generování tónu. Z hlediska elektroniky pak
vstupní a výstupní periférie a jejich pĜizpĤsobení pro Ĝízení digitálními signály s nízkou
proudovou zatížitelností, obvod pro spínání motoru a stejnosmČrné stabilizované zdroje pro
motor a pro ostatní elektroniku vþetnČ mikroprocesoru. Pro pĜedvedení funkþnosti tohoto
systému byl zhotoven reálný model se 6-ti stanicemi pĜizpĤsobený pro implementaci
elektroniky. Celek funkþního modelu výtahu je tedy tvoĜen propojením konstrukþní,
elektronické a softwarové þásti.
BČžnČ používané osobní výtahy musejí být navíc vybaveny rĤznými mechanickými
bezpeþnostními prvky. U navrhovaného modelu však vzhledem k omezeným konstrukþním
možnostem nejsou tyto prvky na modelu realizovány. Model slouží pouze k demonstraci
softwaru a elektroniky.
-8-
© Copyright, Martin Kresta 2008
1.3. Použité metody
PĜi realizaci bylo použito nČkolik zajímavých softwarových i elektronických metod.
NapĜíklad použití integrovaných stabilizátorĤ pro stejnosmČrné zdroje, elektronická pojistka
Ĝízená procesorem pro odpojení napájení motoru pĜi pĜetížení, napČĢový supervisor pro
vygenerování resetu pro mikroprocesory pĜi poklesu napájecího napČtí, Ĝízení dvou LED
pomocí jednoho pinu mikroprocesoru s použitím komplementárního zapojení tranzistorĤ,
použití speciálního obvodu pro Ĝízení motoru pomocí pulsnČ frekvenþní modulace a optické
závory.
Z hlediska softwaru bylo využito témČĜ všech možností použitého mikroprocesoru.
Jsou to sériová komunikace mezi procesorem v kabinČ a hlavním procesorem, timer v režimu
„baudrate generator“, generování tónu s promČnnou frekvenci pomoci timeru v režimu
„autoreload“, softwarová realizace PFM (pulsnČ frekvenþní modulace) pro plynulé rozjezdy a
zastavení motoru, þekací smyþky a další.
1.4. Organizace práce
Práce byla zapoþata vývojem jednotlivých funkþních þástí elektroniky na nepájivém
poli. Následovala výroba plošných spojĤ a vývoj softwaru. Pro testování bylo nutno zhotovit
výtahovou šachtu a pohonnou jednotku. NáslednČ byla vyrobena elektronika i software pro
procesor v kabinČ a realizována sériová komunikace. PostupnČ byl odlaćován software
a dokonþována mechanická konstrukce šachty výtahu. Zhotovením elektronické pojistky
a napČĢového supervisoru byl rámcovČ ukonþen proces výroby.
První kapitola hlavní þásti vypovídá o funkci výtahu, reakcích na požadavky obsluhy,
principu þinnosti. Obsahuje i návod k obsluze.
Druhá kapitola popisuje mechanickou konstrukci výtahové šachty, použitý materiál
a výrobní technologie.
Další kapitola pojednává o návrhu a funkci elektroniky, odĤvodnČní použitých prvkĤ a
o návrhu desek plošných spojĤ.
Poslední kapitola obsahuje podrobný popis softwaru, algorirtmizaci a struþný popis
mikroprocesoru s jádrem 8051.
-9-
© Copyright, Martin Kresta 2008
2. POPIS FUNKCE
Model je napodobeninou skuteþného osobního výtahu vþetnČ principu ovládání.
Každé patro je vybaveno jednociferným 7-mi segmentovým displejem, þervenou a zelenou
LED a tlaþítkem. V kabinČ je opČt displej se dvČmi LED, 6 tlaþítek pro výbČr patra, tlaþítko
stop a tlaþítko zvonek.
Signalizace LED:
• Svítící þervená LED: zaneprázdnČnost výtahu, zajištČné dveĜe.
• Svítící zelená LED: nástup/výstup, otevĜené dveĜe.
• Bez signalizace LED: þeká na požadavek, zajištČné dveĜe.
Jestliže výtah þeká na požadavek (bez signalizace LED), ihned po zadání požadavku
(pĜivolání výtahu) je požadavek vyhodnocen. V pĜípadČ, že v dobČ pĜivolání je již kabina
zaneprázdnČna, uloží se požadavek do pamČti a je vyhodnocen ihned, jakmile je aktuální
požadavek vyĜešen. Avšak v pĜípadČ, že v této dobČ nastane nový požadavek obsluhy
z kabiny, má tento požadavek vyšší prioritu a je vyhodnocen pĜednostnČ. Do pamČti lze uložit
maximálnČ 3 požadavky, þtvrtý požadavek je ignorován. Požadavky v pamČti jsou
vyhodnocovány v tom poĜadí, v jakém byly uloženy.
PĜi pohybu kabiny svítí všechny þervené LED, které signalizují zajištČné dveĜe a na
displejích se zobrazuje aktuální pozice kabiny.
Po zastavení kabiny v pĜíslušném patĜe se rozsvítí zelená a zhasne þervená LED
v kabinČ i v daném patĜe a zazní zvukový signál. ZároveĖ se rozsvítí displej v kabinČ, který
zobrazuje její aktuální pozici. V pĜípadČ, že do cca 4 sekund není zadán další požadavek,
všechny LED i displej v kabinČ zhasnou a výtah þeká na další požadavek, anebo se zaþne
vyhodnocovat požadavek z pamČti, byl-li nČjaký
uložen.
V pĜípadČ požadavku obsluhy z kabiny se
výtah uvede do pohybu okamžitČ. Displej v kabinČ
zĤstane rozsvícený, svítí všechny þervené LED. Po
zastavení se celá situace opakuje.
PĜi stisku tlaþítka STOP se kabina okamžitČ
zastaví a þeká na další požadavek. Zastaví-li takto
kabina v kterémkoliv patĜe, otevĜou se dveĜe. PĜi
zastavení mimo patro zĤstanou dveĜe zajištČny.
Tlaþítko
ZVONEK
spustí
generování
výstražného tónu bez ohledu na to v jakém stavu þi
poloze se výtah nachází.
Jediný okamžik, kdy systém nereaguje na
zadaný požadavek nastane jen v dobČ zastavování a
rozjezdu kabiny (cca 0,6s). To je dáno omezenými
možnostmi použitého mikroprocesoru. V dobČ
generování tónu dojezdu do patra systém nereaguje na
požadavky obsluhy z kabiny (cca 1s).
Pro názornost je funkce výtahu graficky
znázornČna vývojovým diagramem. Výtah v provozu
je možno shlédnout i na videoukázce na pĜiloženém
CD-ROM.
- 10 -
© Copyright, Martin Kresta 2008
!
!
!
+
)
),
% -
"#
!
&
!
$%
!
$
!
"#
!
&
'(
!
)
)
*
3. NÁVOD K OBSLUZE
Stiskem tlaþítka pĜivolejte kabinu výtahu (aktuální polohu kabiny mĤžete sledovat na
displeji).
Po otevĜení dveĜí a zaznČní zvukového signálu vstupte do kabiny.
Stiskem tlaþítka zvolte cílovou stanici (patro).
Po zaznČní zvukového signálu a otevĜení dveĜí opusĢte kabinu.
- 11 -
© Copyright, Martin Kresta 2008
4. KONSTRUKCE
Návrh konstrukce vyžadoval kompromis mezi funkþností, složitostí výroby a cenou.
Základními konstrukþními materiály jsou dĜevo, hliník a plexisklo. Veškeré spoje uvedených
materiálĤ byly realizovány pomocí bČžnČ dostupných spojovacích prvkĤ, jako jsou vruty þi
šrouby, v pĜípadČ dílu z plexiskla bylo užito speciální lepidlo. Samotná výroba, dČlení þi
úpravy jednotlivých dílĤ pĜedstavovala použití zejména klasických obrábČþských metod, jako
vrtání, Ĝezání, pilování, dále pak ohýbání, lisování apod. Díly z plexiskla sloužící k uchycení
ložisek zhotovila a dodala firma Valter Špalek podle mnou zpracované výkresové
dokumentace. HĜídel pro navíjení tažného lana je vyrobena z oceli a podle mé výkresové
dokumentace ji zhotovil JiĜí Starý. DĜevČné díly pro základnu a nosný prvek pro snímaþe
polohy byly po tvarovém opracování povrchovČ upraveny šedou barvou.
4.1. Výtahová šachta
Základ výtahové šachty tvoĜí dolní panel, horní panel a 4 L profily. Dolní i horní panel
þtvercového pĤdorysu je zhotoven z pĜekližky o rozmČrech 140x140mm a tloušĢce 12mm.
Panely jsou od sebe vzdáleny 940mm. K tČmto panelĤm jsou v každém rohu pomocí vrutĤ
pĜišroubovány hliníkové L profily. Tyto profily o rozmČru 15x15mm jsou 1000mm dlouhé a
mají zlatou povrchovou úpravu. Vzniklá konstrukce tvoĜí dostateþnČ tuhý nosný základ pro
vybavení ostatními funkþními þástmi þi díly. Na þelní stČnČ konstrukce jsou k vnitĜním
stranám zlatých hliníkových profilĤ ještČ pĜišroubovány 2 ploché I profily stĜíbrné barvy
stejné délky jako hliníkový profil L. SĜíbrný I profil na pravé stranČ konstrukce slouží jako
nosný prvek pro umístČní ovládacích prvkĤ. StĜíbrný profil na levé stranČ konstrukce pouze
dotváĜí optickou symetrii þelní stČny. Délka profilu I po pravé stranČ je rovnomČrnČ rozdČlena
do šesti úsekĤ, které pĜedstavují jednotlivá patra. V úrovni každého patra je do I profilu
zabudován displej, tlaþítko a 2 LED. Tyto prvky jsou nutné k signalizaci a ovládání kabiny
výtahu a jsou zabudovány tak, že tvoĜí s povrchem profilu jednu rovinu. Vodící lišty, které
„vedou“ kabinu pĜi pohybu, tvoĜí dva hliníkové T profily. Lišty jsou ukotveny mezi horní a
dolní panel zapuštČním do neprĤchozí díry. UmístČní T profilĤ je podmínČno velikostí kabiny,
která je umístČna uprostĜed þelní stČny, lícuje s její rovinou a je vedena mezi tČmito T profily.
Dalším prvkem je smrková lišta o rozmČrech 17x10mm a délce 940mm. TvoĜí spojnici mezi
dolním a horním panelem, je umístČna cca v jejich stĜedu a upevnČná je podobnČ jako T
profily. Tato lišta slouží jako nosný prvek pro optické snímaþe polohy. Šachta je dále
vybavena protizávažím, umístČným v zadní þásti. Vodící ocelové lanko o prĤmČru 1,5mm
pro závaží je napnuto a ukotveno v dolním i horním panelu. Protizávaží pohybující se po
ocelovém lanku je z oceli a má hmotnost odpovídající pĜibližnČ hmotnosti kabiny. V polovinČ
výšky šachty jsou pro zlepšení tuhosti vodících lišt a celé konstrukce vloženy výztuhy.
4.2. Pohonná jednotka
Na horním panelu je umístČna pohonná jednotka. HĜídel pro navíjení tažného lana
vyrobený z oceli je svým tvarem pĜizpĤsoben pro uložení do ložisek a pro optimální navíjení
tažného lana. Z dĤvodu úspory hmotnosti je hĜídel þásteþnČ dutý. Kluzná pouzdra 10x10mm
jsou upevnČna v úchytech z plexiskla tl.10mm. Tyto úchyty byly zhotoveny dle výkresové
dokumentace, firmou Valter Špalek. Úchyty jsou na horním panelu umístČny a pĜišroubovány
tak, aby hĜídel byl pĜímo nad tČžištČm kabiny. Pod hĜídelem je v horním panelu vyvrtaná díra
prĤmČru 25mm pro prĤchod tažného lana. Motor, jako hnací jednotka kabiny, byl zakoupen
jako finální výrobek vþetnČ zabudované pĜevodovky. Proti protáþení je zafixován
mechanickou zábranou dovolující mírný pohyb do stran. PĜenos kroutícího momentu motoru
na navíjecí hĜídel je realizován danou konstrukcí obou hĜídelĤ.
- 12 -
© Copyright, Martin Kresta 2008
4.3. Kabina a protizávaží
Kabina je zhotovena z kouĜového plexiskla tl.2mm a má tvar kvádru o rozmČrech
70x70x90 mm. V pĜední stČnČ jsou kruhové otvory pro tlaþítka a jeden obdélníkový otvor pro
displej a LED. Ve spodní stČnČ je nČkolik malých dČr pro lepší zvukový efekt reproduktoru. V
zadní stČnČ kabiny je otvor pro vyvedení 5-ti žilového plochého kabelu a celá zadní stČna je
odnímatelná pro montáž elektroniky. Na každé boþní stČnČ jsou pĜilepeny dva vodící
hliníkové L profily a na zadní stranČ jeden T profil pro pĜerušování svČtelných závor
optických þidel. Lano je ke kabinČ pĜipevnČno pomocí snadno rozebíratelného šroubového
spoje. Hmotnost celé kabiny i s elektronikou je cca 120g. Protizávaží je zhotoveno ze tĜí
ocelových kvádrĤ o rozmČrech 10x10x50mm, ve kterých jsou vyvrtány díry pro ocelové
vodící lanka a pro závČs. Vzhledem ke složitosti výroby nejsou v kabinČ ani ve výtahové
šachtČ realizovány dveĜe. K signalizaci otevĜených þi zavĜených dveĜí jsou tedy použity LED.
4.4. Stabilita
Celá konstrukce je vzhledem k výšce a rozmČrĤm podstavy pomČrnČ nestabilní, proto
je vhodné spojit dolní panel s pevnou podložkou, nebo celou konstrukci opĜít o svislou oporu.
4.5. Technické parametry
RozmČry šachty (VxŠxH) ………1000x155x155 mm
RozmČry kabiny (VxŠxH)………90x70x70 mm
Hmotnost kabiny………………...cca 120 g
Poþet pater……………………….6
Rychlost kabiny…………………0,075 m/s
Otáþky hĜídele…………………...95 rpm
PĜíkon motoru……………………0,25W
Napájecí napČtí…………………..12-20V AC/DC
Proudový odbČr………………….200-300mA
PĜíkon celého modelu……………cca 3-4,5W
- 13 -
© Copyright, Martin Kresta 2008
5. ELEKTRONIKA
Elektronika je þlenČna do nČkolika funkþních blokĤ, jak je patrno z blokového
schématu na obr.1. PĜi výrobČ desek plošných spojĤ (dále jen DPS) se kladl dĤraz na
mechanické pĜizpĤsobení pro montáž tČchto DPS. V naprosté vČtšinČ je použita SMD
technologie pro menší rozmČry. Na DPS s hlavním Ĝídícím mikroprocesorem je použitá
dvouvrstvá deska. Všechny DPS byly vyrobeny leptáním v roztoku FeCl3. Obrazec spojĤ byl
vytištČn na laserové tiskárnČ a na kuprextit pĜenesen nažehlením. Pro propojení jednotlivých
DPS byly použity vícežilové ploché kabely a samoĜezné konektory. V celém modelu výtahu
je celkem 15 DPS. Celá elektronika byla navržena pĜímo pro tento model, pouze elektronická
pojistka je pĜevzatá a upravená.
obr.1-blokové schéma elektroniky
- 14 -
© Copyright, Martin Kresta 2008
5.1. Zdroje
Základ zdroje pro motor tvoĜí klasický integrovaný tĜíbodový stabilizátor TL7806.
Tento je napájen pĜímo z napájecího konektoru pĜes diodový dvoucestný usmČrĖovaþ,
paralelnČ zapojený vyhlazovací elektrolytický kondenzátor C1 22µF a filtraþní keramický
kondenzátor C2 100ȘF. Na výstupních svorkách jsou opČt paralelnČ zapojeny kondenzátory
C3 100ȘF a C4 100µF – viz obr.2. Tento zdroj má na svém výstupu stabilizované napČtí 6V.
Vzhledem k malé proudové zátČži tohoto zdroje (cca 50mA) je stabilizátor s malým
chladiþem pĜímo na DPS. Zdroj pro
procesor a periférie je témČĜ shodný se
zdrojem pro motor, jen je použit stabilizátor
TL7805. Vzhledem k vyššímu proudovému
odbČru je stabilizátor vyveden z DPS a je
upevnČn na jeden z hliníkových L profilĤ,
který slouží jako chladiþ.
obr.2 – zapojení stabilizátoru
5.2. Elektronická pojistka
Výstup zdroje pro motor je
zapojen
na
vstup
dvojbranu
elektronické pojistky. Tato pojistka má
za úkol odpojit napájení motoru
v pĜípadČ pĜetížení kabiny nebo
mechanické poruchy. Základ pojistky
tvoĜí MOS-FET tranzistor T2, který je
zaĜazen v kladné vČtvi sériovČ se
zátČží a tím rozpíná nebo spíná obvod viz obr.3. Tento tranzistor rovnČž plní
funkci snímaþe proudu, úbytek napČtí
na T2 je úmČrný protékajícímu proudu.
Tento úbytek je vyhodnocován PNP
tranzistorem T1 jehož napČtí UBE je
dáno souþtem napČtí na tranzistoru T2,
shottkyho diodČ D2 (0,3V) a napČtí na
trimru R7. PĜekroþí-li proud zátČží
nastavenou mez, úbytek napČtí na T2
vzroste natolik, že pootevĜe tranzistor
T1, tím pádem stoupne napČtí na dČliþi
R2,R3 jež je vyveden na Ĝídící
elektrodu T2 a zpĤsobí tím pĜivĜení obr.3 - zapojení pojistky s vyznaþenou dodateþnou þástí
T2. Úbytek na T2 tím ještČ více
stoupne a nastává ĜetČzová reakce. Nakonec je T1 v saturaci a LED1 se rozsvítí. Pojistka má
klopný charakter. Pro „nahození“ pojistky slouží tlaþítko S1, které je zapojeno mezi bázi a
emitor tranzistoru T1 a stiskem tlaþítka zpĤsobí úplné zavĜení tranzistoru T1 vlivem nulového
napČtí UBE. Zenerova dioda D1 slouží jako zdroj napČtí pro napájení pojistky a J-FET
tranzistor T3 jako proudový zdroj. Citlivost pojistky se nastavuje trimrem R7. PĜi testování
pojistky nastal problém pĜi rozjezdu a zastavení motoru. Pojistka je velmi citlivá na napČĢové
- 15 -
© Copyright, Martin Kresta 2008
i proudové špiþky a proto nemohla být nastavena na dostateþnou citlivost. Tento problém byl
dodateþnČ vyĜešen PNP tranzistorem T4 ve spínacím režimu který je zapojen paralelnČ
k tlaþítku S1. Báze T4 je pĜipojována pĜes rezistor na kladné napČtí prostĜednictvím optoþlenu
OK1. Tento optoþlen je pĜímo spínán mikroprocesorem. V dobČ rozjezdu a zastavení je tedy
pojistka deaktivována procesorem. Význam pojistky spoþívá v ochranČ vinutí motoru proti
spálení. V pĜípadČ pĜetížení pojistka odpojí napájení. Po odstranČní poruchy musí obsluha
ruþnČ „nahodit“ pojistku stiskem tlaþítka.
5.3. NapČĢový supervisor
Napájecí napČtí pro procesor je nutno hlídat supervisorem. Ten v pĜípadČ poklesu
napČtí vygeneruje reset pro oba mikroprocesory. Je tvoĜen integrovaným obvodem TL7705 –
viz obr.4. Tento obvod je pĜímo urþen k tomuto použití a je dodáván ve více variantách pro
rĤzná napČtí. Pro lepší pochopení uvádím pĜeklad úryvku z katalogového listu: TL77xx je
integrovaný obvod hlídající napájecí napČtí. Je speciálnČ navržen pro použití
s mikroprocesory. BČhem provozu testuje napájecí napČtí a drží výstup RESET aktivní tak
dlouho, dokud napČtí nedosáhne pĜedepsané
hodnoty. PĜivedení log0 na vstup NRESIN1 má
stejný efekt. Pro zajištČní provedení resetu má
TL77xx vnitĜní zpoždČní, které zpozdí návrat
výstupu RESET do neaktivního stavu. Toto
zpoždČní je dáno hodnotou kondenzátoru na
vstupu TIMEC Další externí kondenzátor musí
být zapojen mezi výstup REF a zem pro redukci
vlivu rychlých zmČn napájecího napČtí.
obr.4- zapojení napČĢového supervisoru
5.4. Elektrický pohon
ěízení motoru obstarává obvod L293D – viz obr.5, který je vhodný pro Ĝízení
stejnosmČrných motorĤ. UmožĖuje pomocí
logických vstupĤ spínat indukþní zátČž a
zároveĖ pomocí logických vstupĤ pĜepólovat
výstupní napČtí. Obvod je napájen jednak
napČtím digitálních úrovní a jednak napČtím,
které poskytuje na výstupu. Díky svým
parametrĤm je velice vhodný pro realizaci PFM
regulace otáþek motoru a umožĖuje tím plynulý
rozjezd a zastavení kabiny. Jedinou nevýhodou
tohoto obvodu je pomČrnČ velká klidová
spotĜeba. Jako pohon byl použit stejnosmČrný
elektromotor 5V/100mA se zabudovanou
pĜevodovkou. Otáþky bez zátČže jsou cca
110/min. Napájení motoru je však zvýšeno na
6V pro vČtší výkon. Proud v zátČži nepĜesahuje
50mA. Proud pĜi zablokování hĜídele je cca obr.5 – zapojení obvodu L293D
180mA, elektronická pojistka vypíná pĜi proudu
80mA.
1
slouží k manuálnímu resetu.
- 16 -
© Copyright, Martin Kresta 2008
5.5. Displej
V každém patĜe je 7-mi segmentový LED displej, který
þíselnČ zobrazuje aktuální polohu kabiny výtahu. Segmenty jsou
zapojeny do paralelních skupin tak, že jeden pin mikroprocesoru
ovládá celou skupinu 6-ti segmentĤ. NapĜíklad port P1.6 ovládá
segment „a“ na všech 6-ti displejích –viz obr.6. Jedna paralelní
skupina segmentĤ má odbČr 30-40mA, proto musí být spínána pĜes
tranzistor.
5.6. Tlaþítka
Tlaþítka slouží pro pĜivolávání výtahu. Šest tlaþítek je
pĜipojeno na piny P2.2 – P2.7 Ĝídícího mikroprocesoru. Stiskem
obr.6 – zapojení
tlaþítka je pĜímo na port pĜivedena log1 (5V) . PĜi uvolnČní tlaþítka
segmentu „a“
zajišĢuje log0 (0V) tzv. pull-down rezistor 5,6kȍ pĜipojující pin na
zem.
5.7. LED
V celé šachtČ výtahu je celkem 12
signalizaþních LED. V každém patĜe jedna þervená a
jedna zelená. Pro úsporu pinĤ mikroprocesoru je každá
dvojice ovládána jen jedním pinem portu 3 –viz obr.7.
Log 1 otvírá pĜes rezistor R1 NPN tranzistor T1 a
rozsvící tím þervenou LED. T2 je zavĜený. V pĜípadČ
log0 se naopak otvírá T2 a T1 se zavĜe. Možná vás
pĜekvapila rozdílná hodnota R1 a R2. To je dáno tím,
že v pĜípadČ log1 se uplatní pull-up rezistor ve vnitĜní
struktuĜe procesoru (cca 40kȍ). To znamená
RB=R1+RPULL-UP. Tranzistor T3 pak slouží k rozsvícení
nebo zhasnutí LED a je spoleþný pro všech 6 dvojic.
Všech 12 LED tedy využívá pouze 7 pinĤ procesoru.
obr.7-zapojení signalizaþních LED
5.8. Elektronika v kabinČ
Elektronika v kabinČ zprostĜedkovává komunikaci mezi uživatelem v kabinČ a celým
Ĝídícím systémem výtahu. Základem je mikroprocesor, který komunikuje s hlavním
procesorem prostĜednictvím sériové linky. Osm tlaþítek a displej jsou pĜipojeny k pinĤm
procesoru obdobnČ jako tyto periférie ve výtahové šachtČ. Signalizaþní LED jsou pĜipojeny
pĜímo, každá k jednomu pinu. Reproduktor pro generování tónu je ovládán jedním pinem pĜes
PNP tranzistor ve spínacím režimu. Celá elektronika vþetnČ tlaþítek, displeje i LED je
osazena na jedné DPS, která je pĜizpĤsobená pro montáž do kabiny. Reproduktor je vyveden a
pĜipevnČn na spodní þást kabiny.
- 17 -
© Copyright, Martin Kresta 2008
5.9. OdĤvodnČní použitých souþástek
Zdroje:
C1 2200µF – Slouží pro vyhlazení usmČrnČného napČtí v pĜípadČ napájení stĜídavým napČtím.
C2,C3 100ȘF – Filtrace VF rušení (hodnotu udává výrobce)
C4 100 µF – K pokrytí proudových špiþek napájeného zaĜízení.
Elektronická pojistka :
Celé zapojení, vþetnČ hodnot použitých souþástek, bylo pĜevzato z již neexistující webové
stránky. Tranzistor T4 pracuje ve spínacím režimu2, proto byl vybrán tranzistor s velkým
zesílením BC847C (h21min = 400). Rb je zvolen pouze 1kȍ aby se T4 i pĜi malém UBE
bezpeþnČ otevĜel a fungoval jako tlaþítko. OK1 je optoþlen KP4010-B s velmi vysokým
þinitelem CTR ( k úplnému otevĜení dochází již pĜi vstupním proudu cca 3mA), to je dĤležité,
aby mohl být optoþlen spínán pĜímo s mikroprocesoru.
NapČĢový supervisor:
Obvod TL7705 byl vybrán jako dostupné Ĝešení automatického resetu. Ostatní souþástky
udává výrobce v katalogovém listu obvodu.
Elektrický pohon:
Obvod L293D mi doporuþil ing.Nálevka, zapojen byl dle katalogového listu. Jako inventor
logických úrovní slouží obvod 74LS04. Motor byl vybrán z nabídky GM elektronic.
Displej:
Pro zobrazování polohy kabiny je použit LED displej se spoleþnou anodou BS A344 - RD
.Jedním segmentem teþe proud IS cca 6mA, a vzniká na nČm úbytek US cca 2V. Od toho je
odvozena hodnota R2 .
R2 =
U R 2 U CC − U S
5−2
=
=
= 83,3 Ÿ R 2 = 80Ω
I R2
6 ⋅ IS
6 ⋅ 0,006
Tranzistor T1, BC857C pracuje v spínacím režimu. Maximální hodnota RB je vypoþtena dle
následujícího vztahu:
RB max =
5 − 0,6
4,4
U RB U CC − U BE
=
=
=
= 48888 Ÿ RB max = 48kΩ
6 ⋅ 0,006 9 ⋅10 −5
I CE
I B min
400
h21min
RB byl zvolen 10kȍ.
2
jako elektronický spínaþ nahrazuje tlaþítko S1
- 18 -
© Copyright, Martin Kresta 2008
LED:
Pro dostateþný svit LED je vhodný proud cca 15mA. Od této hodnoty jsou dopoþteny
hodnoty odporĤ.Všechny tranzistory pracují ve spínacím režimu, proto jsou použity NPNBC847C a PNP-BC857C. Odpory R1,R2 a R5 jsou odpory omezující bázový proud, a jsou
vypoþteny z následujících vzathĤ:
RB1max =
U RB1 U CC − U BE 5 − 0,6
4,4
=
=
=
= 117333 Ÿ RB1max = 117 kΩ
0,015 3,75 ⋅ 10 −5
I CE
I B min
400
h21min
RB1 byl zvolen 50kȍ, Protože je však tranzistor T1 spínán log1 , uplatní se pull-up rezistor ve
vnitĜní struktuĜe mikroprocesoru. Tento rezistor má cca 40kȍ a je Ĝazen v sérii s R1, proto
výsledná hodnota rezistoru R1 je 10kȍ.
RB 2 max =
U RB 2 U CC − U BE 5 − 0,6
4,4
=
=
=
= 117333 Ÿ RB 2 max = 117 kΩ
0,015 3,75 ⋅ 10 −5
I CE
I B min
400
h21min
R2 byl zvolen 56kȍ.
RB 5 max =
U RB 5 U CC − U BE
5 − 0 ,6
4,4
=
=
=
= 19555 Ÿ RB 2 max = 20 kΩ
6 ⋅ 0,015 2.25 ⋅ 10 − 4
I CE
I B min
400
h21 min
R5 byl zvolen 10kȍ.
Pro omezení proudu diodami slouží odpory R3 a R4
R=
U R U CC − U D
5−2
=
=
= 200 Ÿ R3, R 4 = 180 Ω
IR
ID
0,015
- 19 -
© Copyright, Martin Kresta 2008
6. SOFTWARE
Výtah pĜedstavuje složité zĜízení, jehož þinnost je nutno elektronicky Ĝídit. K tomuto
Ĝízení se nejlépe hodí bućto programovatelný automat PLC nebo mikroprocesor. Tyto
moderní systémy dnes zcela vytlaþují zastaralé reléové obvody. UmožĖují bezpeþnČjší,
pĜesnČjší a komfortnČjší Ĝešení a celkovČ zvyšují efektivitu využití výtahu.
Pro Ĝízení modelu výtahu byl vybrán mikroprocesor AT89S52 firmy Atmel.
V zhledem k zachování co nejmenších rozmČrĤ a snadnČjšímu návrhu DPS bylo poušito SMD
pouzdro TQFP44. Hlavními kritérii pro výbČr byla podpora ISP programování, podpora
sériové komunikace a dostateþný poþet digitálních vstupnČ/výstupních bran. Pro konkrétnČjší
pĜedstavu uvádím tabulku se základními údaji.
6.1. Atmel
AT89C51 AT89S52
Firma Atmel vznikla roku 1984 a zabývá
se vývojem a výrobou mikroprocesorĤ. AT89S52
je klonem dobĜe známého CISC procesoru
AT89C51, jehož základ tvoĜí jádro 8051 vyvinuté
firmou Intel. Jak je z tabulky patrné, nová varianta
má vČtší pamČĢ, podporuje ISP programování a má
pĜidán jeden 16-ti bitový þasovaþ, který lze použít
v módu „baudrate generator“ jako generátor hodin
pro sériovou linku. Zkratka ISP – In System
Programing
znamená
možnost
sériového
programování pomocí 4 pinĤ pĜímo v aplikaci.
Toto programování je velmi rychlé a pro
programování SMD procesorĤ témČĜ nezbytné.
6.2. Program
Flash pamČĢ
[kB]
USB
ISP
EEPROM
RAM [B]
fMAX [MHz]
UCC [V]
I/O pinĤ
UART
16-bitový
þasovaþ
Watchdog
SPI
A/D Convertor
4
ne
ne
ne
128
24
4,0-5,5
32
1x
8
ne
ano
ne
256
33
4,0-5,5
32
1x
2x
ne
ne
ne
3x
ano
ne
ne
K tomu aby mohl být procesor použit v konkrétní aplikaci, musí do nČj být nahrán
program. Program je nČjakým zpĤsobem zaznamenaný postup operací, které se mají vykonat,
tedy algoritmus. Ke grafickému znázornČní algoritmu programu slouží takzvaný vývojový
diagram. Vývojový diagram používá pro znázornČní jednotlivých dílþích operací speciální
symboly a šipky, které znázorĖují posloupnost. Programy pro mikroprocesory mohou být
psány bućto v jazyce symbolických adres (assembleru) nebo ve vyšších programovacích
jazycích, napĜ. C. Takto napsaný zdrojový kód je kompilerem pĜeložen do strojového kódu,
HEX souboru. Tento HEX soubor se pak do mikroprocesoru nahraje prostĜednictvím
programátoru pĜipojeného k PC pĜes sériové rozhraní COM nebo USB. Konkrétní program,
který zajišĢuje Ĝízení modelu výtahu je pomČrnČ složitou posloupností a k jeho snadnČjšímu
pochopení mohou pomoci vývojové diagramy a komentovaný výpis programu.
Model je Ĝízen dvojicí výše uvedených procesorĤ. Hlavní Ĝídící procesor je oznaþen
jako MASTER a procesor v kabinČ jako SLAVE. Základem celého programu jsou dva
registry "ap" (aktuální poloha) a "zp" (žádaná poloha), které v sobČ nesou þíselnou hodnotu
(1-6), která odpovídá aktuální/žádané poloze výtahu. Úkolem programu je uvádČt obsah
registrĤ do rovnováhy a tím vlastnČ plnit požadavek obsluhy. Program musí dodržovat urþitá
pravidla a zároveĖ komunikovat se všemi perifériemi. Výsledný program se tedy skládá z
mnoha rutin a subrutin, které jsou volány z urþitých míst posloupnosti. Jsou to napĜíklad
rutiny, které zajišĢují tyto funkce: komunikace s þidly, komunikace s displejem, komunikace s
- 20 -
© Copyright, Martin Kresta 2008
tlaþítky, plynulý rozjezd, plynulé zastavení, generování tónu, kodér
pro odesílaná data sériovým kanálem, dekodér pro data pĜijata
sériovým kanálem, obsluha sériové linky apod. U obou
mikroprocesorĤ je použit jako generátor hodinového signálu
krystal s frekvencí 4,0MHz.
6.3. MASTER
Program v procesoru MASTER funguje následovnČ –viz obr.8. Po
hardwarovém resetu se provedou potĜebná nastavení pĜerušovacího
systému, sériové linky a þasovaþĤ. Dále se nastaví výchozí
hodnoty nČkterých registrĤ a pĜíznakových bitĤ. Po nastavení
zaþíná samotný program návČštím start. Nejprve se testují þidla pro
zjištČní aktuální polohy kabiny ap (rutina sentest). NáslednČ je
zjištČná pozice zobrazena na displejích ve všech patrech (rutina
zobraz) a odeslána sériovou linkou do procesoru SLAVE (rutina
posli). Nyní je systém pĜipraven a þeká na 1. požadavek. V cyklu
se testují všechna pĜivolávací tlaþítka tak dlouho, dokud není
nČkteré stisknuto, nebo není jiný požadavek (rutina buttest).
Výsledkem této rutiny je žádaná poloha zp. Tento požadavek se
vyhodnocuje v rutinČ lift. Ta má za úkol dopravit kabinu výtahu do
požadovaného patra a konþí v okamžiku zastavení kabiny.
Následuje kontrola zastavení v patĜe, otevĜení dveĜí a þekání na
nástup/výstup (4 sekundy). To zajišĢuje rutina ready. Po ukonþení
této rutiny se vždy kontroluje, zda-li není v pamČti uložen nČjaký
požadavek. Pokud ano, je požadavek z pamČti vyhodnocen,
v opaþném pĜípadČ se program
vrací na návČští start.
V pĜerušovacím systému procesoru je povoleno pĜerušení od
sériové linky a od timeru 0. Souþástí programu jsou tedy i obsluhy
tČchto pĜerušení.
6.3.1. Nastavení
.
$
)
/
, 0
1
,
"/22
22 "
+
1
3 !
Po resetu je nutné nakonfigurovat hardwarové periférie
procesoru. K tomu slouží takzvané speciální funkþní registry (dále
jen SFR). Tyto registry jsou 8-mi bitová pamČĢová místa. NČkteré
registry jsou adresovatelné bajtovČ i bitovČ, nČkteré pouze bajtovČ.
$4%
Registr IE povoluje pĜerušení od sériové linky a od timeru 0.
PĜestože je použit i timer 2, jeho pĜerušení nesmí být povoleno.
Registry PCON a SCON slouží k nastavení sériového kanálu,
registr TMOD nastavuje mód timeru 0. Pro urþení pĜenosové
rychlosti sériové linky je použit timer 2 v režimu
!
baudrategenerator. Pomocí registrĤ TH2,TL2,RCAP2H a RCAP2L
je nastavena výchozí a obnovovací hodnota pro horní a spodní bajt
16-ti bitového timeru. Do tČchto registrĤ je nastavena hodnota
FFCCHEX což odpovídá pĜenosové rychlostí cca 2400 B/s. PĜíznakové bity pamČti, pohybu,
otevĜených dveĜí apod. jsou vynulovány.
obr.8-program MASTER
- 21 -
© Copyright, Martin Kresta 2008
6.3.2. Test þidel
Testování þidel zajišĢuje rutina sentest, která postupnČ testuje þidla v patrech 0-5.
K tomu je použito vČtvení s pomocí instrukce jnb. Je-li kabina v patĜe, do registru ap se
nastaví pĜíslušná hodnota (1-6) a pĜíznakový bit vpatre. Pokud žádné þidlo v daný okamžik
nezaznamenalo kabinu, tedy všechny þidla mají na svém výstupu log1, rutina sentest, konþí
aniž by zmČnila obsah ap. Pouze bit vpatre je vynulován.
6.3.3. Test tlaþítek
Testování pĜivolávacích tlaþítek obstarává rutina buttest. ZároveĖ však taky
kontroluje, zda není uložen požadavek v pamČti, anebo nebyl-li zadán požadavek z kabiny.
Testování se provádí v cyklu tak dlouho, dokud nenastane požadavek. Nejprve se testují
pĜíznaky požadavku z kabiny a požadavku v pamČti (F a F1), je-li jeden z tČchto pĜíznakĤ
nastaven, opustí se cyklus, pĜíznak je vynulován a rutina konþí (požadavek již byl vložen do
registru zp).Jestliže oba tyto pĜíznaky jsou v log0, cyklus pokraþuje testováním všech tlaþítek.
Je-li nČkteré tlaþítko stisknuto, opustí se cyklus a do registru zp se nastaví pĜíslušná hodnota
(1-6). Po opuštČní tohoto cyklu a následném ukonþení rutiny buttest vždy následuje rutina lift,
která pĜedstavuje vyhodnocování požadavku. Proto cyklus nemĤže být ukonþen dĜíve, než je
znám požadavek.
6.3.4. Vyhodnocení požadavku
Vyhodnocení požadavku je po stránce softwaru nejkomplikovanČjší þástí. ZajišĢuje jej
rutina lift, která obsahuje ještČ další takzvané subrutiny. Do rutiny lift vstupují registry ap a
zp, a jejím cílem je uvést obsahy tČchto registrĤ do rovnováhy. Nejprve se znovu volá rutina
sentest pro ovČĜení aktuální polohy. Dále se rozsvítí všechny þervené signalizaþní LED. Nyní
se pomocí instrukce subb odeþte od obsahu registru ap obsah registru zp. Je-li výsledek
nulový3, rutina konþí. Je-li výsledek záporný, je nastaven smČr pohybu nahoru, pokud je
výsledek kladný, smČr pohybu je dolĤ. Nyní se zavolá subrutina jed pro plynulý rozjezd
kabiny. BČhem jízdy se v cyklu testují þidla rutinou sentest a sleduje se zmČna aktuální
polohy. Pokud je tato zmČna zaznamenána je nový údaj zobrazen, odeslán do kabiny a
porovnává se s žádanou polohou. Dále se v cyklu kontroluje správný smČr pohybu a testují se
tlaþítka subrutinou savetest4. Je-li zaznamenán špatný smČr pohybu kabiny, pomocí rutiny
otocka se provede zmČna smČru. Rovnají-li se obsahy registru ap a zp, cyklus konþí.
Následuje rutina stuj pro plynulé zastavení. Nakonec se provede zobrazení aktuální pozice na
displeji a tím rutina lift konþí.
Subrutina otocka pouze volá rutinu stuj, neguje bit smer a volá rutinu jed.
6.3.5. Nástup/výstup
Po zastavení kabiny v patĜe se provádí rutina ready. Nejprve se opČt provede rutina
sentest, kontroluje se správnost zastavení v patĜe a nastaví se pĜíznakové bity libit a rebit.
PĜíznak libit rozsvČcuje displej v kabinČ a pĜíznak rebit otvírá v kabinČ dveĜe. V pĜípadČ
zastavení kabiny mezi patry je tedy rebit vynulován, a je nastaven další pĜíznakový bit gobit
který rozsvítí v kabinČ þervenou LED, tedy dveĜe zĤstanou zajištČny. Po nastavení
3
4
Zamená, že se kabina právČ nachází v patĜe,do kterého byla pĜivolána
PĜípadný požadavek je uložen do pamČti.
- 22 -
© Copyright, Martin Kresta 2008
pĜíznakových bitĤ se volá rutina posli pro odeslání aktuálního stavu do kabiny. Pokraþuje se
otevĜením pĜíslušných dveĜí ve výtahové šachtČ. To zajišĢuje rutina ledka. Dále je volána
rutina wait4 pro þasové zpoždČní cca 4sekundy. Protože je toto zpoždČní realizováno
þasovaþem, mohou být bČhem tohoto zpoždČní testovány tlaþítka. Po 4 sekundách se všechny
piny ovládající LED nastaví do log1 (svítí þervená LED), avšak zároveĖ jsou pinem lede
všechny LED zhasnuty. Nastavení všech LED do þervené se tedy provádí pouze proto, aby pĜi
pĜíštím rozsvícení již nemusely být nastavovány. NáslednČ se vynulují pĜíznaky gobit a rebit
viz.výše, a aktuální stav je odeslán. Tím rutina ready konþí.
6.3.6. Kontrola pamČti
BČhem vyhodnocování požadavku, tedy bČhem trvání rutiny lift a ready, mohl být do
pamČti uložen nový požadavek, nebo bČhem vykonávání rutiny ready mohl pĜijít nový
požadavek obsluhy z kabiny. Proto po vyhodnocení aktuálního požadavku jsou tyto možnosti
kontrolovány. Testuje se bit membit1, je-li nastaven, znamená, že v pamČti je požadavek a
pokraþuje se na návČští loading. Pokud není nastaven skáþe se na návČští start a celý cyklus se
opakuje. Za návČštím loading se ještČ kontroluje pĜíznak požadavku z kabiny F , je-li tento
pĜíznak nastaven, následuje skok na start, protože požadavek obsluhy z kabiny má vyšší
prioritu než požadavek v pamČti. Pokud je pĜíznak F nulový, provede se pĜesun hodnoty
z první pamČĢové pozice mp1 do registru zp. PĜípadná druhá a tĜetí pamČĢová pozice se
pĜesunou do nižší úrovnČ a uvolní se tak tĜetí pamČĢová pozice mp3. NáslednČ se nastaví
pĜíznak F1 a skáþe se na start.
6.3.7. Odeslání dat
Rutina která zajišĢuje odeslání dat z mikroprocesoru MASTER do mikroprocesoru
SLAVE sériovou linkou je nazvána posli. Odesílá se vždy jen jeden bajt, který v sobČ nese
aktuální informace o pozici kabiny a o stavu výtahu. Odesílá se registr statbyte2, který se
nachází v bitovČ adresovatelné oblasti pamČti. Do dolní tetrády tohoto bajtu je vložena
hodnota z registru ap a horní tetráda obsahuje tĜi pĜíznakové bity. PĜíznak pohybu kabiny gf2
je nastavován podle pĜíznaku gobit. PĜíznak otevĜení dveĜí kabiny rf2 podle pĜíznaku rebit a
pĜíznak rozsvícení displeje v kabinČ lf2 podle pĜíznaku libit. Tyto bity jsou nastaveny
prostĜednictvím carry a instrukce mov. Nakonec se statbyte2 pĜesune do registru sbuf a
automaticky se zahájí pĜenos. Tím rutina posli konþí.
6.3.8. Plynulý rozjezd
Plynulý rozjezd je realizován pomocí softwarovČ generovaného PFM signálu, který
spíná napájení motoru. To znamená, že v cyklu je vždy generována konstantní doba log1 na
výstupu, která se stĜídá s postupnČ se zkracující dobou log0. To má za následek plynulé
zvyšování otáþek motoru. Nakonec je doba log0 zanedbatelnČ krátká a motor tedy dosahuje
plných otáþek. Nejprve se v rutinČ vynuluje bit fuse, þímž se deaktivuje elektronická pojistka.
Nastaví se pĜíznak gobit a zavolá se rutina posli. Do registru zero se nastaví výchozí hodnota
200D . Nyní zaþíná cyklus ve kterém se nejprve nastaví bit mot, který ovládá motor, poté se
volá subrutina on. Po návratu z této subrutiny se dekrementuje registr zero, jeho hodnota se
zkopíruje do pomocné promČnné pom a vynuluje se bit mot. Nakonec se volá subrutina off ,
která zajišĢuje dobu generování nízké úrovnČ. Poté se celý cyklus opakuje. Cyklus se opakuje
tak dlouho dokud není v registru zero nulová hodnota. Dále se aktivuje pojistka nastavením
bitu fuse a rutina jed konþí.
- 23 -
© Copyright, Martin Kresta 2008
6.3.9. Plynulé zastavení
BrzdČní je realizováno podobným cyklem jako rozjezd, pouze doba tOFF se nezkracuje,
ale prodlužuje. To je dáno tím, že v cyklu se registr zero inkrementuje z hodnoty 0 až na
hodnotu 255D. PĜed vstupem do cyklu se opČt deaktivuje pojistka a souþasnČ se kontroluje zda
již není kabina v klidu. Po ukonþení cyklu se vynuluje pĜíznak gobit a aktivuje se elektronická
pojistka. Rutina stuj konþí.
6.3.10. Subrutina on a off
Subrutina on slouží k þasování konstantní doby tON. K tomu je použita þasová smyþka
s použitím instrukce djnz. Do registru puls je vložena hodnota 166D, která je postupnČ
dekrementována. Což znamená zpoždČní 1ms. Doba tON. tedy trvá 1milisekundu.
Subrutina off funguje podobnČ, avšak doba tOFF je závislá na tom, pokolikáté se
cyklus provádí, proto do této subrutiny vstupuje promČnná pom a ta je pak ve smyþce
dekrementována. Pro „protažení“ je ve smyþce navíc zaĜazeno zpoždČní 6 cyklĤ. Takže jedno
opakování cyklu ve kterém se jednou dekrementuje registr pom trvá 8 cyklĤ, což je pĜi
použitém krystalu s frekvencí 4,0MHz doba 24µs. Subrutina off je tedy schopna realizovat
zpoždČní o délce 24µs až 6,12ms. Tento rozsah se pĜi testování ukázal jako nejvhodnČjší pro
optimální prĤbČh rychlosti rozjezdu a zastavení.
6.3.11. Zobrazení
Zobrazení
Pro zobrazení aktuální Port:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
polohy kabiny slouží rutina Segment: NC a
b
c
d
e
f
g
zobraz. Obsah registru ap je
0
1
0
0
0
0
0
0
1
þíselnČ
zobrazen
na
7-mi
1
1
1
0
0
1
1
1
1
segmentovém displeji. V rutinČ se
2
1
0
0
1
0
0
1
0
hodnota registru ap pĜesune do
3
1
0
0
0
0
1
1
0
registru R0 a postupnČ se
4
1
1
0
0
1
1
0
0
porovnává s hodnotami 0-6 a
5
1
0
1
0
0
1
0
0
v pĜípadČ rovnosti je do registru
E
1
0
1
1
0
0
0
0
disp vložena hodnota která
odpovídá rozsvícení pĜíslušných segmentĤ.viz tab. Pro hodnoty 0,7-255 je zobrazeno „E“,
které znaþí chybné zjištČní polohy. Pro hodnoty 1-6, je zobrazeno 0-5, pro nulté až páté patro.
6.3.12. Subrutina ledka
Tato subrutina je velmi primitivní. PostupnČ otestuje všechna þidla a v patĜe, ve
kterém se nachází kabina zhasne þervenou a rozsvítí zelenou LED. Po otestování všech þidel
rutina konþí. V pĜípadČ, že kabina nebyla zaznamenána v žádném patĜe, svítí všechny þervené
LED.
6.3.13. ýasování 4 sekundy
ýasování doby otevĜených dveĜí je realizováno pomocí timeru 0 v módu 1. Do 16-ti
bitového þasovaþe je vložena nula, tato nula je postupnČ inkrementována a k pĜerušení
dochází v okamžiku pĜeteþení, tedy po dosažení hodnoty 65 535. Je tedy nastavena nejvČtší
možná doba þasování cca 200ms. Do registru time se vloží hodnota 20, povolí se pĜerušení od
- 24 -
© Copyright, Martin Kresta 2008
timeru 0 a timer 0 se spustí. Dále se v cyklu opakuje volání subrutiny savetest a kontrola
nenulovosti promČnné time. PromČnná time se dekrementuje v obsluze pĜerušení timeru 0.
Cyklus konþí v okamžiku kdy obsah promČnné time je roven nule, tím konþí i subrutina
wait4.
6.3.14. Subrutina savetest
Tato subrutina slouží k testování tlaþítek v dobČ vyhodnocování požadavku a k uložení
pĜípadného dalšího požadavku do správné pamČĢové pozice. Nejprve se postupnČ testují
všechna pĜivolávací tlaþítka, není-li žádné tlaþítko stisknuto rutina konþí, Je-li nČkteré
stisknuto, podobnČ jako v rutinČ buttest se provede pĜiĜazení pĜíslušné hodnoty do registru mp
který pĜedstavuje jakousi mezipamČĢ. NáslednČ se testují pĜíznakové bity membit1, membit2
a membit3. Jsou-li všechny tyto bity nastaveny na log1, známená to, že jsou již všechny 3
pamČĢové pozice obsazené, a rutina konþí. Jinak je hodnota z mezipamČti uložena do nejnižší
volné pamČĢové pozice. PĜed uložením, se však kontroluje, zda hodnota v mezipamČti není
shodná s hodnotami v registrech ap, zp nebo s nižšími pamČĢovými pozicemi, tedy registry
mp1 a mp2. V pĜípadČ, že se tato hodnota shoduje alespoĖ s jednou zmínČnou hodnotou,
požadavek není uložen a rutina konþí. Touto kontrolou je tedy zajištČno, že do pamČti nemĤže
být uložen požadavek shodný s aktuální polohou kabiny, s žádanou polohou kabiny, ani
nemĤže být v pamČti uložen stejný požadavek ve více pamČĢových pozicích. PĜestože je
rutina pomČrnČ obsáhlá, nejdelší možný þas jaký mĤže být vykonávaná je cca 105µs. Jelikož
je perioda pĜerušení timeru 0 nastavena na 200ms, nehrozí, aby v rámci vykonáváni této
rutiny nastalo pĜerušení 2x a následkem toho došlo k chybČ ve vykonávání programu.
6.3.15. Obsluha pĜerušení Timeru 0
Po pĜerušení od Timeru 0 ukazuje program counter na adresu 0BHEX na této adrese
v pamČti programu je zapsána instrukce skok na návČští timing. Za tímto návČštím následuje
obsluha pĜerušení. Nejprve se provede pomocí instrukce push záloha obsahu akumulátoru do
stacku, zakáže se pĜerušení od sériové linky a zastaví se timer 0. Dále se provede vynulování
registru þasovaþe a dekrementuje se hodnota v registru time. Je-li po této dekrementaci
hodnota již nulová, zakáže se pĜerušení od timeru 0, povolí se pĜerušení od sériové linky, a
pomocí instrukce pop se provede obnovení hodnoty akumulátoru. V opaþném pĜípadČ se
spustí timer 0, povolí se pĜerušení od sériové linky, a provede se obnovení hodnoty
akumulátoru. PĜíkazem reti pak obsluha pĜerušení konþí.
6.3.16. Obsluha pĜerušení sériové linky
Vektorem pĜerušení sériové linky je adresa 23HEX. Z této adresy program counter
skáþe na návČští uart kde je zapsána obsluha pĜerušení. V obsluze se nejprve provede záloha
obsahu akumulátoru a zakáže se pĜerušení od timeru 0. Nyní se zjišĢuje, zda pĜerušení vzniklo
vlivem ukonþení vysílání, nebo pĜíjmu. V pĜípadČ vysílání se pouze vynuluje pĜíznak
pĜerušení ti, povolí se pĜerušení od timeru 0, obnoví se akumulátor a obsluha pĜerušení konþí.
V pĜípadČ pĜíjmu dat se pĜijatá data zkopírují z registru sbuf do registru statbyte1. Není-li
kabina v daném okamžiku v pohybu, nastaví se pĜíznak požadavku z kabiny F. Dále se dolní
tetráda obsahu registru statbyte1 zkopíruje do registru zp a nastaví tím žádanou polohu. Do
registru time se vloží hodnota 1, proto aby se ukonþilo zpoždČní a požadavek byl ihned
vyhodnocen. Poté se vynuluje pĜíznak pĜerušení ri a povolí se pĜerušení od timeru 0. Obsluha
pĜerušení pak konþí obnovou akumulátoru.
- 25 -
© Copyright, Martin Kresta 2008
Celý program byl vytvoĜen v jazyku symbolických adres assembleru, ve freeware
verzi programu KEIL µvision2. Tento program obsahuje debugger pro odladČní programu.
Výsledný okomentovaný ASM soubor naleznete na pĜiloženém CD-ROM. Okomentovaný
výpis a vývojové diagramy jsou v pĜíloze.
- 26 -
© Copyright, Martin Kresta 2008
6.4. SLAVE
Mikroprocesor SLAVE má za úkol komunikovat s obsluhou v kabinČ prostĜednictvím
signalizaþních LED, displeje, reproduktoru a tlaþítek. Získaná data odesílá do procesoru
MASTER sériovou linkou. Po resetu se opČt nejprve provede nastavení potĜebných
speciálních funkþních registrĤ a výchozích hodnot nČkterých promČnných. V celém programu
se pak v cyklu opakují jen dvČ rutiny. Rutina zobraz – ta je naprosto stejná jako v programu
MASTER, proto nebude znovu popisována a rutina buttest pro testování tlaþítek. Dále
program obsahuje obsluhy pĜerušení od sériové linky a timeru 0. NejzajímavČjší þástí
programu je zĜejmČ generování tónĤ. Pro generování tónu s plynule kolísající frekvencí je
použit timer 0 v módu 2, tedy 8-mi bitový þasovaþ v režimu autoreload.
Nastavení
Po resetu jsou nastaveny SFR a nČkteré promČnné. Nastavení sériové linky a timeru 2
je naprosto stejné jako u mikroprocesoru MASTER, aby byl zajištČn bezpeþnČ fungující
pĜenos dat. Pouze v registru TMOD se nastaví timer 0 do módu 2. Dále je do registru ap
vložena výchozí hodnota 0, pĜíznak libit je vynulován a pĜíznak tibit nastaven.
6.4.1. Testování tlaþítek
Testování probíhá podobnČ jako u procesoru MASTER. PostupnČ se testují všechna
tlaþítka. Pro odstranČní zákmitĤ tlaþítek je po stisku i po uvolnČní tlaþítka realizováno
zpoždČní subrutinou antikmit cca 5ms. Je-li stisknuto nČkteré z tlaþítek 0-5, do registru zp se
vloží pĜíslušná hodnota a pomocí subrutiny posli se odešle do Ĝídícího mikroprocesoru. Tím
rutina buttest konþí. PĜi stisku tlaþítka STOP se do registru zp se vloží hodnota z registru ap a
po odeslání tím zpĤsobí okamžité zastavení kabiny. Je-li stisknuto tlaþítko ZVONEK, nastaví
se do registru TH0 hodnota 255- výchozí hodnota pro timer 0. Dále se do akumulátoru a do
registru reload vloží hodnota 1. Ta urþuje frekvenci pulsování generovaného tónu. Nyní se
spustí timer 0 a þeká se na uvolnČní tlaþítka. NáslednČ je timer 0 zastaven a rutina konþí.
6.4.2. Odeslání dat
Subrutina posli je velmi primitivní. PĜed odesláním se kontroluje zda bylo ukonþeno
pĜedchozí vysílání, pĜípadnČ se þeká na toto ukonþení. K tomu je použit pomocný pĜíznak tibit
– pĜíznak ukonþeného vysílání. Je-li tedy tento bit nastaven pokraþuje se jeho vynulováním a
následnČ se zahájení pĜenos zkopírováním obsahu registru zp do registru sbuf a subrutina
konþí.
6.4.3. Subrutina antikmit
Pro odstranČní zákmitĤ tlaþítek je realizováno zpoždČní cca 5ms pomocí 3
dekrementaþních nevnoĜených smyþek. ýas 5ms se pĜi testování ukázal jako dostateþný. Do
promČnné kmit je vložena hodnota 255, která je postupnČ dekrementována až do hodnoty
nula. To se provede celkem 3x což pĜi použitém krystalu 4,0MHz vytvoĜí zpoždČní onČch
5ms.
- 27 -
© Copyright, Martin Kresta 2008
6.4.4. Obsluha pĜerušení sériové linky
Vektorem pĜerušení sériové linky je adresa 23HEX. Z této adresy program counter
skáþe stejnČ jako u procesoru MASTER na návČští uart kde je zapsána obsluha pĜerušení.
V pĜípadČ pĜerušení vlivem ukonþeného vysílání se pouze vynuluje pĜíznak pĜerušení ti,
nastaví se pĜíznak tibit a obsluha konþí. V pĜípadČ pĜíjmu se zkopírují pĜijatá data z registru
sbuf do registru statbyte1 a volá se subrutina dekoder pro vyhodnocení právČ pĜijatých dat.
Registr statbyte1 se nachází v bitovČ adresovatelné oblasti pamČti, aby bylo možno zjišĢovat
stavy jednotlivých pĜíznakových bitĤ. Po ukonþení subrutiny dekoder se vynuluje pĜíznak
pĜerušení ri a obsluha pĜerušení konþí.
6.4.5. Subrutina dekoder
V této rutinČ se vyhodnocují pĜijatá data a v rámci této rutiny je mimo jiné také
generován tón otevĜení dveĜí. Nejprve se dolní tetráda pĜijatého bajtu, tedy dolní tetráda
registru statbyte1 zkopíruje do registru ap. Dále se pracuje s pĜíznaky obsažené v horní tetrádČ
pĜijatého bajtu. Dle pĜíznaku gf1 se nastaví bit red, ovládající þervenou LED, avšak vzhledem
k tomu že LED svítí pĜi log0, je tento bit nejprve negován. Dále se dle rf1 nastaví bit green,
opČt s pĜedchozí negací. Posledním pĜíznakem je lf1 dle jehož negace se nastaví bit libit, který
ovládá napájení displeje. V pĜípadČ, že pĜi dekódování byla rozsvícena zelená LED, tedy byl
vynulován bit green provede se generování tónĤ „a“ a „d“ pomocí subrutin ah a d a subrutina
dekoder konþí. Jinak rutina konþí bez generování tónu.
6.4.6. Generování tónĤ
Pro akustickou signalizaci dojezdu kabiny do patra a otevĜení dveĜí jsou generovány
tóny „a“ a „d“, každý po dobu cca 0,5sekundy. Generování je zajištČno v cyklu s podmínkou
na konci. V tomto cyklu se stĜídavČ nastavuje a nuluje bit (pin) piez, který je zapojen na
reproduktor. Mezi tČmito zmČnami je realizováno zpoždČní, které urþí délku pĤlperiody
signálu a tím i výšku tónu. ZpoždČní je realizováno jednou þi dvČma dekrementaþními
smyþkami. V cyklu se také inkrementuje poþítadlo, a po dosažení urþité hodnoty je cyklus
ukonþen. Tím je dána doba trvání tónu. Konkrétní hodnoty zpoždČní jsou odvozeny od
frekvence tónu „a1“ – 440Hz a tónu „d1“ – 296Hz.
6.4.7. Obsluha pĜerušení timeru 0
Timer 0 slouží pro generování tónu zvonku. Perioda pĜerušení tohoto timeru udává
pĤlperiodu výsledného tónu. Obsluha pĜerušení je zapsána za návČštím ton kam je program
counter pĜesmČrován z adresy 0BHEX. V obsluze se nejprve neguje bit piez , dekrementuje se
akumulátor a v pĜípadČ že po této dekrementaci není nulový, obsluha konþí. V konkrétním
pĜípadČ se v akumulátoru nachází hodnota 1, takže po dekrementaci bude vždy 0. V tom
pĜípadČ obsluha nekonþí a provede se zvýšení nebo snížení obsahu registru TH0, þímž se
mČní perioda pĜerušení timeru 0 a tím i frekvence generovaného tónu. Obsah TH0 nabývá
hodnot 0-100. V každé obsluze pĜerušení se hodnota mČní o 1. Po dosažení maximální
hodnoty (100) se hodnota snižuje až do dosažení minima(0), pak se opČt zaþne zvyšovat.
Viz.vývojový diagram v pĜíloze.
- 28 -
© Copyright, Martin Kresta 2008
6.5. Výpoþty þasových prodlev
Jako zdroj hodinového signálu pro mikroprocesory jsou použity krystaly s frekvencí
4.0Mhz, to odpovídá periodČ 0,25µsec. Délka cyklu je dána jako dvanáctinásobek periody
hodinového signálu. V našem pĜípadČ tedy 3µsec. Od této hodnoty se pak odvíjí výpoþty
þasových prodlev.
t………….zpoždČní
n…………poþet cyklĤ
Antikmit:
Požadované zpoždČní: 5ms
t
5,0 ⋅10 −3
n=
=
= 1666cyklĤ
3 ⋅10 −6
3 ⋅10 −6
Instrukce DJNZ trvá 2 cykly, potĜebujeme tedy instrukci provést 833x.
1666
= 833 x
2
To zajistíme tak, že 3x za sebou dekrementujeme þíslo 255 až do 0.
Ÿ 3 ⋅ 255 = 765 ≈ 833
Skuteþná hodnota jen pĜibližnČ odpovídá požadované, avšak je zcela dostaþující.
Skuteþná doba zpoždČní: 4,608ms
Wait 4(Timing)
Požadované zpoždČní: 4s
ZpoždČní 4 sekundy je realizováno pomocí 16-ti bitového timeru. Maximální možná doba
þasována tímto timerem je 196,6ms. Proto se v každém pĜerušení dekrementuje registr, jehož
výchozí hodnota je 20. Až je tento registr nulový, konþí þasování.
t = 20 ⋅ 196,6 = 3932 ms
Skuteþná doba zpoždČní: 3,932s
- 29 -
© Copyright, Martin Kresta 2008
7. ZÁVċR
Výsledkem práce je dle pĤvodního plánu funkþní model osobního výtahu. PĜi realizaci
bylo použito mnoho znalostí získaných z odborných pĜedmČtĤ nebo samostudiem. Model
dobĜe ukazuje možnosti Ĝízení mikroprocesorem s jádrem 8051. PĜi vývoji byla nejvČtším
problémem realizace plynulých rozjezdĤ a zastavení. K tomu je možno využít pĜechodového
dČje RC þlánku s vhodnou þasovou konstantou IJ a vhodného napČĢového sledovaþe. Toto
Ĝešení je sice jednoduché po stránce softwaru Ĝídícího procesoru, avšak není možná pozdČjší
softwarová regulace prĤbČhu zastavování þi rozjíždČní. Proto bylo zvoleno modernČjší a
efektivnČjší Ĝízení pomocí PFM. V pĤvodním testovacím zapojení byl motor spínán
výkonovým tranzistorem pĜímo z procesoru, avšak vzhledem k indukþní zátČži motoru byl
tento systém nestabilní. Tento problém byl vyĜešen použitím obvodu L293D, který je pro toto
použití urþen, umožĖuje Ĝízení digitálními signály a svou vnitĜní strukturou eliminuje
negativní vliv proudových špiþek vinutí motoru. Schéma elektronické pojistky bylo pĜevzato
z již neexistující webové stránky.
8. LITERATURA
PĜi vývoji elektroniky i softwaru jsem þerpal z katalogových listĤ použitých souþástek a
z webových stránek týkajících se této problematiky. Katalogové listy poskytují výrobci
souþástek zdarma a jsou k dispozici na pĜiloženém CD-ROM.
MORAWIEC, Martin. Kurz assembler, [online]
<http://programujte.com/index.php?akce=clanek&cl=2005071301-assembler-uvod>
MORAWIEC, Martin. Keil-práce v programu, [online]
<http://programujte.com/index.php?akce=clanek&cl=2005121003-keil-prace-v-programu>
HANKOVEC, David. Popis 8051, [online]
<http://www.dhservis.cz/popis8051.htm>
BEZSTAROSTI, JiĜí. Jednochip-to je ono! [online]
<http://www.bezstarosti.cz/elec/jednochip/jednochip.htm>
ATMEL. Code examples [online]
<http://www.atmel.com/dyn/products/tools.asp?family_id=604#1535>
- 30 -
© Copyright, Martin Kresta 2008
9. PěÍLOHY
9.1. Blokové schéma elektroniky
;
.
"
5
"
<
789#:
1
;
7=5
$6%
$"
:- -
;
>
>
"
:
"?75:
;=15.
1
>
:
"?75:
.
.551
- 31 -
© Copyright, Martin Kresta 2008
9.2. Elektrotechnická schémata
9.2.1. MASTER (Schéma)
- 32 -
© Copyright, Martin Kresta 2008
9.2.2. SLAVE (schéma)
- 33 -
© Copyright, Martin Kresta 2008
9.2.3. Výpis souþástek
MASTER:
R1-R6………………5k6
R7,R16-R22………..10k
R9-R15……………..80R
C1,C2……………….33pF
T1-T8……………….BC857C
Q1…………………..4,000MHz
IC1………………….AT89S52
IC2………………….L293D
IC3………………….74LS04
SLAVE:
R1-R8………………5k6
R9,R18,R19.………..180R
R10-R16……………510R
R17…………………10k
C1,C2……………….33pF
T1…………………...BC857C
Q1…………………...4,000MHz
IC1…………………..AT89S52
DISP………………...HD-A342RD
LED1………………..LED2x5mm,zelená
LED2………………..LED2x5mm,þervená
TL1-TL8…………….tlaþítko, bez aretace, modré
- 34 -
© Copyright, Martin Kresta 2008
9.2.4. Zdroj (schéma)
- 35 -
© Copyright, Martin Kresta 2008
9.2.5. Control (schéma)
- 36 -
© Copyright, Martin Kresta 2008
9.2.6. Sensor (schéma)
- 37 -
© Copyright, Martin Kresta 2008
9.3. Desky plošných spojĤ
9.3.1. MASTER (DPS)
Top:
- 38 -
© Copyright, Martin Kresta 2008
Bottom:
- 39 -
© Copyright, Martin Kresta 2008
9.3.2. SLAVE (DPS)
Top:
Bottom:
- 40 -
© Copyright, Martin Kresta 2008
9.3.3. Zdroj (DPS)
Top:
Bottom:
- 41 -
© Copyright, Martin Kresta 2008
9.3.4. Control (DPS)
Top:
Bottom:
9.3.5. Sensor (DPS)
Top:
Bottom:
- 42 -
© Copyright, Martin Kresta 2008
9.4. Vývojové diagramy
Použité symboly:
x=y……….……pĜiĜazení
x=\x\…………...negace bitu
x==y…………...porovnání (x je rovno y)
x!=y……………porovnání (x je rĤzné od y)
9.4.1. Vývojový diagram MASTER
.
$
@.
% %
%A
-
B
CDDC
- 43 -
© Copyright, Martin Kresta 2008
9.4.2. Rutina sentest
ECDDF
DC
E8DDF
D8
E#DDF
D#
E(DDF
D(
E>DDF
D>
E<DDF
D<
DC
.51
- 44 -
© Copyright, Martin Kresta 2008
9.4.3. Rutina zobraz
.FD
.FGDF
DCH<
.FGDC
DC89
.FGD8
D8FH
.FGD#
DC(<
.FGD(
DC#(
.FGD>
D8F(
.FGD<
DC<(
DCH<
.51
- 45 -
© Copyright, Martin Kresta 2008
9.4.4. Rutina posli (MASTER)
8D
-B8D-
B8D
B8D
BD
8
.51
- 46 -
© Copyright, Martin Kresta 2008
9.4.5. Rutina buttest (MASTER)
@DDC
@DF
@CDDC
@CDF
DC
ECDDC
DC
E8DDC
D8
E#DDC
D#
E(DDC
D(
E>DDC
D>
E<DDC
D<
.51
- 47 -
© Copyright, Martin Kresta 2008
9.4.6. Rutina lift
B
D
DF
DG
DI
DDF
D
JF
DC
DG
DF
"
"
DI
JF
DDC
.51
DDF
- 48 -
© Copyright, Martin Kresta 2008
9.4.7. Rutina ready
DF
DC
DF
DDF
DF
-DC
K(
DCCCC CCFF3
#D#LL
DC
DF
.51
- 49 -
© Copyright, Martin Kresta 2008
9.4.8. Subrutina jed
"
B
DF
-DC
D8FF
DC
DDF
B
DC
D
IC
.51
D
DF
BB
- 50 -
© Copyright, Martin Kresta 2008
9.4.9. Subrutina stuj
"
B
DF
DDF
DF
DC
D
?C
DD8>>
-DF
D
DF
B
DC
DF
.51
BB
- 51 -
© Copyright, Martin Kresta 2008
9.4.10. Subrutiny on a off
BB
DC<<
CD8
DIC
CD
CIC
DDF
CDDF
.51
DIC
DDF
.51
- 52 -
© Copyright, Martin Kresta 2008
9.4.11. Subrutina ledka
ECDDF
ECDF
E8DDF
E8DF
E#DDF
E#DF
E(DDF
E(DF
E>DDF
E>DF
E<DDF
E<DF
.51
- 53 -
© Copyright, Martin Kresta 2008
9.4.12. Subrutina wait4
K(
1MFDF
17FDF
D8F
51FDC
1.FDC
DDF
.51
- 54 -
© Copyright, Martin Kresta 2008
9.4.13. Subrutina savetest – 1.þást
ECDDC
DC
E8DDC
D8
E#DDC
D#
E(DDC
D(
E>DDC
D>
E<DDC
D<
C
.51
- 55 -
© Copyright, Martin Kresta 2008
9.4.14. Subrutina savetest – 2.þást
C
CDDF
GD
GD
CDC
CD
DDC
CDDF
GD
GD
DDC
GDC
8DC
8D
CDDF
GD
GD
DDC
GDC
GD8
#DC
#D
.51
- 56 -
© Copyright, Martin Kresta 2008
9.4.15. Obsluha pĜerušení sériové linky (MASTER)
DN
51FDF
.ODDC
CDB
1ODDC
DDC
@DC
1ODF
51FDC
D
PP
FFFF CCCC3
DC
.ODF
51FDC
JD
.51O
- 57 -
© Copyright, Martin Kresta 2008
9.4.16. Obsluha pĜerušení timeru 0 (MASTER)
-
DN
5DF
1.FDF
1MFDF
1MFDF
D
IC
GDF
5DC
51FDF
5DC
1.FDC
JD
.51O
- 58 -
© Copyright, Martin Kresta 2008
9.4.17. Rutina Buttest (SLAVE)
ECDDC
ECDDC
E8DDC
E8DDC
E#DDC
E#DDC
DC
D8
D#
E(DDC
E(DDC
E>DDC
E>DDC
E<DDC
E<DDC
D(
D>
D<
DDC
1MFD8>>
DC
DC
DDC
1.FDC
DDC
DDC
1.FDF
D
.51
- 59 -
© Copyright, Martin Kresta 2008
9.4.18. Subrutina antikmit
D8>>
DIC
DDF
D8>>
DIC
DDF
D8>>
DIC
DDF
.51
- 60 -
© Copyright, Martin Kresta 2008
9.4.19. Subrutina posli (SLAVE)
DDF
DF
BD
.51
- 61 -
© Copyright, Martin Kresta 2008
9.4.20. Obsluha pĜerušení sériové linky (SLAVE)
.ODDC
CDB
1ODDC
1ODF
DC
.ODF
.51O
- 62 -
© Copyright, Martin Kresta 2008
9.4.21. Subrutina dekoder
D
CPP
FFFF CCCC3
DQ-BCQ
-
DQBCQ
DQBCQ
-
DDF
.51
- 63 -
© Copyright, Martin Kresta 2008
9.4.22. Subrutiny ah a d
DF
DF
DF
DF
DC
DCR9
D8>>
D8>>
D
IC
CD8C
CD8C
D
IC
D
IC
DDF
DDF
CD
CIC
CD
CIC
CDDF
CDDF
DDF
D?C
DC
DCR9
D
IC
DDF
D?C
DD88F
DDC>F
.51
.51
- 64 -
© Copyright, Martin Kresta 2008
9.4.23. Obsluha pĜerušení timeru 0 (SLAVE)
DQ
Q
DIC
DDF
B-DDC
B-DC
B-DF
1MFD1MF?C
1MFD1MFIC
1MFDDCFF
1MFDDF
D
.51O
- 65 -
© Copyright, Martin Kresta 2008
9.5. Zdrojové kódy MASTER a SLAVE
- 66 -
© Copyright, Martin Kresta 2008
E:\master52.6.asm
;program MASTER pro Ĝízení výtahu pro procesor AT89S52 SE.
;21.10.2007 zaþátek tvorby
;16.11.2007 pĜidán obslužný software pro UART s použítím timeru 2, baudrate = 2400b
;18.1.2008 pĜidáno ovládaní el. pojistky, a þasování pomoci timeru
;19.1.2008 pĜidání rutiny "savetest" - umožĖuje zapamatovat si až 3 patra.
;20.1.2008 komentáĜ zdrojového kódu
;autor: Martin Kresta
;web: www.vytah.chytrak.cz
;email: [email protected]
;icq: 215-360-010
;-------------------------------------;---deklarace portĤ--disp
data
p1
;7mi segmentový displej, port
1
led_1
bit
p3.2
;LED v pĜízemí, port
3.2
led_2
bit
p3.3
;LED v 1. patĜe, port
3.3
led_3
bit
p3.4
;LED v 2. patĜe, port
3.4
led_4
bit
p3.5
;LED v 3. patĜe, port
3.5
led_5
bit
p3.6
;LED v 4. patĜe, port
3.6
led_6
bit
p3.7
;LED v 5. patĜe, port
3.7
lede
bit
p2.0
;zapne/vypne všechny LED, port 2.0
cid_1
bit
p0.0
;þidlo v pĜízemí, port 0.0
cid_2
bit
p0.1
;þidlo v 1. patĜe, port 0.1
cid_3
bit
p0.2
;þidlo v 2. patĜe, port 0.2
cid_4
bit
p0.3
;þidlo v 3. patĜe, port 0.3
cid_5
bit
p0.4
;þidlo v 4. patĜe, port 0.4
cid_6
bit
p0.5
;þidlo v 5. patĜe, port 0.5
smer
bit
p0.6
;nastaví smČr otáþek motoru, port 0.6
mot
bit
p0.7
;zapne/vypne napČtí na motor, port 0.7
tla_1
bit
p2.2
;tlaþítko v pĜízemí, port 2.2
tla_2
bit
p2.3
;tlaþítko v 1. patĜe, port 2.3
tla_3
bit
p2.4
;tlaþítko v 2. patĜe, port 2.4
tla_4
bit
p2.5
;tlaþítko v 3. patĜe, port 2.5
tla_5
bit
p2.6
;tlaþítko v 4. patĜe, port 2.6
tla_6
bit
p2.7
;tlaþítko v 5. patĜe, port 2.7
fuse
bit
p2.1
;aktivuje/deaktivuje elektronickou pojistku
;---deklarace promČnných--ap
data
30h
;aktuální poloha, adresa 30h
zp
data
31h
;žádaná poloha, adresa 31h
mp
data
32h
;poloha v pamČti, addresa 32h
mp1
data
33h
;poloha v mezipamČti 1, adresa 33h
mp2
data
34h
;poloha v mezipamČti 2, adresa 34h
mp3
data
35h
;poloha v mezipamČti 3, adresa 35h
puls
data
36h
;doba generování log1 (PFM), adresa 36h
zero
data
37h
;doba generování log0 (PFM), adresa 37h
zero1
data
38h
;zkracování doby log0 (PFM), adresa 38h
pom
data
39h
;pomocná prmČnná (PFM), adresa 39h
time
data
40h
;doba setrvání v režimu ready (wait3), adresa 4
0h
cyk
data
41h
zdrzi
data
42h
;---deklarace SFR--T2MOD
RCAP2L
RCAP2H
TL2
TH2
T2CON
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C_T2
CP_RL2
F
Page: 1
DATA
DATA
DATA
DATA
DATA
DATA
BIT
BIT
BIT
BIT
BIT
BIT
BIT
BIT
BIT
0C9h
0CAH
0CBH
0CCH
0CDH
0C8H
0CFH
0CEH
0CDH
0CCH
0CBH
0CAH
0C9H
0C8H
0D5H
;
;
;
;
;
;
;SFR pro timer 2 v režimu baudrate generator
;
;zkopírováno z www.atmel.com
;
;
;
;
;
;
E:\master52.6.asm
minus
bit
PSW.7
;pĜíznak záporného výsledku odþítání, PSW.7
;---deklarace promČnných v bitovČ adresovatelné oblasti pamČti-;---statbyte1--statbyte1
data
22h
;stavový registr 1 (UART), adresa 22h
gf1
bit
14h
;pĜíznak pohybu, 14h
rf1
bit
15h
;pĜíznak režimu ready, 15h
;---statbyte2--statbyte2
data
24h
;stavový registr 2 (UART), adresa 24h
gf2
bit
24h
;pĜíznak pohybu, 24h
rf2
bit
25h
;pĜíznak režimu ready, 25h
lf2
bit
26h
;pĜíznak rozsvícení displeje v kabinČ, 26h
rebit
bit
00h
;pĜíznak režimu ready, 00h
gobit
bit
01h
;pĜíznak pohybu, 01h
libit
bit
02h
;pĜíznak rozsvícení displeje v kabinČ, 02h
vpatre
bit
03h
;pĜíznak zastavení v patĜe, 03h
;---pĜíznaky pamČti--membit1
bit
04h
;pĜíznak obsazené 1. pamČĢové pozice
membit2
bit
05h
;pĜíznak obsazené 2. pamČĢové pozice
membit3
bit
06h
;pĜíznak obsazené 3. pamČĢové pozice
F1
bit
07h
;pĜíznak naplnČní zp z pamČti
;--------------------------------------;--- zdrojový kód--;--------------------------------------org
0h
;
jmp
setting
;po resetu pokraþuj na setting
org
23h
;
jmp
uart
;po pĜerušení od sériové linky skoþ na uart
org
0bh
;
jmp
timing
;po pĜerušení od þasovaþe 0 skoþ na timing
org
30h
;
;--------------------------------------setting:
mov
ie,#92h
;povolí pĜerušení od UARTu a þasovaþe 0
mov
pcon,#00h
;nuluje PCON => poloviþní pĜenosová rychlost
mov
scon,#50h
;nastaví UART do módu 1 a povolí pĜíjem
mov
tmod,#01h
;nastavení þasovaþe 0 do módu 1
;---nastavení timeru 2, zkopírováno z www.atmel.com--ANL
T2CON,#0F0h
;EXEN2=0; TR2=0; C/T2#=0; CP/RL2#=0;
ORL
T2CON,#30h
;RCLK = 1; TCLK=1
MOV
TH2,#0FFh
;init value
MOV
TL2,#0CCh
;init value
MOV
RCAP2H,#0FFh
;reload value, 2400 Bds at 4.0MHz
MOV
RCAP2L,#0CCh
;reload value, 2400 Bds at 4.0MHz
SETB
TR2
;Timer 2 run
;------------------------------clr
setb
clr
mov
acall
clr
clr
clr
clr
clr
setb
fuse
lede
mot
ap,#00h
posli
gobit
rebit
membit1
membit2
membit3
fuse
;deaktivace el. pojistky
;rozsvícení všech ledek
;zasatvení motoru
;nastavení ap = 0 ( pĜízemí )
acall
acall
acall
acall
acall
sentest
zobraz
posli
buttest
lift
;test þidel
;zobrazení
;odeslání
;test tlaþítek
;pohyb kabiny
;vynulování pĜíznaku gobit
;vynulování pĜíznaku rebit
;vynulování pĜíznaku membit1
;vynulování pĜíznaku membit2
;vynulování pĜíznaku membit3
;aktivace el. pojistky
start:
Page: 2
E:\master52.6.asm
acall
jb
jmp
ready
membit1,loading
start
;kabina pĜipravena
;je-li nČco v pamČti,skoþ na "loading"
;jinak skoþ na start
loading:
jb
F,start
;je-li požadavek z kabiny, skoþ na "start"
clr
membit1
;vynuluj pĜíznak obsazené 1. pamČĢové pozice
mov
zp,mp1
;pĜesuĖ hodnotu z pamČti do zp
mov
c,membit2
;
mov
membit1,c
;kopie bitu pĜes c ,membit2 => membit1
mov
mp1,mp2
;pĜesun pamČĢové pozice mp2 => mp1
mov
c,membit3
;
mov
membit2,c
;kopie bitu pĜes c ,membit3 => membit2
mov
mp2,mp3
;pĜesun pamČĢové pozice mp3 => mp2
clr
membit3
;vynuluj pĜíznak obsazené 3. pamČĢové pozice
setb
F1
;nastav pĜíznak požadavku z pamČti
jmp
start
; skoþ na "start"
;----------------------------------------------------;---rutina pro testování þidel--- (vrací ap, nebo {} )
;----------------------------------------------------sentest:
jnb
cid_1,one
;je-li kabina v pĜízemí, skoþ na "one"
jnb
cid_2,two
;je-li kabina v 1.patĜe, skoþ na "two"
jnb
cid_3,three
;je-li kabina v 2.patĜe, skoþ na "three"
jnb
cid_4,four
;je-li kabina v 3.patĜe, skoþ na "four"
jnb
cid_5,five
;je-li kabina v 4.patĜe, skoþ na "five"
jnb
cid_6,six
;je-li kabina v 5.patĜe, skoþ na "six"
ret
;návrat z rutiny
one:
mov
ap,#01h
;do ap vlož hodnotu 01 (pĜízemí)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;návrat z rutiny
two:
mov
ap,#02h
;do ap vlož hodnotu 02 (1.patro)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;návrat z rutiny
three: mov
ap,#03h
;do ap vlož hodnotu 03 (2.patro)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;návrat z rutiny
four:
mov
ap,#04h
;do ap vlož hodnotu 04 (3.patro)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;návrat z rutiny
five:
mov
ap,#05h
;do ap vlož hodnotu 05 (4.patro)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;návrat z rutiny
six:
mov
ap,#06h
;do ap vlož hodnotu 06 (5.patro)
setb
vpatre
;nastav pĜíznak kabiny v patĜe
ret
;---------------------------------------------------------------------------------;---rutina pro testování tlaþítek--- (trvá tak dlouho dokud není požadavek)
;---------------------------------------------------------------------------------buttest:
repete:
jb
F,flag
;je-li požadavek z kabiny, skoþ na "flag"
jb
F1,flag1
;je-li požadavek z pamČti, skoþ na "flag1"
jb
tla_1,jedna
;je-li stisknuto tla_1, skoþ na "jedna"
jb
tla_2,dva
;je-li stisknuto tla_2, skoþ na "dva"
jb
tla_3,tri
;je-li stisknuto tla_3, skoþ na "tri"
jb
tla_4,ctyri
;je-li stisknuto tla_4, skoþ na "ctyri"
jb
tla_5,pet
;je-li stisknuto tla_5, skoþ na "pet"
jb
tla_6,sest
;je-li stisknuto tla_6, skoþ na "sest"
jmp
repete
;nebyl-li žádný požadavek,skoþ na "repete"
jedna:
dva:
tri:
Page: 3
mov
ret
mov
ret
mov
ret
zp,#01h
zp,#02h
zp,#03h
;do ap vlož hodnotu 01 (pĜízemí)
;návrat z rutiny
;do ap vlož hodnotu 02 (1.patro)
;návrat z rutiny
;do ap vlož hodnotu 03 (2.patro)
;návrat z rutiny
E:\master52.6.asm
ctyri:
mov
zp,#04h
;do ap vlož hodnotu 04 (3.patro)
ret
;návrat z rutiny
pet:
mov
zp,#05h
;do ap vlož hodnotu 05 (4.patro)
ret
;návrat z rutiny
sest:
mov
zp,#06h
;do ap vlož hodnotu 05 (5.patro)
ret
;návrat z rutiny
flag:
clr
F
;vynuluj pĜíznak F
setb
libit
;nastav pĜízank rozsvícení displeje v kabinČ
ret
;návrat z rutiny
flag1: clr
F1
;vynuluj pĜíznak F1
setb
libit
;nastav pĜízank rozsvícení displeje v kabinČ
ret
;návrat z rutiny
;----------------------------------------------------------;---rutina pro pohyb kabiny---(trvá tak dlouho dokud zp!=ap)
;----------------------------------------------------------lift:
acall
sentest
;test þidel
clr
lede
;rozsvítí všechny LED (þervené)
mov
a,ap
;pĜesun ap => akumulátor
subb
a,zp
;odeþte ap-zp
jz
ok
;pokud ap=zp, skoþ na "ok"
jb
minus,up
;pokud ap<zp, skoþ na "up"
down:
clr
acall
smer
jed
;nastav smČr otáþek motoru dolĤ
;rozjezd
mov
subb
jb
jnb
a,ap
a,zp
minus,kontrola
minus,kontrola2
;pĜesun ap => akumulátor
;odeþte ap-zp
;pokud ap<zp, skoþ na "kontrola"
;pokud ap>zp, skoþ na "kontrola2"
mov
acall
cjne
acall
mov
cjne
acall
jmp
a,ap
sentest
a,ap,zmena
savetest
a,ap
a,zp,cont
stuj
ok
;pĜesun ap => akumulátor
;test þidel
;pokud byla zmČna ap, skoþ na "calling"
;savetest
;provnej ap a zp,
;když ap!=zp vrat se na "cont"
;brzda
;skoþ na "ok"
kontrola:
jb
call
jmp
smer,res
otocka
res
;jede-li správným smČrem, skoþ na "res"
;jinak zavolej otocka
;skoþ na "res"
kontrola2:
jnb
call
jmp
smer,res
otocka
res
;jede-li správným smČrem, skoþ na "res"
;jinak zavolej otocka
;skoþ na "res"
acall
acall
mov
cjne
acall
zobraz
posli
a,ap
a,zp,cont
stuj
;zobraz
;odeslání
;provnej ap a zp,
;když ap!=zp vrat se na "cont"
;brzda
acall
ret
zobraz
;zobrazení
;návrat z rutiny
setb
acall
jmp
smer
jed
cont
;nastav smČr otáþek motoru nahoru
;rozjezd
;skoþ na "cont"
cont:
res:
zmena:
ok:
up:
Page: 4
E:\master52.6.asm
;----------------------------------------------------;---subrutiny pro plynulý rozjezd a zastavení (PFM)--;----------------------------------------------------jed:
clr
fuse
;deaktivace el. pojistky
setb
gobit
;nastavení pĜíznaku pohybu
acall
posli
;odeslání
mov
zero,#200d
;pĜesun 200 => zero
cykl:
setb
mov
jz
dec
mov
acall
clr
acall
jmp
mot
a,zero
jede
zero
pom,zero
on
mot
off
cykl
;pĜipojení napČtí na motor
;pĜesun zero => akumulátor
;je-li zero == 0, skoþ na "jede"
;decrementuj zero
;pĜesun zero => pom
;doba generování impulsu log1 na motor
;odpojení napČtí na motor
;doba generování impulsu log0 na motor
;skoþ na "cykl"
jede:
setb
fuse
;aktivace el. pojistky
ret
;návrat ze subrutiny
;--------------------------------------stuj:
clr
fuse
;deaktivace el. pojistky
jnb
mot,stoji
;je-li motor odpojen od napČtí, skoþ na "stojí"
mov
zero,#00d
;pĜesun 200 => zero
cykl1:
setb
inc
mot
zero
;pĜipojení napČtí na motor
;incrementuj zero
mov
cjne
a,zero
a,#255d,dal
;pĜesun zero => akumulátor
;je-li zero rĤzné od 0, skoþ na "dal"
clr
clr
setb
ret
gobit
mot
fuse
;vynuluj pĜíznak pohybu
;odpoj napČtí na motor
;aktivuj el. pojistku
;návrat ze subrutiny
mov
acall
clr
acall
jmp
pom,zero
on
mot
off
cykl1
;pĜesun zero => pom
;doba generování impulsu log1 na motor
;odpojení napČtí na motor
;doba generování impulsu log0 na motor
;skoþ na "cykl1"
dale:
stoji:
dal:
;--------------------------------------on:
mov
puls,#166d
;konstantní þasová smyþka
djnz
puls,$
;doba generování impulsu log1 na motor
ret
;návrat ze subrutiny
off:
mov
zero1,#2d
;zpoždČní závislé na hodnotČ reg."zero"
djnz
zero1,$
;udává dobu generování
djnz
pom,off
;impulsu log0 na motor, skáþe na "off"
ret
;návrat ze subrutiny
;----------------------------------------------;---rutina pro zobrazení na 7mi seg. displeji--;----------------------------------------------zobraz:
mov
R0,ap
;pĜesun ap => R0
cjne
R0,#00h,dal1
;když R0!=0, skoþ na "dal1"
Page: 5
E:\master52.6.asm
mov
disp,#176d
ret
dal1:
cjne
R0,#01h,dal2
mov
disp,#81h
ret
dal2:
cjne
R0,#02h,dal3
mov
disp,#207d
ret
dal3:
cjne
R0,#03h,dal4
mov
disp,#92h
ret
dal4:
cjne
R0,#04h,dal5
mov
disp,#86h
ret
dal5:
cjne
R0,#05h,dal6
mov
disp,#204d
ret
dal6:
cjne
R0,#06h,error
mov
disp,#164d
ret
error: mov
disp,#176d
ret
;---------------------------;---rutina pro režim ready--;---------------------------ready:
clr
vpatre
acall
sentest
setb
rebit
setb
libit
jnb
vpatre,mimo
acall
posli
;napíše na displej "E"
;návrat z rutiny
;když R0!=1, skoþ na "dal2"
;napíše na displej "0"
;návrat z rutiny
;když R0!=2, skoþ na "dal3"
;napíše na displej "1"
;návrat z rutiny
;když R0!=3, skoþ na "dal4"
;napíše na displej "2"
;návrat z rutiny
;když R0!=4, skoþ na "dal5"
;napíše na displej "3"
;návrat z rutiny
;když R0!=5, skoþ na "dal6"
;napíše na displej "4"
;návrat z rutiny
;když R0!=6, skoþ na "error"
;napíše na displej "5"
;návrat z rutiny
;napíše na displej "E"
;návrat z rutiny
;vynuluje pĜíznak kabiny v patĜe
;test þidel
;nastaví pĜíznak režimu ready
;nastav pĜíznak rozsvicení displeje v kabinČ
;jestliže kabina není v patĜe, skoþ na "mimo"
;odeslání
pokrac:
acall
acall
mov
orl
setb
clr
clr
acall
ret
ledka
wait4
a,#11111100b
p3,a
lede
rebit
libit
posli
;zavolej "ledka"
;zavolej "wait4"
;skrze acumulator nastav
;všechny led do 1 = þervená
;zhasni všechny LED
;vynuluje pĜíznak režimu ready
;vynuluje pĜíznak rozsvicení displeje v kabinČ
;odeslání
;návrat z rutiny
mimo:
clr
rebit
;vynuluje pĜíznak režimu
setb
gobit
;nastav pĜíznak pohybu
acall
posli
;odeslání
jmp
pokrac
;skoþ na "pokrac"
;-----------------------------------------------------------;---subrutina pro nastavení pĜíšlušné LED do log0 = zelená--;-----------------------------------------------------------ledka:
jnb
cid_1,o
;je-li kabina v pĜízemí,
jnb
cid_2,tw
;je-li kabina v 1.patĜe,
jnb
cid_3,th
;je-li kabina v 2.patĜe,
jnb
cid_4,fo
;je-li kabina v 3.patĜe,
jnb
cid_5,fv
;je-li kabina v 4.patĜe,
jnb
cid_6,si
;je-li kabina v 5.patĜe,
ret
;návrat ze subrutiny
o:
tw:
th:
fo:
Page: 6
clr
ret
clr
ret
clr
ret
clr
led_1
led_2
led_3
led_4
;v pĜízemí
;návrat ze
;v 1.patĜe
;návrat ze
;v 2.patĜe
;návrat ze
;v 3.patĜe
ready
skoþ
skoþ
skoþ
skoþ
skoþ
skoþ
rozsvítí zelenou
subrutiny
rozsvítí zelenou
subrutiny
rozsvítí zelenou
subrutiny
rozsvítí zelenou
na
na
na
na
na
na
LED
LED
LED
LED
"o"
"tw"
"th"
"fo"
"fv"
"si"
E:\master52.6.asm
ret
clr
led_5
ret
si:
clr
led_6
ret
;--------------------------------;---subrutina pro þasování 4sec--;--------------------------------wait4:
setb
et0
mov
th0,#0d
mov
tl0,#0d
mov
time,#20d
setb
tr0
fv:
;návrat ze
;v 4.patĜe
;návrat ze
;v 5.patĜe
;návrat ze
;povolí
;pĜesun
;pĜesun
;pĜesun
;spustí
subrutiny
rozsvítí zelenou LED
subrutiny
rozsvítí zelenou LED
subrutiny
pĜerušení od timeru 0
00 => TH0
00 => TL0
15 => time
timer 0
memory:
acall
mov
jz
jmp
savetest
a,time
uz
memory
;savetest
;jestliže time == 0,
;skoþ na "uz"
;jinak skoþ na "memory"
uz:
ret
;návrat ze subrutiny
;------------------------------------------------------------;---subrutina pro testování tlaþítek bČhem plnČní požadavku--;------------------------------------------------------------savetest:
jb
tla_1,mem1
;je-li stisknuto tla_1,
jb
tla_2,mem2
;je-li stisknuto tla_2,
jb
tla_3,mem3
;je-li stisknuto tla_3,
jb
tla_4,mem4
;je-li stisknuto tla_4,
jb
tla_5,mem5
;je-li stisknuto tla_5,
jb
tla_6,mem6
;je-li stisknuto tla_6,
ret
;návrat ze subrutiny
mem1:
mem2:
mem3:
mem4:
mem5:
mem6:
mov
jmp
mov
jmp
mov
jmp
mov
jmp
mov
jmp
mov
mp,#01h
saving
mp,#02h
saving
mp,#03h
saving
mp,#04h
saving
mp,#05h
saving
mp,#06h
;do mp vlož hodnotu
;skoþ na "saving"
;do mp vlož hodnotu
;skoþ na "saving"
;do mp vlož hodnotu
;skoþ na "saving"
;do mp vlož hodnotu
;skoþ na "saving"
;do mp vlož hodnotu
;skoþ na "saving"
;do mp vlož hodnotu
skoþ
skoþ
skoþ
skoþ
skoþ
skoþ
na
na
na
na
na
na
mem1
mem2
mem3
mem4
mem5
mem6
01 (pĜízemí)
02 (1.patro)
03 (2.patro)
04 (3.patro)
05 (4.patro)
06 (5.patro)
saving:
jnb
jnb
jnb
ret
membit1,saving1
membit2,saving2
membit3,saving3
;je-li volná 1.pam. pozice, skoþ na "saving1"
;je-li volná 2.pam. pozice, skoþ na "saving2"
;je-li volná 3.pam. pozice, skoþ na "saving3"
mov
cjne
jb
ret
cjne
ret
setb
mov
ret
a,mp
a,ap,dif10
mot,dif10
;je-li mp!=ap
;pak skoþ na "dif10"
;je-li kabina v pohybu, skoþ na "dif10"
;návrat ze subrutiny
;je-li mp!=zp, skoþ na "dif11"
;návrat ze subrutiny
;nastav pĜíznak obsazené 1. pamČĢové pozice
;pĜesun mp => mp1
;návrat ze subrutiny
mov
cjne
jb
a,mp
a,ap,dif20
mot,dif20
saving1:
dif10:
dif11:
a,zp,dif11
membit1
mp1,mp
saving2:
Page: 7
;je-li mp!=ap
;pak skoþ na "dif20"
;je-li kabina v pohybu, skoþ na "dif20"
E:\master52.6.asm
dif20:
dif21:
dif22:
ret
cjne
ret
cjne
ret
setb
mov
ret
a,zp,dif21
a,mp1,dif22
membit2
mp2,mp
;návrat ze subrutiny
;je-li mp!=zp, skoþ na "dif21"
;návrat ze subrutiny
;je-li mp!=mp1, skoþ na "dif22"
;návrat ze subrutiny
;nastav pĜíznak obsazené 2. pamČĢové pozice
;pĜesun mp => mp2
;návrat ze subrutiny
saving3:
mov
a,mp
;je-li mp!=ap
cjne
a,ap,dif30
;pak skoþ na "dif30"
jb
mot,dif30
;je-li kabina v pohybu, skoþ na "dif30"
ret
;návrat ze subrutiny
dif30: cjne
a,zp,dif31
;je-li mp!=zp, skoþ na "dif31"
ret
;návrat ze subrutiny
dif31: cjne
a,mp1,dif32
;je-li mp!=mp1, skoþ na "dif32"
ret
;návrat ze subrutiny
dif32: cjne
a,mp2,dif33
;je-li mp!=mp2, skoþ na "dif33"
ret
;návrat ze subrutiny
dif33: setb
membit3
;nastav pĜíznak obsazené 3. pamČĢové pozice
mov
mp3,mp
;pĜesun mp => mp3
ret
;návrat ze subrutiny
;-----------------------------------------------;---subrutina pro odeslání dat sériovou linkou--;-----------------------------------------------posli:
mov
statbyte2,ap
;pĜesun ap => statbyte2
mov
c,gobit
;
mov
gf2,c
;pĜesun gobit => gf2
mov
c,rebit
;
mov
rf2,c
;pĜesun rebit => rf2
mov
c,libit
;
mov
lf2,c
;pĜesun libit => lf2
mov
sbuf,statbyte2
;pĜesun statbyte2 => sbuf (zahájení odesílání)
ret
;návrat ze subrutiny
;--------------------------------------------;---subrutina pro zmČnu smČru otáþek motoru--;--------------------------------------------otocka:
acall
stuj
;zastavení
cpl
smer
;zmČna smČru otáþek motoru
acall
jed
;rozjezd
ret
;návrat ze subrutiny
;----------------------------------;---obsluha pĜerušení od timeru 0--;----------------------------------timing:
push
acc
clr
es
;zakáže pĜerušení od sériové linky
clr
tr0
;zastaví timer 0
mov
th0,#0d
;pĜesun 00 => TH0
mov
tl0,#0d
;pĜesun 00 => TL0
djnz
time,estene
;dekrementuj time, je-li 0, skoþ na "estene"
clr
et0
;zakáže pĜerušení od timeru 0
setb
es
;povolí pĜerušení od sériové linky
pop
acc
reti
;návrat z pĜerušení
estene:
setb
tr0
;spustí timer 0
setb
es
;povolí pĜerušení od sériové linky
pop
acc
reti
;návrat z pĜerušení
;---------------------------------------;---obsluha pĜerušení od sériové linky--;---------------------------------------uart:
Page: 8
E:\master52.6.asm
push
clr
jb
jb
acc
et0
ri,prijem
ti,vyslano
mov
jb
setb
statbyte1,sbuf
mot,noF
F
;pĜesun sbuf => statbyte1
mov
anl
mov
clr
mov
setb
pop
reti
a,#0fh
a,statbyte1
zp,a
ri
time,#1h
et0
acc
;pĜesun 0000 1111 => akumulátor
;logický souþin a = a*statbyte1
;pĜesun akumulátor => zp
;vynuluje pĜíznak ri
;pĜesun 01 => time
;povolí pĜerušení od timeru 0
clr
setb
pop
reti
ti
et0
acc
;zakáže pĜerušení od timeru 0
;když ri = 1, pak skoþ na "prijem"
;když ti = 1, pak skoþ na "vyslano"
prijem:
;nastav pĜíznak požadavku z kabiny
noF:
;návrat z pĜerušení
vyslano:
end
Page: 9
;vynuluje pĜíznak ti
;povolí pĜerušení od timeru 0
;návrat z pĜerušení
;konec zdrojového kódu
E:\slave52.2.asm
;program pro Ĝízení výtahu SLAVE pro procesor AT89S52 SE.
;21.10.2007 zaþátek tvorby
;16.11.2007 pĜidán obslužný software pro UART s použítím timeru 2,baudrate = 2400b
;19.1.2008 úpravy v komunikaci, pamČĢ
;20.1.2008 komentáĜ zdrojového kódu
;autor: Martin Kresta
;web: www.vytah.chytrak.cz
;email: [email protected]
;icq: 215-360-010
;-------------------------------------;---deklarace portĤ--disp
data
p0
;7mi segmentový displej, port 0
green
bit
p1.1
;zelená LED, port 1.1
red
bit
p1.2
;þervená LED, port 1.2
tla_6
bit
p2.0
;tlaþítko pĜízemí, port 2.0
tla_5
bit
p2.1
;tlaþítko 1. patro, port 2.1
tla_4
bit
p2.2
;tlaþítko 2. patro, port 2.2
tla_3
bit
p2.3
;tlaþítko 3. patro, port 2.3
tla_2
bit
p2.4
;tlaþítko 4. patro, port 2.4
tla_1
bit
p2.5
;tlaþítko 5. patro, port 2.5
zvonek bit
p2.6
;tlaþítko zvonek, port 2.6
stop
bit
p2.7
;tlaþítko stop, port 2.7
piez
bit
p3.7
;pin ovládajíci piezomČníþ, port 3.7
libit
bit
p3.2
;pin ovládající napájení displeje, port 3.2
;---deklarace promČnných--ap
data
30h
;aktuální poloha, adresa 30h
zp
data
31h
;žádaná poloha, adresa 31h
kmit
data
32h
;pomocná promČnná(antikmit), adresa 32h
poc
data
33h
;pomocná promČnná(melody), adresa 33h
rel
data
34h
;pomocná promČnná(melody), adresa 34h
rel1
data
35h
;pomocná promČnná(melody), adresa 35h
reload data
36h
;rychlost pulsování tónu, adresa 36(ton)
;---deklarace SFR--T2MOD
DATA
0C9h
;
RCAP2L DATA
0CAH
;
RCAP2H DATA
0CBH
;
TL2
DATA
0CCH
;
TH2
DATA
0CDH
;
T2CON
DATA
0C8H
;SFR pro ovládání timeru 2
TF2
BIT
0CFH
;v režimu baudrate generator
EXF2
BIT
0CEH
;zkopírováno z www.atmel.com
RCLK
BIT
0CDH
;
TCLK
BIT
0CCH
;
EXEN2
BIT
0CBH
;
TR2
BIT
0CAH
;
C_T2
BIT
0C9H
;
CP_RL2 BIT
0C8H
;
;---deklarace promČnných v bitovČ adresovatelné oblasti pamČti-;---statbyte1--statbyte1
data
22h
;stavový registr 1 (UART), adresa 22h
gf1
bit
14h
;pĜíznak pohybu, 24h
rf1
bit
15h
;pĜíznak režimu ready, 25h
lf1
bit
16h
;pĜíznak rozsvícení displeje, 26h
;---statbyte2--statbyte2
data
24h
;stavový registr 2 (UART), adresa 24h
gf2
bit
24h
;pĜíznak pohybu, 24h
rf2
bit
25h
;pĜíznak režimu ready, 25h
rebit
tflag
tibit
bit
bit
bit
00h
02h
39h
;pĜíznak režimu ready
;pĜíznak
;pomocný pĜíznak ukonþeného vysílání
;--------------------------------------;--- zdrojový kód--Page: 1
E:\slave52.2.asm
;--------------------------------------org
0h
;po resetu
jmp
setting
;skoþ na "setting"
org
23h
;po pĜerušení od sériové linky
jmp
uart
;skoþ na "uart"
org
0bh
;po pĜerušení od timeru 0
jmp
ton
;skoþ na "ton"
org
30h
;
;--------------------------------------setting:
mov
ie,#92h
;povolí pĜerušení od UART a þasovaþe 0
mov
pcon,#00h
;vynuluje registr PCON
mov
scon,#50h
;nastaví UART do módu 1 a povolí pĜíjem
mov
tmod,#2h
;nastavení þasovaþe 0 do módu 2
;---nastavení timeru 2, zkopírováno z www.atmel.com--ANL
T2CON,#0F0h
;EXEN2=0; TR2=0; C/T2#=0; CP/RL2#=0;
ORL
T2CON,#30h
;RCLK = 1; TCLK=1
MOV
TH2,#0FFh
;init value
MOV
TL2,#0CCh
;init value
MOV
RCAP2H,#0FFh
;reload value, 2400 Bds at 4.0MHz
MOV
RCAP2L,#0CCh
;reload value, 2400 Bds at 4.0MHz
SETB
TR2
;Timer 2 run
;------------------------------mov
ap,#0d
;nastavení výchozí aktuální polohy => 0
setb
tibit
;nasatví pĜíznak ukonþeného vysílání
clr
libit
;vynuluje pĜíznak rozsvícení displeje
start:
acall
zobraz
;zobrazení
acall
buttest
;testování tlaþítek
jmp
start
;skoþ na "start"
;----------------------------------------------------;---rutina pro test a vyhodnocení požadavkĤ obsluhy--;----------------------------------------------------buttest:
repete:
jb
tla_1,jedna
;je-li tlaþítko pĜízemí=1 skoþ na "jedna"
jb
tla_2,dva
;je-li tlaþítko 1.patro=1 skoþ na "dva"
jb
tla_3,tri
;je-li tlaþítko 2.patro=1 skoþ na "tri"
jb
tla_4,ctyri
;je-li tlaþítko 3.patro=1 skoþ na "ctyri"
jb
jb
jb
jb
ret
tla_5,pet
tla_6,sest
zvonek,crr
stop,stopping
;je-li tlaþítko 4.patro=1 skoþ na "pet"
;je-li tlaþítko 5.patro=1 skoþ na "sest"
;je-li tlaþítko zvonek=1 skoþ na "crr"
;je-li tlaþítko stop=1 skoþ na "stopping"
;návrat z rutiny
jedna:
acall
jb
acall
mov
acall
ret
acall
jb
acall
mov
acall
ret
acall
jb
acall
mov
acall
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do zp
;odeslání poĜadavku do Ĝídícího procesoru
;návrat z rutiny
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do zp
;odeslání poĜadavku do Ĝídícího procesoru
;návrat z rutiny
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do zp
;odeslání poĜadavku do Ĝídícího procesoru
dva:
tri:
Page: 2
antikmit
tla_1,$
antikmit
zp,#01h
posli
antikmit
tla_2,$
antikmit
zp,#02h
posli
antikmit
tla_3,$
antikmit
zp,#03h
posli
E:\slave52.2.asm
ctyri:
pet:
sest:
ret
acall
jb
acall
mov
antikmit
tla_4,$
antikmit
zp,#04h
acall
ret
acall
jb
acall
mov
acall
ret
acall
jb
acall
mov
posli
acall
ret
posli
mov
mov
mov
setb
jb
clr
ret
th0,#255d
a,#1d
reload,#1d
tr0
zvonek,$
tr0
antikmit
tla_5,$
antikmit
zp,#05h
posli
antikmit
tla_6,$
antikmit
zp,#06h
;návrat z rutiny
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do
zp
;odeslání poĜadavku do Ĝídícího procesoru
;návrat z rutiny
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do zp
;odeslání poĜadavku do Ĝídícího procesoru
;návrat z rutiny
;zpoždČní antikmit
;þeká na uvolnČní tlaþítka
;zpoždČní antikmit
;nastavení požadované hodnoty do zp
;odeslání poĜadavku do Ĝídícího procesoru
;návrat z rutiny
crr:
;nastavení výchozí hodnoty pro timer 0
;nasatvení rychlosti pulsování tónu
;nasatvení rychlosti pulsování tónu
;spuštČní timeru 0
;þeká na uvolnČní tlaþítka
;zastavení timeru 0
;návrat z rutiny
stopping:
acall
antikmit
;zpoždČní antikmit
jb
stop,$
;þeká na uvolnČní tlaþítka
acall
antikmit
;zpoždČní antikmit
mov
zp,ap
;zp=ap
acall
posli
;odeslání poĜadavku do Ĝídícího procesoru
ret
;návrat z rutiny
;-----------------------------------------------------------;---subrutina pro odeslání požadavku do Ĝídícího procesoru--;-----------------------------------------------------------posli:
jnb
tibit,$
;þeká na ukonþení pĜedchozího vysílání
clr
tibit
;vynuluje pĜíznak ukonþeného vysílání
mov
sbuf,zp
;zahájí vysílání nového požadavku
ret
;návrat ze subrutiny
;----------------------------------------------;---rutina pro zobrazení na 7mi seg. displeji--;----------------------------------------------zobraz:
mov
R0,ap
;pĜesun ap => R0
cjne
R0,#00h,dal1
;R0!=0, skoþ na "dal1"
mov
disp,#81h
;napíše na displej "0"
ret
;návrat z rutiny
dal1:
cjne
R0,#01h,dal2
;R0!=1, skoþ na "dal2"
mov
disp,#81h
;napíše na displej "0"
ret
;návrat z rutiny
dal2:
cjne
R0,#02h,dal3
;R0!=2, skoþ na "dal3"
mov
disp,#207d
;napíše na displej "1"
ret
;návrat z rutiny
dal3:
cjne
R0,#03h,dal4
;R0!=3, skoþ na "dal4"
mov
disp,#92h
;napíše na displej "2"
ret
;návrat z rutiny
dal4:
cjne
R0,#04h,dal5
;R0!=4, skoþ na "dal5"
mov
disp,#86h
;napíše na displej "3"
ret
;návrat z rutiny
dal5:
cjne
R0,#05h,dal6
;R0!=5, skoþ na "dal6"
mov
disp,#204d
;napíše na displej "4"
Page: 3
E:\slave52.2.asm
ret
;návrat z rutiny
cjne
R0,#06h,error
;R0!=6, skoþ na "error"
mov
disp,#164d
;napíše na displej "5"
ret
;návrat z rutiny
error: mov
disp,#176d
;napíše na displej "E"
ret
;návrat z rutiny
;-----------------------------------------------------------------------------;---subrutina pro softwareové odstaranČní zákmitĤ tlaþítek---(zpoždČní cca 5ms)
;-----------------------------------------------------------------------------antikmit:
mov
kmit,#255d
;naplnČní registru pro dekrementování
djnz
kmit,$
;postupná dekrementac registru (cca 1,5ms)
mov
kmit,#255d
;naplnČní registru pro dekrementování
djnz
kmit,$
;postupná dekrementac registru (cca 1,5ms)
mov
kmit,#255d
;naplnČní registru pro dekrementování
djnz
kmit,$
;postupná dekrementac registru (cca 1,5ms)
ret
;návrat ze subrutiny
;---------------------------------------;---obsluha pĜerušení od sériové linky--;---------------------------------------uart:
jb
ri,prijem
;když ri = 1, pak skoý na "prijem"
jb
ti,vyslano
;když ti = 1, pak skoý na "vyslano"
reti
;návrat z obsluhy pĜerušení
dal6:
prijem:
mov
acall
clr
reti
statbyte1,sbuf
dekoder
ri
;pĜijatý bajt uloží do statbyte1
;dekoduje pĜijatý bajt
;vynuluje priznak pĜijatého bajtu
;návrat z obsluhy pĜerušení
clr
setb
reti
ti
tibit
;vynuluje pĜíznak ukonþení vysílání
;nastaví pĜíznak ukonþeného vysílání
;návrat z obsluhy pĜerušení
mov
anl
mov
mov
cpl
mov
mov
cpl
mov
mov
cpl
mov
jnb
ret
a,#0fh
a,statbyte1
ap,a
c,gf1
c
red,c
c,rf1
c
green,c
c,lf1
c
libit,c
green,melody
;pomocí logického souþinu
;pĜesune dolní tetrádu pĜijatého bajtu
;do registru ap
;pĜeþte bit gf1
;a jeho negaci
;vloží na pin red
;pĜeþte bit rf1
;a jeho negaci
;vloží na pin green
;pĜeþte bit lf1
;a jeho negaci
;loží na pin libit
;je-li green==1, skoþ na "melody"
acall
acall
ret
ah
d
;zavolej rutinu pro generování tónu a
;zavolej rutinu pro generování tónu d
;návrat z rutiny
mov
poc,#0d
;vynuluje poþítadlo
clr
mov
djnz
inc
setb
mov
djnz
mov
piez
rel,#189d
rel,$
poc
piez
rel,#189d
rel,$
a,poc
;vynuluje pin ovládající piezomČniþ
;nastavení konstanty pro
;þasování periody dané délky(þasová smyþka)
;incrementace poþítadala
;nastaví pin ovládající piezomČniþ
;nastavení konstanty pro
;þasování periody dané délky(þasová smyþka)
;jestliže je poþítadlo
vyslano:
dekoder:
melody:
ah:
ahx:
Page: 4
E:\slave52.2.asm
cjne
ret
a,#220d,ahx
;rĤzné od hodnoty 220, skoþ na "ahx"
;návrat z rutiny
mov
poc,#0d
;vynuluje poþítadlo
d:
dx:
clr
piez
mov
rel,#255d
mov
rel1,#21d
djnz
rel,$
djnz
rel1,$
inc
poc
setb
piez
mov
rel,#255d
mov
rel1,#21d
djnz
rel,$
djnz
rel1,$
mov
a,poc
cjne
a,#150d,dx
ret
;----------------------------------;---obsluha pĜerušení od timeru 0--;----------------------------------ton:
cpl
piez
dec
a
jz
relo
reti
;vynuluje pin ovládající piezomČniþ
;nastavení konstant pro
;generování periody
;dané délky
;(þasová smyþka)
;incrementace poþítadala
;nastaví pin ovládající piezomČniþ
;nastavení konstant pro
;generování periody
;dané délky
;(þasová smyþka)
;jestliže je poþítadlo
;rĤzné od hodnoty 150, skoþ na "dx"
;návrat z rutiny
;zneguje pin ovládající piezomČniþ
;dekrementuje hodnotu v akumulátoru
;a pokud je nulová, skoþí na "relo"
;návrat z obsluhy pĜerušení
relo:
jb
tflag,incre
;je-li nastavan bit tflag, skoþ na "incre",
;jinak pokraþuj na "decre"
clr
dec
mov
jz
mov
reti
tflag
th0
a,th0
incre
a,reload
;vynuluje "tflag"
;sníží TH0 =>zvýší frekvenci
;je-li TH0 = 0,
;skoþí na "incre"
;do akumulátoru naþte konstantu reload
;návrat z obsluhy pĜerušení
setb
inc
mov
cjne
jmp
tflag
th0
a,th0
a,#100d,dale
decre
;nastaví "tflag"
;zvýší TH0 =>sníží frekvenci
;je-li TH0 rĤzné od 100
;skoþí na "dale"
;jinak skoþí na "decre"
mov
reti
a,reload
;do akumulátoru naþte konstantu reload
;návrat z obsluhy pĜerušení
decre:
incre:
dale:
end
Page: 5
;konec zdrojového kódu

Podobné dokumenty

List1 Stránka 1 TYP,C,40 ZAVADA,C,40 OSAZENÍ,C,40 JVC

List1 Stránka 1 TYP,C,40 ZAVADA,C,40 OSAZENÍ,C,40 JVC závitů na VN trafu. Poduška ­vadný fet IRF630(IRF740) ,tlumivka vypálená a kond.  modulátoru CL035 M51/400V, schema neodpovídá, jde na GND a na tlumivku. Svod C50M/50V na PIN 57 TEA8659AN(klíčování...

Více

PIC 12F675

PIC 12F675 Tento dokument je urþen k nekomerþnímu využití. Veškeré komerþní šíĜení, poĜizování kopií nebo pĜebírání jakékoli þásti textu je bez pĜedchozího souhlasu zakázáno. Informace jsou zveĜejnČny bez ohl...

Více

BIG BUGS 1

BIG BUGS 1 Výslovnost je zjednodušena pro potřeby žáků 1. stupně. V případě zájmu o přesnou výslovnost navštivte macmillandictionary.com Podtržené slabiky nesou přízvuk (větší důraz, než první slabika). ɜː = ...

Více

stress management

stress management uvedené události podle intenzity a délky þasu, kterou potĜebují k tomu, aby se té které události pĜizpĤsobili, a to vše bez ohledu na to, zda tato událost byla þi nebyla žádoucí – vše v prĤbČhu po...

Více

Kontrolní otázky ke zkoušce MIP

Kontrolní otázky ke zkoušce MIP Jak může být uspořádána paměťová matice pamětí o organizaci N x 8 bitů (např. 27256). Paměťová buňka paměti ROM, EPROM, EEPROM, FLASH ROM. Čím se rozlišuje informační obsah buňky pro log. 0 a log. ...

Více

Stáhnout

Stáhnout oscilátoru atd.Na krabičce tak potom bývá vyvedeno RESET tlačítko atd.Součástí kitu je i speciální programovací software. Nevýhodou těchto kitů je to,že je lze použít jen s konkrétními typy mikropr...

Více