Semafory řízená křižovatka Ukázka možného využití mikrokontroléru v praxi
● ● ● ●
Program psaný v C Využití RD2 kitu Možnost připojení např. žárovek (přes tranzistory, případně relé) Zapojení nemusí řídit pouze semafory (světelný had, různé blikací ozdoby, po připojení reproduktoru melodický zvonek, při jiném uspořádání LED hrací kostka...)
Jan Hrach
1. Obsah 1. Obsah 2. Úvod 2.1. RD2 Kit 2.2. Proč to dělat "složitě" 3. Stavba 3.1. Návrh schématu 3.2. Seznam a cena součástek 3.3. Návrh plošného spoje 3.4. Leptání 3.5. Vrtání 3.6. Osazení 3.7. Oživení 3.8. Psaní software 3.8.1. Hardware 3.8.2. Kompilátor 3.8.3. Flasher 3.8.4. Zdrojový kód 3.8.5. Flashnutí 3.9. Vyzkoušení 3.10. Ochranný lak a proč ne 3.11. Bezpečnost 4. Odstraňování chyb 5. Závěr 5.1. Použitý software 5.2. Kontakt
2. Úvod 2.1. RD2 Kit RD2 Kit je jednoduchý a levný vývojový prostředek pro rychlý vývoj nových aplikací a výuku programování v C. Kit je osazen jednočipovým mikropočítačem T89c51RD2 a základními periferiemi. Programování je řešeno malým programem (loaderem), který je umístěn na posledním 1kb kódu, takže na aplikace zbývá 63kb. Loader je v případě RD2 Kitu spouštěn přizemněním pinu PSEN a resetem. Loader se po sériové lince RS232 dohodne s programovacím programem v PC a ten mu pošle program ve formátu HEX. Tím je zajištěno, že není potřeba žádný speciální programátor, ale kontrolér se programuje přímo v Kitu.
2.2. Proč to dělat "složitě" Jistě se ptáte, proč dělat semafory pomocí RD2 Kitu, když je na to spousta zapojení. Důvodů je několik: ●
Zapojení bývají zjednodušena tím, že na dvou semaforech svítí červená a na dvou zelená, potom na všech najednou oranžová a potom opačně zelená a červená. Tento semafor se chová jako opravdový (tzn. svítí všechny čtyři červené současně – křižovatka bez provozu, svítí současně na dvou protilehlých semaforech červená s oranžovou – oznámení, že padne zelená).
●
Rozhodnete se, že chcete větší/menší interval. V různých zapojeních asi budete muset vyměnit kondenzátory (dobře, někteří mají potenciometr). V tomto zapojení si v programu změnou hodnot proměnných nastavíte přesný interval v sekundách a program nahrajete do kontroléru.
3. Stavba 3.1. Návrh schématu Schéma (modulu, ne RD2 Kitu!) je velmi jednoduché. V podstatě jde jenom o LED napojenou na Vcc a přes odpor do kontroléru. LED není napojena na kontrolér a uzemněna proto, protože zvedací odpor v kontroléru je několik k a LED by pořádně nesvítila. Tranzistor by měl bez problému zvládnout 10mA, a proto zvolíme velikost odporu kolem 0,5k. LED tak bude procházet asi 6mA ((5-2)/500=0,006). Nejbližší běžný odpor je 470. Tím je schéma hotové.
3.2. Seznam a cena součástek LED červená
4ks
8Kč
LED žlutá (některé oranžové jsou moc podobné červeným) 4ks
8Kč
LED zelená
4ks
8Kč
Rezistor 470
12ks 12Kč
Dutinková lišta 8 kontaktů
2ks
25Kč 61Kč
3.3. Návrh plošného spoje Zapojení je jednoduché, ale návrh plošného spoje už bude složitější. Musíme respektovat to, aby LED byly jako čtyři semafory a také to, aby šel modul zapojit přímo na RD2 Kit (drátování by bylo složité – je potřeba 13 kontaktů). Desku jsem nakonec navrhl takto:
Tento obrazec rovnou leptáme. Není třeba žádný zrcadlový výkres (vizte kapitolu 3.6.).
3.4. Leptání Obrazec plošného spoje přeneseme oblíbeným způsobem na desku a leptáme v
oblíbené žíravině. Já jsem použil vyříznutí ze samolepicí fólie a leptal jsem v ohřátém chloridu železitém. Před leptáním je vhodné desku osmirkovat.
3.5. Vrtání Vrtáme vrtákem 0,8mm všechny díry kromě plošek na LED.
3.6. Osazení
Osazujeme podle tohoto plánku. Lištu s konektory musíme osadit co nejpřesněji, protože musí přesně sednout do RD2 Kitu. Odpory osazujeme normálně a LED připájíme shora, protože by nebyly vidět.
3.7. Oživení Postupně přikládáme napětí kolem 5V na konektor a LED by měly svítit.
3.8. Psaní software ●
Budeme potřebovat počítač PC, alespoň 48MB RAM a 233MHz procesor s Windows 98 nebo NT (2000, XP...), možný je i Linux, buď použít kompilátor C pro Linux a Flip pro Linux (tuším že je ke stažení na webu Atmelu), případně máme puštěná Windows pod emulátorem (můj případ – Ubuntu + Qemu)
●
Kompilátor C – já používám Keil, ale je i spousta jiných
●
Flasher – používám Atmel Flip na Windows
●
Zdrojový kód: tady ho otisknu, potom ho dám někam ke stažení nebo přinesu na flashdisku
/*************************************************************************\ * S e m a f o r y ř í z e n á k ř i ž o v a t k a * \*************************************************************************/ #include "mcu.h" // vložíme hlavičkový soubor pro kontrolér /************************************\ | Č P3_3 | | Ž P3_1 | | Z P1_7 | | Č P3_5 Č P1_6 | | Ž P1_0 Ž P3_0 | | Z P1_2 Z P3_2 | | Č P1_5 | | Ž P1_4 | | Z P1_1 | |------------------------------------| | Úchvatná tabulka rozmístění LEDek | | na desce. | \************************************/ #define #define #define
HorniCC HorniZZ HorniZ P1_7
P3_3 P3_1
#define #define #define
LevaCC P3_5 LevaZZ P1_0 LevaZ P1_2
#define #define #define
PravaCC PravaZZ PravaZ P3_2
P1_6 P3_0
#define #define #define
DolniCC DolniZZ DolniZ P1_1
P1_5 P1_4
void DelayUs(unsigned char i) { while(--i){}; } void DelayMs(unsigned int i) { while(i--) { DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); } } void CekejS(unsigned int i) { while(i--) { DelayMs(1000); } }
// definujeme LEDky
// bystří si jistě všimli, že CC je Č a ZZ je Ž
// tyto funkce se nám budou hodit; z názvu je patrné, // co dělají
unsigned int DlouhyCyklus = 10; unsigned int KratkyCyklus = 1; unsigned int BezProvozu = 3;
// jak dlouho bude trvat dlouhý cyklus // jak dlouho bude trvat krátký cyklus // jak dlouho bude trvat čas bez provozu
void main( void ) // hlavní funkce { P3=0; // na začátku programu si pro kontrolu rozsvítíme všechny P1=0; // LEDky, abychom viděli, že vše funguje CekejS(3); // potom 3s čekáme while(1) // a potom už následuje samotný cyklus semaforů, { // který se bude donekonečna opakovat P3=255; // nic nesvítí... P1=255; // ...nic nesvítí HorniCC=0; // nahoře a dole bude červená DolniCC=0; LevaZ=0; // a vlevo a v pravo bude zelená PravaZ=0; CekejS(DlouhyCyklus); // a čekáme P3=255; // všechno se vypne... P1=255; // ...všechno se vypne LevaZZ=0; PravaZZ=0; HorniCC=0; DolniCC=0; CekejS(KratkyCyklus); P3=255; P1=255; HorniCC=0; DolniCC=0; LevaCC=0; PravaCC=0; CekejS(BezProvozu); P3=255; P1=255; HorniCC=0; DolniCC=0; LevaCC=0; PravaCC=0; HorniZZ=0; DolniZZ=0; CekejS(KratkyCyklus); P3=255; P1=255; HorniZ=0; DolniZ=0; LevaCC=0; PravaCC=0; CekejS(DlouhyCyklus); P3=255; P1=255; HorniZZ=0; DolniZZ=0; LevaCC=0; PravaCC=0; CekejS(KratkyCyklus); P3=255;
P1=255; HorniCC=0; DolniCC=0; LevaCC=0; PravaCC=0; CekejS(BezProvozu); P3=255; P1=255; LevaCC=0; PravaCC=0; LevaZZ=0; PravaZZ=0; HorniCC=0; DolniCC=0; CekejS(KratkyCyklus); } } // ---------------------------- End Of File ------------------------------// ●
Program přeložíme a nahrajeme do mikrokontroléru. Dokumentace v příručce k RD2 Kitu
3.9. Vyzkoušení Po nahrání připojíme modul (pozor – program nelze nahrávat při připojeném modulu – modul blokuje port P3), přehodíme jumper a Kit resetneme. Měly by se na chvilku rozsvítit všechny LED a potom by už měl najet cyklus semaforů. 3.10. Ochranný lak a proč ne Modul můžeme natřít speciálním ochranným lakem, ale nedoporučuji to, protože lak je nepájivý, a proto ho natřeme radši jenom kalafunou rozpuštěnou v lihu. Je pravděpodobné, že například budeme chtít vyměnit barvu LED. 3.11. Bezpečnost Výrobek je napájen ze síťového adaptéru a proto není nebezpečný.
4. Odstraňování chyb Pokud LED nesvítí, proměříme je, jestli nejsou opačně nebo jestli nejsou přepálené. RD2 Kit můžeme překontrolovat nahráním nějakého příkladu, který se k němu dodává. Pokud se s Kitem nemůžeme spojit, zkontrolujeme kabel a správnost nastaveného portu.
5. Závěr 5.1. Použitý software Při vývoji dokumentace byl použit následující software: ●
OpenOffice.org
●
CorelDraw (návrh spoje) ve Qemu
●
Gimp
●
Firefox
Dále byl použit software popisovaný v dokumentaci (Keil, Atmel Flip...)
5.2. Kontakt Můžete mě kontaktovat na mail
[email protected]