Turinys:

AVR surinkėjo pamoka 6: 3 žingsniai
AVR surinkėjo pamoka 6: 3 žingsniai

Video: AVR surinkėjo pamoka 6: 3 žingsniai

Video: AVR surinkėjo pamoka 6: 3 žingsniai
Video: MKS Robin Nano v2.0 - A4988 or DRV8825 Install Guide 2024, Liepa
Anonim
AVR surinkėjo pamoka 6
AVR surinkėjo pamoka 6

Sveiki atvykę į 6 mokymo programą!

Šiandienos pamoka bus trumpa, kurioje mes sukursime paprastą metodą, kaip perduoti duomenis tarp vieno „atmega328p“ir kito, naudojant du juos jungiančius prievadus. Tada mes paimsime kauliukų ritinėlį iš 4 mokymo programos ir registrų analizatorių iš 5 mokymo programos, sujungsime juos ir naudosime savo metodą, kad perduotume kauliukų metimo iš ritinėlio į analizatorių rezultatą. Tada mes atspausdinsime ritinį dvejetainiu būdu, naudodami šviesos diodus, kuriuos mes sukūrėme analizatoriui 5 pamokoje. Kai atliksime šį darbą, galėsime sukurti kitą bendro projekto dalį kitoje pamokoje.

Šioje pamokoje jums reikės:

  1. Jūsų prototipų lenta
  2. Jūsų kauliukų volelis iš 4 pamokos
  3. Jūsų registrų analizatorius iš 5 mokymo programos
  4. Du jungiamieji laidai
  5. Viso duomenų lapo kopija (2014 m. Peržiūra):

    www.atmel.com/images/Atmel-8271-8-bit-AVR-M…

  6. Instrukcijų rinkinio vadovo kopija (2014 m. Peržiūra):

    www.atmel.com/images/atmel-0856-avr-instruc…

Čia yra nuoroda į visą mano AVR surinkėjo vadovėlių kolekciją:

1 žingsnis: Kaip galime priversti du mikrovaldiklius pasikalbėti?

Kaip priversti du mikrovaldiklius kalbėtis tarpusavyje?
Kaip priversti du mikrovaldiklius kalbėtis tarpusavyje?

