Avr lépésről lépésre
Ezt a témát három részre osztjuk. Az elsőben megtudhatjuk, hogyan csatlakoztatjuk az eszközt egy számítógéphez, és megteszi, hogy megértse, hogy a számítógép átmásolja a COM portot vagy az USB-n keresztül. A másodikban egyszerű programot fogunk írni a Delphi számára a könnyebb munkakörülmények érdekében. És végül, a harmadikban a számítógép kapcsoló áramkörét a 220V-os izzóhoz csatlakoztatjuk.
Először a COM-port protokollról. Anélkül, hogy felesleges technikai részletekre térnének, azt mondom, hogy a protokoll nagyon rugalmas, sok "tollat", "csavarodást" és más speciális beállításokat. Amire nincs szükségünk. A legtöbbjük nagyon egyedi, ezért csak szegfűvel öltjük meg őket, és azt mondjuk, hogy kommunikálni kell a számítógépével, amit meg kell tennie, és nem másképp. Az egyetlen pedál, amit meg kell nyomni, az az árfolyam. újra részletek nélkül - itt van az a formula, amellyel kiszámíthatja a pedál nyomásának erejét:
"Divider" = "kvarc frekvencia" / (16 * "sebesség" -1)
Minél közelebb áll az "osztó" az egész számhoz, annál jobb.
"Sebesség" a csere. az 1200, 9600, 14400.57600 számok mondanak neked valamit? Nem? Nem létezik archaizmus a számítógépen, mint a COM port? Hát, nem fogunk ragaszkodni. Vegyünk egy egyszerű adaptert egy olyan illesztőprogrammal, amely létrehoz egy virtuális COM portot a számítógépen. Ehhez olvassa el az adapteren található cikket. Most csatlakoztassa az adapter Tx kimenetét (9) az Rx bemenetre (8). Csatlakoztassa a számítógépet. Nyissa meg a HyperTerminal programot. Állítsuk be az adatátviteli sebességet 19200-ra, és próbáljuk megnyomni a gombokat. Ha mindannyian megtettük a jogot, az általunk beírt szimbólumokat a programablakban kell megjeleníteni.
"Kvarc frekvenciája" - ez vagy a kvarc rezonátor frekvenciája, ha használja, vagy a mikroáramkör belső RC generátorának frekvenciája. Van azonban egy árnyalat. és ez az újonnan érkezettek nagy részét megbotlik. Az ATtiny2313 chipnek van egy belső frekvenciaosztója a kvarc számára. Ezt mindkét biztosíték (konfigurációs bit) és vezérlőregiszter vezérli. Ezért figyelembe kell venni a frekvenciaosztást 8-mal, vagy azonnal le kell kapcsolni az osztót.
Figyelem! ezt feltétlenül meg kell tenni! egyébként egy bummer.
Továbbá itt írunk vagy töltünk le ilyen szerény programot.
; ------------------------------------------------- ---------
, telepítse a chipek lábainak egy részét a "kilépési" állapotba,
, és része a "bemenet"
bemenetek - tű 02,03,06,07,08,09,11
kimenetek - pin 12,13,14,15,16,17,18,19
Init: ldi SlopReg, 0b11111111; a kilépési jelet szállítjuk
ki DDRB, SlopReg; a kontrollregiszterben
; "B" kikötő
ldi SlopReg, 0b00000010; betöltjük a bejárat jelét
ki DDRD, SlopReg; a gyakorlat nyilvántartásában. "D" kikötő
ldi SlopReg, 0b11111111; betöltjük a "tevékenység" jelét,
ki PortD, SlopReg; a bemeneti regiszterben
; ------------------------------------------------- ---------
; az USART távadó előkészítése
; kivéve, ha az osztónak nem kell megváltoztatnia semmit, mindent úgy konfigurálnak, hogy számítógéppel dolgozzanak.
; a megszakításokat nem használják.
; bemenet RXD-PD0 (pin2), kimenet TXD-PD1 (pin3)
ldi SlopReg, 0; 19200 baud a kvarc rész 8 megahertz
ki UBRRh, SlopReg; USART osztó = 25
ldi SlopReg, 25; töltse ki az UBRR regisztert
ki UBRRl, SlopReg; nem megfeledkezve arról, hogy a mérete 2 bájt
ldi SlopReg, 0b00000110; 8 bit. 1 stop. egyenlőség nélkül
ki UCSRC, SlopReg; töltse ki az UCSRC ellenőrzési nyilvántartását
ldi SlopReg, 0b00011000; a fogadás és továbbítás jelzései megengedettek.
out UCSRB, SlopReg; töltse ki az UCSRB vezérlőregisztert
; ------------------------------------------------- ---------
; Olvassa el a bájtot a COM portról, és hiba nélkül fogadja
; megjelenik a "monitoron" és elküldi COM-portnak visszhangként.
ldi ViewReg, 0xff; a kiindulási állapotot és
out PortB, ViewReg; megjelenik a "képernyőn"
; ----------------------------------------------
NoData: SlopReg, UCSRA; Olvassa el az USART állapotregisztert
bst SlopReg, RXC; és tárolja a byte elfogadó zászlót.
brtc NoData; ha a tárolt zászló nincs beállítva
; akkor várjon újra.
; ----------------------------------------------
; ha a karaktert elfogadják, akkor
bst SlopReg, FE; emlékezzen a hibajelzőre.
a ViewReg, UDR; és olvassa el a fogadott bájtot
brts NoData; ha a hibajelző be van állítva
; ne jelenjen meg a szimbólum, de várjon a következőre
; ----------------------------------------------
; ha a hibajelző nincs beállítva -
out PortB, ViewReg; megjelenik a "képernyőn"
ki UDR, ViewReg; majd visszhang formájában visszhangzik.
; ----------------------------------------------
rjmp NoData; és újra egészséges.
vége:
; ================================================= =========
Aztán egy kicsit shaga4 véglegesítése rendszer (kreatív megfélemlítés), amely össze van kötve a mester adapter USB - COM (TTL) a következő elv szerint - azt csatlakoztassa az adaptert föld (7) áramköri föld; Tx kimenetre (9) az adapter bemeneti RxD (2) a chip; bemeneti adaptert és Rx (8) a TxD kimeneti áramkör (3).
Most csatlakoztassa a tápellátást, helyezze be az adapterünket a számítógép USB portjába, nyissa meg a terminál programot. Például a HyperTerminal a Windows szabványos szoftveréből. Megírjuk, milyen értelmetlen, és látjuk az összes szimbólumot bináris formában: nulla az égő LED-nek felel meg, és 1 kihalt.
Ez csak annyit mondhatunk, hogy megcsináltuk a sajátunkat, most rendezzük át a programot.
Valójában ez a program az előző lépésből származó program feldolgozása. Az egyetlen új parancs, amit használ, brts és brtc. Mindkét parancs feltételes ugrást biztosít a "T" jelző állapotában. A "T" jelző zászló a zászlók ideiglenes tárolásához. Elég kényelmes dolog. A bst paranccsal bármilyen bitet átmásolhat a "T" jelzőre, és a "b" parancs segítségével beillesztheti a "T" jelzőt a munkadarab bármelyikébe. A "T" jelző állapotától függően feltételes átmenetet hajthatunk végre. A brts parancs átmenetet hajt végre, ha a zászló értéke (= 1), és a brtc parancs éppen ellenkezőleg - amikor a zászló nulla.
Ezenkívül a program UART eszközt használ. Ez a készülék képes továbbítani az adatokat a soros kódot, és vezérelhető nyilvántartások UBRR ($ 02: $ 09), UCSRA ($ 0B), UCSRB ($ 0A), UCSRC ($ 03), UDR ($ 0C). A processzor betölti a UBRR Register - osztó értékét (megjegyzendő, hogy ez a regiszter szélessége két byte!), Majd beállítja az UART írásban regisztrálni UCSRC egyes zászlókat. (Value 0b00000110 - mit kell kommunikálni a számítógéppel). és „magában foglalja” bejegyzést a készülék regiszter bitek UCSRC engedélyt átviteli és vételi (0b00011000). UART eszköz működhet megszakítás, de gyűjtünk egy egyszerű program - megszakítás nem vagyunk érdekeltek. Tól UCSRA nyilvántartásban, akkor feltételezhetjük, hogy a gép állapotára vonatkozó információkat.
Most elemezzük részletesebben a program működését. Az első szakaszban már ismert a mikroáramú vezetékek inicializálása. A B portot kimenetként, és a D port bemenetként. A második részben egy soros adatátviteli eszköz van inicializálva. A programban beállított paraméterek: 19200 baud, 8 bit, 1 stop bit, nincs paritás. A szakasz végén a készülék bekapcsol. Figyelem! amint a készülék be van kapcsolva - a chip pin2 és pin3 csapjait leválasztják a D portról, és elkezdik használni az UART-ot. Vagyis ezek a következtetések próbálnak olvasni valamit a D kikötőn keresztül, megmutatják, hogy ezek a "lábak lógnak a levegőben", azaz nem kapcsolódnak semmihez.
A fő hurokban a program ellenőrzi, hogy az új bájt érkezett-e meg a számítógépről az RXC jelző ellenőrzése az UCSRA állapotregiszterben. Ha a zászló felemelkedik, akkor a bájt érkezett, és az UDR adattárból olvashatjuk. Miután leolvastuk a regisztert, a vett bájtot a "B" portra továbbítjuk. Ennek eredményeként megjelenik a 8 képpontos képernyőn. Ezenkívül, a billentyűzet bemenetéről "echo" létrehozása érdekében a fogadott szimbólumot ismét a számítógéppel továbbítjuk. Annak érdekében, hogy az UART továbbítsa az adatokat, egyszerűen írja az UDR adatregiszterbe.
Ez a program logikája. Valójában még mindig sok buktató van. Például a soros protokollon keresztül történő továbbítás sebessége jóval alacsonyabb, mint a processzor sebessége, és elvben ellenőrizni kell az adókészülék zászlóját minden új szimbólum elküldése előtt. Azonban a program nagyon logikája (az átvitel nem indul el gyakrabban, mint a fogadás) lehetővé teszi számunkra, hogy nélküle.
Elvileg minden fenti példa egyértelműen kimutatja, hogy még olyan komoly alkalmazások esetében is, mint a számítógép használatával, alapvetően korlátozhatjuk magunkat egy minimális tudáshalmazra. Több parancs, több eszköz "a fedélzeten", több regiszter. De nem tapasztaltunk olyan koncepciókat, mint a szubrutin, a megszakítás, a RAM-munka és a nem felejtett memória (és általában nem vettük figyelembe a memória elosztását). Még nem érintkeztünk a számlálókkal, a komparátorokkal vagy a legtöbb egyéb "fedélzeti" eszközzel. Mindezekből azt a következtetést vonhatjuk le, hogy egy konkrét probléma megoldása érdekében az AVR-t nem kell ismerni. Ez a technológia egyik előnye.