Kazalo:
- 1. korak: Kako se lahko dva mikrokrmilnika pogovarjata?
- 2. korak: Komunikacijske podprograme
- 3. korak: Zaključek
Video: Vadnica za zbiralnik AVR 6: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Dobrodošli v vadnici 6!
Današnja vadnica bo kratka, kjer bomo razvili preprosto metodo za prenos podatkov med enim atmega328p in drugim z uporabo dveh vrat, ki ju povezujeta. Nato bomo vzeli valj za kocke iz vadnice 4 in analizator registra iz vadnice 5, jih povezali skupaj in po naši metodi sporočili rezultat zrcaljenja kock z valjčka v analizator. Nato bomo zvitek natisnili v binarnem formatu z uporabo LED diod, ki smo jih izdelali za analizator v vadnici 5. Ko bomo to opravili, bomo lahko v naslednjem vodiču zgradili naslednji del našega celotnega projekta.
V tej vadnici boste potrebovali:
- Vaša prototipna deska
- Vaš vadnik za kocke iz vadnice 4
- Vaš analizator registra iz vadnice 5
- Dve povezovalni žici
-
Kopija celotnega podatkovnega lista (revizija 2014):
www.atmel.com/images/Atmel-8271-8-bit-AVR-M…
-
Kopija priročnika z navodili (revizija 2014):
www.atmel.com/images/atmel-0856-avr-instruc…
Tukaj je povezava do celotne zbirke mojih vadnic za zbiranje AVR:
1. korak: Kako se lahko dva mikrokrmilnika pogovarjata?
Ker začenjamo širiti naš projekt, tako da je naš končni izdelek sestavljen iz zbirke manjših delov, bomo potrebovali več zatičev, kot jih lahko zagotovi en sam Atmega328P. Zato bomo vsak del celotnega projekta naredili na ločenem mikrokrmilniku in jih nato delili med seboj. Problem, ki ga moramo rešiti, je, kako lahko pridemo do preproste metode, s katero se upravljavci pogovarjajo med seboj in prenašajo podatke med njimi? No, ena stvar pri teh krmilnikih je, da vsak izvede 16 milijonov navodil na sekundo. Ta čas je zelo natančen, zato ga lahko uporabimo za prenos podatkov. Če za sestavo podatkov uporabimo zamike v milisekundah, potem nam res ni treba biti tako natančen, saj CPE v eni milisekundi izvede 16 000 navodil. Z drugimi besedami, milisekunda je za CPU večnost. Poskusimo torej z zvitki kock. Želim posredovati rezultat udarca kocke iz čipa za kocke na čip analizatorja. Recimo, da stojiš čez cesto in hotel sem ti sporočiti rezultat mojega bacanja para kock. Ena stvar, ki bi jo lahko naredil, če bi imela oba uro, je, da lahko prižgem svetilko, potem ko ste pripravljeni na sprejem mojih podatkov, vklopite svetilko in oba zaženeva ure. Potem držim svetilko prižgano točno toliko milisekund, ko se kocke vržejo, in jo nato ugasnem. Torej, če bi zavil 12, bi imel luč prižgano 12 milisekund. Zdaj je problem z zgoraj navedenim, da za vas in mene ne moremo dovolj natančno določiti časa, da bi razlikovali med 5 milisekund in 12 milisekunde. Kaj pa tole: Recimo, da se odločimo, da bom eno leto prižgala luč za vsako številko na kocki? Če bi potem zvrnil 12, bi vam 12 let osvetljeval luč in mislim, da se boste strinjali, da ni možnosti, da bi se zmotili pri določanju številke, kajne? Lahko si vzamete odmor in se igrate baseball, celo šest mesecev bi se lahko igrali v Vegasu, dokler bi v nekem trenutku med letom pogledali čez cesto, da vidite, ali je prižgana luč, ne boste zgrešili štetja. No, točno to počnemo za mikrokrmilnike! Ena milisekunda za CPU je približno eno leto. Torej, če vklopim signal za 12 milisekund, skoraj ni možnosti, da bi ga drugi mikrokrmilnik zamenjal za 10 ali 11, ne glede na to, kaj se vmes prekine in kaj ne. Za mikrokrmilnike je milisekunda večnost, zato bomo naredili tukaj. Najprej bomo za komunikacijska vrata izbrali dve vrati na krmilniku. Za sprejem podatkov bom uporabil PD6 (če želimo) lahko imenujemo Rx in za prenos podatkov bom izbral PD7 (po želji bi ga lahko poimenovali Tx). Čip analizatorja bo občasno preverjal svoj Rx pin in če bo videl signal, bo padel na "komunikacijsko podprogram" in nato preusmeril povratni signal na valjček za kocke, češ da je pripravljen za sprejem. Oba bosta začela meriti čas in valjček za kocke bo poslal signal (to je 5V) za milisekundo na število na kocki. Torej, če je bil zvitek dvojne šestice ali 12, bi valjček za kocke nastavil svoj PD7 na 5V za 12 milisekund in ga nato nastavil na 0V. Analizator bo vsako milisekundo preverjal svoj pin PD6, vsakič odšteval, in ko se bo vrnil na 0V, bo nato prikazalo nastalo število na zaslon analizatorja, pri čemer bo na LED diodah prikazano dvanajst. Poglejmo, ali ga lahko izvedemo.
2. korak: Komunikacijske podprograme
Najprej moramo povezati oba krmilnika. Torej vzemite žico iz PD6 na eni in jo priključite na PD7 na drugi in obratno. Nato jih inicializirajte tako, da nastavite PD7 na OUTPUT na obeh in PD6 na INPUT na obeh. Na koncu vse nastavite na 0V. Natančneje, v razdelek Init ali Reset kode na vsakem mikrokrmilniku dodajte naslednje:
sbi DDRD, 7; PD7 nastavljen na izhod
cbi PortD, 7; PD7 sprva 0V cbi DDRD, 6; PD6 nastavljen na vhod cbi PortD, 6; PD6 sprva 0V clr skupaj; skupaj na kockah sprva 0
Zdaj pa nastavimo komunikacijsko podprogram na čipu za kocke. Najprej določite novo spremenljivko na vrhu, imenovano "skupaj", ki bo shranila skupno število zvrženih na par kock in jo inicializirala na nič.
Nato napišite podprogram za komunikacijo z analizatorjem:
komunicirati:
cbi PortD, 7 sbi PortD, 7; Čakanje na signal za pošiljanje pripravljenosti: sbic PinD, 6; preberite PinD in preskočite, če 0V rjmp čaka zakasnitev 8; zakasnitev za sinhronizacijo (ugotovljeno eksperimentalno) pošlji: dec skupna zamuda 2; zamuda pri vsakem štetju smrti skupaj cpi, 0; 0 tukaj pomeni, da so bile poslane "skupne" zamude pri številkah breq PC+2 rjmp send cbi PortD, 7; PD7 do 0V clr skupaj; ponastavi kocke skupaj na 0 ret
V analizatorju v podprogram komunikacije dodamo klic iz glavne rutine:
clr analizator; pripravi na novo številko
sbic PinD, 6; preverite, ali PD6 komunicira s klicem signala 5V; če gre 5V za komunikacijo analizatorja mov, skupaj; izhod na zaslon analizatorja rcall analizator
in nato podprogram komunikacije napišite na naslednji način:
komunicirati:
clr skupaj; ponastavi skupno 0 na zamudo 10; zamuda, da se znebite odskokov sbi PortD, 7; nastavite PB7 na 5V za signal pripravljenosti za sprejem: zamuda 2; počakajte na naslednjo številko skupaj; prirast skupaj sbic PinD, 6; če se PD6 vrne na 0V, smo sprejeli rjmp sprejem; drugače pa naredite varnostno kopijo za več podatkov cbi PortD, 7; ponastavite PD7, ko končate ret
Izvolite! Zdaj je vsak mikrokrmilnik nastavljen tako, da sporoča rezultat metanja kock in ga nato prikaže na analizatorju.
Mnogo učinkovitejši način komuniciranja bomo uvedli kasneje, ko bomo morali vsebino registra prenesti med krmilnike, namesto da bi le vrgli kocke. V tem primeru bomo še vedno uporabljali samo dve žici, ki ju povezujeta, vendar bomo uporabili 1, 1 za pomen "začeti prenos"; 0, 1 pomeni "1"; 1, 0 pomeni "0"; in končno 0, 0 pomeni "končni prenos".
Vaja 1: Preverite, ali lahko uporabite boljšo metodo in jo uporabite za prenos kocke kot 8-bitno binarno število.
Priložil bom video, ki prikazuje moje delovanje.
3. korak: Zaključek
Za vašo referenco sem priložil celotno kodo. Ni tako čist in urejen, kot bi si želel, vendar ga bom počistil, ko ga bomo razširili v prihodnjih vajah.
Od zdaj naprej bom samo priložil datoteke, ki vsebujejo kodo, namesto da bi vse tukaj vnesel. Samo vtipkali bomo razdelke, o katerih nas zanima razprava.
To je bila kratka vadnica, v kateri smo predstavili preprosto metodo, kako našemu mikrokrmilniku analizatorja povedati, kakšen je rezultat našega kockanja iz mikrokrmilnika za kocke, medtem ko uporabljamo samo dva vrata.
Vaja 2: Namesto da uporabite signal pripravljenosti za prikaz, kdaj je valjček za kocke pripravljen za prenos, in drugega, ko je analizator pripravljen za sprejem, uporabite "zunanji prekinitev", imenovano "Prekinitev pri menjavi pina". Zatiči na atmega328p se lahko uporabljajo na ta način, zato imajo poleg PCINT23 v diagramu pinout poleg PCINT0. To lahko izvedete kot prekinitev na podoben način, kot smo to storili s prekinitvijo časovnega prelivanja. V tem primeru bo "upravljavec prekinitev" podprogram, ki komunicira z valjčkom za kocke. Na ta način vam ni treba dejansko klicati komunikacijske podprograma iz main: ona bo tja, kadar pride do prekinitve zaradi spremembe stanja na tem pin -ju.
Vaja 3: Veliko boljši način komuniciranja in prenosa podatkov med enim mikrokrmilnikom v zbirko drugih je uporaba vgrajenega 2-žičnega serijskega vmesnika na samem mikrokrmilniku. Poskusite prebrati oddelek 22 podatkovnega lista in preverite, ali lahko ugotovite, kako ga implementirati.
Te bolj sofisticirane tehnike bomo uporabili v prihodnosti, ko bomo dodali še druge krmilnike.
Dejstvo, da smo z našim analizatorjem naredili le vsoto kocke in jo nato z LED diodami natisnili v binarni obliki, ni pomembno. Dejstvo je, da zdaj naš analizator "ve", kaj je kocka in ga lahko ustrezno uporabi.
V naslednji vadnici bomo spremenili namen našega "analizatorja", uvedli bomo še nekaj elementov vezja in na bolj zanimiv način uporabili kocko.
Do naslednjič…
Priporočena:
Raspberry Pi - TMD26721 Infrardeči digitalni detektor bližine Java Vadnica: 4 koraki
Raspberry Pi-TMD26721 Infrardeči digitalni detektor bližine Java Vadnica: TMD26721 je infrardeči digitalni detektor bližine, ki ponuja popoln sistem za zaznavanje bližine in logiko digitalnega vmesnika v enem samem 8-polnem modulu za površinsko montažo. Zaznavanje bližine vključuje izboljšan signal-šum in natančnost. Profesionalec
Vadnica za sestavljalec AVR 2: 4 koraki
AVT Assembler Tutorial 2: Ta vadnica je nadaljevanje " AVR Assembler Tutorial 1 " Če niste šli skozi vadnico 1, se ustavite in najprej naredite to. V tej vadnici bomo nadaljevali s preučevanjem programiranja montažnega jezika atmega328p u
Vadnica za zbiralnik AVR 8: 4 koraki
AVR Assembler Vadnica 8: Dobrodošli v vadnici 8! V tej kratki vadnici se bomo nekoliko oddaljili od uvajanja novih vidikov programiranja zbirnega jezika, da bi pokazali, kako svoje komponente prototipov premakniti v ločeno " natisnjeno " vezje.
Vadnica za zbiralnik AVR 3: 9 korakov
AVR Assembler Tutorial 3: Dobrodošli v vadnici številka 3! Preden začnemo, želim poudariti filozofsko točko. Ne bojte se eksperimentirati s vezji in kodo, ki jo ustvarjamo v teh vadnicah. Zamenjajte žice, dodajte nove komponente, vzemite komponente
UCL - IIoT - Zbiralnik podatkov o vlagi: 6 korakov
UCL - IIoT - Zbiralnik podatkov o vlagi: Ta navodila vam bodo dala informacije o vlagi iz umazanije, ki si jo boste lahko ogledali v uporabniškem vmesniku z rdečimi vozlišči, poleg tega bodo podatki zbrani in shranjeni v zbirki podatkov MySQL, to vam lahko pomaga pri učenju vzorcev zalivanja