Kadangi mes pradedame plėsti savo projektą taip, kad mūsų galutinį produktą sudarytų mažesnių dalių rinkinys, mums reikės daugiau smeigtukų, nei gali suteikti vienas „Atmega328P“. Todėl kiekvieną bendro projekto dalį atliksime atskirame mikrovaldiklyje ir tada pasidalinsime duomenimis tarpusavyje. Taigi problema, kurią turime išspręsti, yra tai, kaip galime sugalvoti paprastą metodą, kaip valdytojai galėtų kalbėtis tarpusavyje ir perduoti duomenis tarp jų? Vienas dalykas, susijęs su šiais valdikliais, yra tas, kad kiekvienas iš jų vykdo 16 milijonų nurodymų per sekundę. Tai labai tiksliai nustatytas laikas, todėl galime naudoti šį laiką duomenims perduoti. Jei duomenims sudaryti naudojame milisekundžių vėlavimus, mes tikrai neturime būti tokie tikslūs, nes procesorius vykdo 16 000 nurodymų per vieną milisekundę. Kitaip tariant, milisekundė procesoriui yra amžinybė. Taigi pabandykime su kauliukų ritiniais. Noriu perduoti kauliukų metimo rezultatą iš kauliuko ritinėlio mikroschemos į analizatoriaus mikroschemą. Tarkime, kad jūs stovėjote kitoje gatvės pusėje ir aš norėjau jums pranešti apie savo kauliukai. Vienas dalykas, kurį galėčiau padaryti, jei abu turėtume laikrodį, galėčiau įjungti žibintuvėlį, tada, kai būsite pasiruošę gauti mano duomenis, įjungsite žibintuvėlį ir abu pradėsime rodyti laikrodžius. Tada, kai kauliukas ridenasi, įjungiu žibintuvėlį tiksliam milisekundžių skaičiui ir tada jį išjungiu. Taigi, jei sukčiau 12, šviesą palaikyčiau 12 milisekundžių. Dabar problema, susijusi su tuo, kas išdėstyta aukščiau, yra ta, kad jums ir man niekaip nepavyks pakankamai tiksliai nustatyti laiko, kad būtų galima atskirti 5 milisekundes ir 12 milisekundžių. Bet ką apie tai: tarkime, mes nusprendėme, kad aš šviessiu vienerius metus už kiekvieną skaičių ant kauliuko? Tada, jei išmečiau 12, aš apšviesčiau jus 12 metų ir manau, kad sutiksite, kad nėra jokios galimybės, kad suklysite teisingai išsiaiškinę skaičių? Galite padaryti pertrauką ir žaisti beisbolą, netgi 6 mėnesius žaisti „Craps“žaidimus Las Vegase, jei tam tikru metų laiku pažvelgsite į gatvę ir pamatysite, ar dega šviesa, ar nepraleisite skaičiavimo. Na, būtent tai mes darome dėl mikrovaldiklių! Viena milisekundė procesoriui yra kaip metai. Taigi, jei įjungsiu signalą 12 milisekundžių, beveik nėra tikimybės, kad kitas mikrovaldiklis jį suklaidins 10 ar 11, nesvarbu, kas tuo metu pertraukia ir kas nenutinka. Mikrovaldikliams milisekundė yra amžinybė. Taigi štai ką mes darysime. Pirmiausia mes pasirinksime du valdiklio prievadus, kurie bus mūsų ryšio prievadai. Duomenims priimti naudosiu PD6 (jei norėtume tai pavadinti Rx), o duomenims perduoti pasirinksiu PD7 (jei norime, galėtume pavadinti Tx). Analizatoriaus mikroschema periodiškai tikrins, ar tai Rx kaištis, ir jei pamatys signalą, jis nukris į „ryšio paprogramę“, o tada perduos grąžinimo signalą kauliukų ritiniui, sakydamas, kad jis yra paruoštas priimti. Jie abu pradės skaičiuoti laiką, o kauliukų volelis perduos signalą (t. Y. 5 V) už milisekundę vienam skaičiui kauliukuose. Taigi, jei ritinys buvo dvigubas šešetas arba 12, tada kauliukų volelis nustatė PD7 į 5 V 12 milisekundžių ir tada nustatė jį atgal į 0 V. Analizatorius tikrins savo PD6 kaištį kas milisekundę, kiekvieną kartą skaičiuodamas, o kai jis grįš į 0 V, tada gautą skaičių išves į analizatoriaus ekraną, rodydamas dvyliką dvejetainių diodų. Taigi tai yra planas. Pažiūrėkime, ar galime tai įgyvendinti.

2 veiksmas: komunikacijos paprogramės

Pirmas dalykas, kurį turime padaryti, yra prijungti du valdiklius. Taigi paimkite laidą iš PD6 vienoje ir prijunkite jį prie PD7 kitoje ir atvirkščiai. Tada inicijuokite juos nustatydami PD7 į OUTPUT abiejuose ir PD6 į INPUT abiejuose. Galiausiai visus nustatykite į 0 V. Konkrečiai, prie kiekvieno mikrovaldiklio kodo skyriaus „Init“arba „Reset“pridėkite:

sbi DDRD, 7; PD7 nustatytas į išvestį

cbi PortD, 7; PD7 iš pradžių 0V cbi DDRD, 6; PD6 nustatytas kaip įvestis cbi PortD, 6; PD6 iš pradžių 0V clr iš viso; iš viso kauliukuose iš pradžių 0

Dabar nustatykime ryšių paprogramę kauliukų ritinėlio mikroschemoje. Pirmiausia viršuje apibrėžkite naują kintamąjį, vadinamą „iš viso“, kuris išsaugos bendrą kauliukų poros metimą ir inicijuos jį iki nulio.

Tada parašykite paprogramę, kad galėtumėte bendrauti su analizatoriumi:

bendrauti:

cbi PortD, 7 sbi PortD, 7; Siųsti parengtą signalą laukti: sbic PinD, 6; perskaitykite PinD ir praleiskite, jei 0V rjmp laukimo atidėjimas 8; uždelsimas sinchronizuoti (rasta eksperimentiškai) send: dec total delay 2; uždelsimas kiekvienam mirčių skaičiui cpi, 0; 0 čia reiškia „bendras“vėlavimų skaičius išsiųstas breq PC+2 rjmp send cbi PortD, 7; PD7 iki 0V clr iš viso; iš naujo nustatyti kauliukus iki 0 ret

Analizatoriuje prie bendravimo paprogramės pridedame rcall iš pagrindinės rutinos:

clr analizatorius; pasiruošti naujam numeriui

