![]() |
Hello!
Üdvözöllek az Atmel AVR mikrokontroller-családjára épülõ kapcsolásaim lapján! Már most szeretném leszögezni, hogy nem vagyok guruja sem az elektronikának sem a mikroprogramozásnak, csupán kellõen érdekel a téma ahhoz, hogy saját szórakoztatásomra foglalkozzak vele.
Sajnos nem kerülhetett fel ide minden általam összeeszkábált áramkör leírása, mivel többségük NYÁK rajza, firmware-je már sajnos nincs meg. De amint sikerül elõbányásznom valamit és megfelelõ formába öntenem, az felkerül erre a lapra.
Legfontosabb projektemmel az SMServant-tal, mely TDK munkám és szakdolgozatom is egy külön oldalon foglalkozom, melyet a fõlapról elérhetsz.
A lap tartalma:
Az AVR az Atmel egy RISC architektúrájú mikrokontroller-családja, melynek tagjai beépített flash memóriával rendelkeznek, így ideálisak "code and try" jellegû fejlesztésekhez. Ezt segíti az "In-System Programable" tulajdonságuk is, azaz a programmemória módosításához nem szükséges a chipet eltávolítani az áramkörbõl, az egy SPI soros interfészen keresztül elvégezhetõ. Így a végleges kód kialakulásához vezetõ iterációk leegyszerûsödnek, felgyorsulnak. Az AVR-ek utasítás készlete egyszerû és az utasítások nagy része egyetlen órajel-ciklust igényel. A memória kezelésük a Harvard architektúrát követi (külön adat- és program memória). "Hobbistáknak" elõnyös tulajdonságuk továbbá, hogy kapatóak DIP tokozású változatban is.
Az AVR család tagja jóformán csak beépített perifériáikban különböznek egymástól. Én a két "végeletet" használtam eddig: A legolcsóbb (~550 HUF) és legegyszerûbb AT90S1200-at és a "fullextrás" AT90S8535-öst. Ezek néhány tulajdonsága:
-AT90S1200: 1kB (512 szó - merthogy szószervezésûek) flash programmemória; 64B EEPROM; 32 általános célú regiszter; 8-bites timer; analóg komparátor; 15 I/O vonal; külsõ-belsõ megszakítások saját vektorokkal.
-AT90S8535: 8kB flash programmemória; 512B EEPROM; 512B SRAM; 32 általános célú regiszter; 8 csatornás, 10 bits A/D átalakító; két 8 bites, egy 16 bites timer; analóg komparátor; soros port (UART); master/slave SPI interfész; 32 I/O vonal; külsõ-belsõ megszakítások saját vektorokkal.
A chipeket én általában a Codix-nál szoktam megvenni. Nem akarom nagyon reklámozni õket - semmivel nem támogatták az oldalt. Sõt!
A teljes fejlesztõkörnyezet (AVR Studio) és a dokumentációk INGYENESEN letölthetõek a www.atmel.com-ról. Az "Application notes" részleget is érdemes nézegetni. Az itt található példák ugyanis szabadon felhasználhatóak és alkalmazásukkal sok idõt megtakaríthatunk. Mellesleg ezek kipróbált kódok.
Az AVR Studio alapból az Assembly nyelvet támogatja, azonban a netrõl leszedhetõ hozzá C fordító is. Bevallom, én ez utóbbit nem próbáltam, tekintve, hogy az ASM-et preferálom, de akit érdekel a www.avrfreaks.net-en sok anyagot talál ezzel kapcsolatban.
Jól jöhet egy NYÁK tervezõ program. Én egy egyszerû, ingyenesen IS használható programot az EAGLE-t. Az ingyenes változata az elkészítendõ NYÁK méretében, illetve a rétegek számában limitált. Legfrisseb verziója letölthetõ a fejlesztõ weboldaláról: www.cadsoft.de.
Kellene egy programozó is. Íme az AVR-ek újabb elõnye: Az "In-System" programozó 500 Ft-ból összedobható. Én Claudio Lanconelli (www.lancos.com) kapcsolási rajzához terveztem egy nyákot.
A programozó kapcsolási rajza (PDF)
A programozó NYÁK terve (EAGLE)
Ezen programozó segítségével az AVR Studio-val létrehozott Intel HEX fájlok feltölthetõk a mikrokontrollerbe a szintén Claudio Lanconelli által írt Windows-os PonyProg segítségével.
A TeleCODE egy telefonvonal-védelmi berendezés, mely a jogosulatlan használatot igyekszik akadályozni. Lényege, hogy csak akkor engedélyez hívást kezdeményezni, ha elõtte beütöttük a megfelelõ kódot. Amennyiben ez nem történt meg úgy szakítóimpulzusok kibocsájtásával akadályozza a hívást. Tudom, nem egy elegáns megoldás, de így a készülék a vonalra párhuzamosan kapcsolva bárhol elhelyezhetõ.
Ja: Mivel a készüléket a Hírközlési Fõfelügyelet nem engedélyezte ezért tilos a DRÁGA Matáv vonalaira kapcsolni.
Néhány szóban a TeleCODE használatáról
Fontos tudni, hogy minden 1-essel kezdõdõ szám (like 104, 105, 107, 112, ) hívását a készülék minden esetben engedélyezi.
Hívás kezdeményezése:
* -> A helyes kód 4 számjegye -> Vonalbontás (Kagyló
le)
Ezek után a következõ
kagylófelemeléskor bármely szám hívható.
Azonban ha ekkor nem történik tárcsázás, a
vonal akkor is letiltódik vonalbontáskor. A TeleCODE semmilyen
módon nem jelzi, hogy a megadott kód helyes-e, ezzel lassítja
a "vak" próbálkozásokat. A "gyári"
alapértelmezés szerint a kód: 1234
A kód megváltoztatása:
# -> A helyes kód 4 számjegye -> * -> Az új kód
4 számjegye -> * -> Az új kód megismételve
-> # -> Vonalbontás
Pl: Változtassuk meg az alapértelmezett kódot 4321-re!
A szekvencia tehát: #1234*4321*4321#
A kódot a TeleCODE memóriája áramkimaradás esetén is megõrzi (kb 100 évig), elfelejtése esetén csak a beépített mikrokontroller programozójával lehet kiolvasni a kódot.
A TeleCODE elõnyei:
- Nincs havidíja
- Nem kerül pénzbe a kód megváltoztatása (Nem
úgy, mint a DRÁGA Matáv-nál)
- Csak egyetlen hívást engedélyez, így nem fordulhat
elõ, hogy a vonal "kikódolva" marad és a vonal
szabad prédává válik.
A TeleCODE hátrányai:
- Áramkimaradás idején nem üzemel
- Ha valaki leválasztja a telefonvonalról (pl. agresszív
diszlokáció) a védelem megszûnik
- Kizárólag analóg telefonvonalakon mûködik
Üzembe helyezés:
Egyszerûen párhuzamozan rá kell kapcsolni a telefon vonalra.
Nem ártpersze elrejteni, hogy ne lehessen babrálni (pl. áramtalanítani).
Ja és villanyáram is kellene. Megeszik bármit (egyen és
váltó) 8 és 15 V között, polaritástól
függetlenül.
Az áramkör a Mitel MT8870 típusú DTMF dekóderére épül. Ez a chip néhány külsõ alkatrész segítségével egyszerû DTMF dekódolást tesz lehetõvé, az eredményt pedig 4 bites formában biztosítja. STD (15) kimenetének magas szintje jelzi a sikeres dekódolást.
A dekódolási eredményeket egy AT90S1200 típusú mikrokontroller dolgozza fel. A helyes kódot EEPROM-jának elsõ négy bájtja tárolja. A feltöltést során ezt ne felejtsük el beállítani!
Az áramkör kétoldalas NYÁK-on került megvalósításra. Tervezésekor fontos szempont volt, hogy furatgalvanizálás nélkül is megvalósítható legyen. Így az átvezetések sohasem esnek alkatrész lábakra, és szögletes forrpontok jelölik helyüket (kivéve az optocsatoló 1-es lábát - az nem átvezetés).
Az MT8870-et a Codix-nál sikerült beszereznem (~350 HUF), a hozzá szükséges kvarcot pedig a ChipCAD-nél vettem (~150 HUF).
A TeleCODE kapcsolási rajza és NYÁK terve
Régi telefonok esetén elõfordul, hogy a vonalbontáskor keletkezõ sistergést a TeleCODE több kagyló fel - kagyló le eseménynek érzékeli, így a helyes kód megadása esetén sem engedélyez hívást.
Nem célszerû közvetlenül az ADSL splitter közelében bekötni, ugyanis tapasztalataim szerint az nagyon megszórja a TeleCODE-ot, hibás mûködést eredményezve ezzel.
Az alfanumerikus LCD modulok közül egy család terjedt el igazán: A Hitachi HD44780, vagy azzal kompatibilis vezérlõvel rendelkezõké. Ez a vezérlõ egységes felületet és vezérlési lehetõségeket biztosít a különbözõ méretû moduloknak. Mivel a mûködtetéshez szükséges összes funkció bele van integrálva eme vezérlõbe, ezért egy minimális rendszer is képes üzemeltetni.
A KS0066 alapú modulok tapasztalataim szerint csupán karakterkészletükben különböznek a HD44780 alapúaktól. Azért emeltem ki õket mégis, mert az EDT 162G0GR típusú modulja is erre a chipre épül és ezt a modult igen jó áron (~1800 HUF) be lehet szerezni a ChipCAD-nél.
1 GND Föld 2 VCC Táp 3 Vo Az LCD mátrix tápfeszültsége 4 RS 0-Utasítás; 1-Adat 5 R/W 0-Adat írás a modulba; 1-Adat olvasás a modulból 6 E Az LCD modul engedélyezõ jele 7 DB0 Adatvezetékek 8 DB1 9 DB2 10 DB3 11 DB4 12 DB5 13 DB6 14 DB7
A modulok vezérlésérõl itt nem írnék, mivel az elég részletesen be van mutatva a lejjeb letölthetõ specifikációkban (Bocs!). Inkább pár szóban bemutatnám az általam írt LCD kezelõ rutinok használatát.
Ezen rutinok eredetileg az SMServant fejlesztésekor kerültek felhasználásra - onnan ollóztam ki õket. 4MHz-re lettek tervezve - ez az idõzítések miatt fontos. Az LCD adatbusza a Port B-re van kötve, az RS a PD4-en, az E pedig a PD5-ön van. (Ezek az ASM elején módosíthatóak) Az RW földre van kötve. Ezzel a megoldással ugyan elvesztjük a foglaltság-ellenõrzés lehetõségét, de megspórolunk egy lábat és megfelelõ idõzítések alkalmazásával nem érezzük a BUSY flag hiányát.
LCDInit
Inicializálja a modult 2X16-os, 8 bites üzemmódban. Kikapcsolja
a kurzor és bekapcsolja az automatikus cím inkrementálást.
LCDCommand
A memóriába leképzett LCD_Temp változó tartalmát
parancsként kiküldi az LCD-nek.
LCDChar
Az LCD_Temp tartalmát
karakterként kiküldi az LCD modulnak.
LCDString
A Z-pointerben meghatározott címrõl megkezdi egy nulla
végû string kiíratását az aktuális
kurzorpozíciótól kezdõdõen.
LCDCurPos
A Temp regiszterben meghatározott
számú sorba és a Temp2 tartalma szerinti oszlopba pozícionálja
a kurzort.
LCDDec
A Temp tartalmát decimális formában kiírja az LCD-re,
a bevezetõ nullákat elhagyva.
LCDDec16
16 bites számot jelenít
meg az LCD-n, a bevezetõ nullákat elhagyva. A szám felsõ
bájtját a Temp2-bõl, míg alsó bájtját
a Temp-bõl olvassa.
LCDBinary
A Temp regiszter tartalmát bináris alakban kiírja az LCD-re,
a kurzor aktuális pozíciójától kezdõdõen.
Bekapcsolás után írjuk ki a második sorba azt, hogy "Hello"!
rcall LCDInit
ldi Temp, LCDCMD_Line2
sts LCD_Temp, Temp
rcall LCDCommand
ldi ZH, high(2*String)
ldi ZL, low(2*String)
rcall LCDString
Loop:
rjmp Loop
String: .db "Hello",0
EDT 162G0GR LCD modul specifikáció
KS0066 alapú LCD modulok vezérlése (EDT)
HD44780 alapú LCD modulok vezérlése (EDT)
LCD modul kezelõ rutinok AVR-ekhez
Copyright Dobróka
Zoltán 2003.
zooly@freemail.hu