sbic PinD, 6; patikrinkite PD6, ar nėra 5 V signalo, skambinkite; jei 5V eina bendrauti su mov analizatoriumi, iš viso; išvestis į analizatoriaus ekraną „rcall“analizatorius

ir tada parašykite bendravimo paprogramę taip:

bendrauti:

clr iš viso; iš naujo nustatyti iki 0 uždelsimo 10; delsimas atsikratyti atšokimų sbi PortD, 7; nustatykite PB7 į 5 V, kad signalas būtų paruoštas priimti: 2 delsimas; laukti kito skaičiaus, iš viso; prieaugis bendras sbic PinD, 6; jei PD6 grįžta į 0V, baigiame gauti rjmp; kitaip sukurkite atsarginę kopiją, kad gautumėte daugiau duomenų cbi PortD, 7; iš naujo nustatykite PD7, kai baigsite

Štai taip! Dabar kiekvienas mikrovaldiklis yra nustatytas perduoti kauliukų metimo rezultatą ir parodyti jį analizatoriuje.

Vėliau, kai reikės perkelti registro turinį tarp valdytojų, o ne tik kauliukų metimą, diegsime daug efektyvesnį bendravimo būdą. Tokiu atveju mes vis tiek naudosime tik du laidus, jungiančius juos, bet 1, 1 reiškia „pradėti perdavimą“; 0, 1 reiškia „1“; 1, 0 reiškia „0“; ir galiausiai 0, 0 reiškia „galinis perdavimas“.

1 pratimas: pažiūrėkite, ar galite įgyvendinti geresnį metodą ir panaudoti jį kauliukų metimui kaip 8 bitų dvejetainį skaičių.

Pridedu vaizdo įrašą, kuriame parodyta, kaip mano veikia.

3 žingsnis: Išvada

Išvada
Išvada

Pridedu visą jūsų nuorodos kodą. Jis nėra toks švarus ir tvarkingas, kaip norėčiau, bet aš jį išvalysiu, kai jį išplėsime būsimuose vadovėliuose.

Nuo šiol aš tiesiog pridėsiu failus, kuriuose yra kodas, o ne viską čia įvesiu. Mes tiesiog įvesime skyrius, kuriuos norime aptarti.

Tai buvo trumpa pamoka, kurioje mes sugalvojome paprastą metodą, kaip savo analizatoriaus mikrovaldikliui pasakyti, koks yra mūsų kauliukų metimo iš mūsų kauliukais ritininio mikrovaldiklio rezultatas, naudojant tik du prievadus.

2 pratimas. Užuot naudoję paruoštą signalą, kad parodytumėte, kada kauliukų ritinys yra paruoštas perduoti, ir kitą, kai analizatorius paruoštas priimti, naudokite „išorinį pertraukimą“, vadinamą „kaiščio keitimo pertrauka“. Atmega328p smeigtukai gali būti naudojami tokiu būdu, todėl jie turi PCINT0 ir PCINT23 šalia jų. Tai galite įgyvendinti kaip pertraukimą panašiai, kaip tai padarėme su laikmačio perpildymo pertraukimu. Šiuo atveju pertraukimo „tvarkytojas“bus paprograma, bendraujanti su kauliukų voleliu. Tokiu būdu jums nereikia iš tikrųjų vadinti komunikacijos paprogramės iš pagrindinės: ji pateks ten, kai tik nutrūks dėl to kaiščio būsenos pakeitimo.

3 pratimas. Daug geresnis būdas perduoti ir perduoti duomenis tarp vieno mikrovaldiklio į kitų rinkinį yra naudojant pačiame mikrovaldiklyje įmontuotą 2 laidų nuosekliąją sąsają. Pabandykite perskaityti duomenų lapo 22 skyrių ir pažiūrėkite, ar galite suprasti, kaip jį įgyvendinti.

Ateityje naudosime šiuos sudėtingesnius metodus, kai pridėsime papildomų valdiklių.

Tai, kad viskas, ką mes padarėme su mūsų analizatoriumi, buvo paimti visą kauliukų ritinį ir tada atspausdinti dvejetainiu būdu, naudojant šviesos diodus, nėra svarbu. Faktas yra tas, kad dabar mūsų analizatorius „žino“, kas yra kauliukų ritinys, ir gali jį atitinkamai naudoti.

Kitoje pamokoje pakeisime „analizatoriaus“paskirtį, pristatysime dar keletą grandinės elementų ir kauliukų ritinį naudosime įdomiau.

Iki kito karto…

Rekomenduojamas: