Satura rādītājs:

AVR montētāja apmācība 6: 3 soļi
AVR montētāja apmācība 6: 3 soļi

Video: AVR montētāja apmācība 6: 3 soļi

Video: AVR montētāja apmācība 6: 3 soļi
Video: What Happens When You Connect Positive And Negative On A Battery With A Wire 2024, Jūlijs
Anonim
AVR montētāja apmācība 6
AVR montētāja apmācība 6

Laipni lūdzam 6. apmācībā!

Šodienas apmācība būs īsa, un mēs izstrādāsim vienkāršu metodi datu pārsūtīšanai starp vienu atmega328p un citu, izmantojot divus tos savienojošos portus. Pēc tam mēs ņemsim kauliņu rullīti no 4. apmācības un reģistra analizatoru no 5. apmācības, savienosim tos kopā un izmantosim savu metodi, lai paziņotu kauliņu metienu rezultātu no veltņa uz analizatoru. Pēc tam mēs izdrukāsim ruļļu binārā formātā, izmantojot gaismas diodes, kuras mēs izveidojām analizatoram 5. apmācībā. Kad būsim paveikuši šo darbu, mēs varēsim izveidot nākamo mūsu kopējā projekta daļu nākamajā apmācībā.

Šajā apmācībā jums būs nepieciešams:

  1. Jūsu prototipēšanas dēlis
  2. Jūsu kauliņu rullītis no 4. apmācības
  3. Jūsu reģistra analizators no 5. apmācības
  4. Divi savienojošie vadi
  5. Pilnīgas datu lapas kopija (2014. gada pārskatīšana):

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

  6. Instrukciju kopas rokasgrāmatas kopija (2014. gada pārskatīšana):

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

Šeit ir saite uz visu manu AVR montāžas apmācību kolekciju:

1. darbība. Kā panākt, lai divi mikrokontrolleri sarunājas?

Kā panākt, lai divi mikrokontrolleri sarunājas?
Kā panākt, lai divi mikrokontrolleri sarunājas?

Tā kā mēs sākam paplašināt savu projektu tā, ka mūsu vienīgais gala produkts sastāv no mazāku detaļu kolekcijas, mums vajadzēs vairāk tapas, nekā var nodrošināt viens Atmega328P. Tāpēc mēs veiksim katru projekta daļu atsevišķā mikrokontrollerī un pēc tam ļausim viņiem koplietot datus. Tātad problēma, kas mums jāatrisina, ir tā, kā mēs varam izdomāt vienkāršu metodi, lai kontrolieri varētu savstarpēji sarunāties un pārsūtīt datus starp viņiem? Viena lieta par šiem kontrolieriem ir tā, ka katrs izpilda 16 miljonus instrukciju sekundē. Tas ir ļoti precīzi noteikts laiks, un tāpēc mēs varam izmantot šo laiku datu pārsūtīšanai. Ja datu veidošanai izmantojam milisekundes aizkavēšanos, mums nav jābūt tik precīziem, jo centrālais procesors izpilda 16 000 instrukciju vienā milisekundē. Citiem vārdiem sakot, milisekunde ir CPU mūžība. Tāpēc izmēģināsim to ar kauliņu ruļļiem. Es vēlos pārvietot kauliņu metiena rezultātu no kauliņu rullīšu mikroshēmas uz analizatora mikroshēmu. Pieņemsim, ka jūs stāvējāt pāri ielai, un es gribēju jums ziņot par sava kauliņu metiena rezultātu. Viena lieta, ko es varētu darīt, ja mums abiem būtu pulkstenis, es varētu ieslēgt lukturīti, tad, kad esat gatavs saņemt manus datus, jūs ieslēdzat lukturīti, un mēs abi ieslēdzam pulksteni. Tad, kad kauliņi ripo, es turu lukturīti ieslēgtu precīzu milisekundžu skaitu un pēc tam to izslēdzu. Tātad, ja es sarullētu 12, es turpinātu ieslēgt gaismu 12 milisekundēs. Tagad problēma ar iepriekš minēto ir tāda, ka jums un man nav iespējams noteikt laiku pietiekami precīzi, lai atšķirtu 5 milisekundes un 12 milisekundes. Bet ko par to: pieņemsim, ka mēs nolēmām, ka es vienu gadu turēšu gaismu par katru skaitli uz kauliņiem? Tad, ja es izmetu 12, es jums spīdētu gaismu 12 gadus, un es domāju, ka jūs piekritīsit, ka nepastāv iespēja, ka jūs kļūdīsities, pareizi noskaidrojot skaitli? Jūs varētu paņemt pārtraukumu un doties spēlēt beisbolu, jūs pat varētu iet spēlēt craps Vegasā 6 mēnešus, ja vien gada laikā paskatītos pāri ielai, lai redzētu, vai deg gaisma, jūs nepalaidīsit garām skaitīšanu. Nu tieši to mēs darām mikrokontrolleru labā! Viena milisekunde CPU ir kā gads. Tātad, ja es ieslēdzu signālu uz 12 milisekundēm, gandrīz nav nekādu iespēju, ka otrs mikrokontrolleris to sajauks 10 vai 11 neatkarīgi no tā, kas šajā laikā pārtrauc un nenotiek. Mikrokontrolleriem milisekunde ir mūžība. Tātad, šeit mēs darīsim. Vispirms mēs izvēlēsimies divus kontroliera portus, lai tie būtu mūsu sakaru porti. Datu saņemšanai es izmantošu PD6 (mēs to varētu saukt par Rx, ja mums tas patīk), un datu pārraidei es izvēlēšos PD7 (mēs to varētu saukt par Tx, ja mums tas patīk). Analizatora mikroshēma periodiski pārbaudīs, vai tā ir Rx tapa, un, ja redz signālu, tā samazināsies līdz “sakaru apakšprogrammai” un pēc tam pārraidīs atgriešanās signālu kauliņu rullītim, sakot, ka tas ir gatavs uztveršanai. Viņi abi sāks laiku un kauliņu rullītis pārraidīs signālu (t.i., 5 V) par milisekundi uz skaitli uz kauliņiem. Tātad, ja rullītis bija dubultā sešnieks vai 12, tad kauliņu rullītis PD7 iestatīja uz 5 V uz 12 milisekundēm un pēc tam atkal uz 0 V. Analizators pārbaudīs savu PD6 tapu katru milisekundi, katru reizi skaitot, un, kad tas atgriezīsies līdz 0 V, tas izvadīs iegūto skaitli analizatora displejā, uz diodēm parādot divpadsmit binārā. Tātad tas ir plāns. Redzēsim, vai spēsim to īstenot.

2. darbība. Sakaru apakšprogrammas

Pirmā lieta, kas mums jādara, ir savienot abus kontrolierus. Tāpēc paņemiet vadu no PD6 vienā un pievienojiet to PD7, no otras puses, un otrādi. Pēc tam inicializējiet tos, iestatot PD7 uz OUTPUT abos un PD6 uz INPUT abos. Visbeidzot iestatiet tos visus uz 0V. Konkrēti, katra mikrokontrollera koda sadaļai Init vai Reset pievienojiet šādu informāciju:

sbi DDRD, 7; PD7 iestatīts uz izvadi

cbi PortD, 7; PD7 sākotnēji 0V cbi DDRD, 6; PD6 iestatīts uz ievadi cbi PortD, 6; PD6 sākotnēji 0V clr kopā; kopā ar kauliņiem sākotnēji 0

Tagad izveidosim sakaru apakšprogrammu kauliņu rullīšu mikroshēmā. Vispirms augšpusē definējiet jaunu mainīgo ar nosaukumu "total", kas saglabās kauliņu pārī uzmesto kopējo skaitu un inicializēs to līdz nullei.

Pēc tam uzrakstiet apakšprogrammu, lai sazinātos ar analizatoru:

sazināties:

cbi PortD, 7 sbi PortD, 7; Sūtīt gatavu signālu gaidīt: sbic PinD, 6; lasīt PinD un izlaist, ja 0V rjmp gaidīšanas aizkave 8; kavēšanās sinhronizēt (atrasts eksperimentāli) nosūtīt: dec kopējā kavēšanās 2; kavēšanās katrai mirstībai cpi kopā, 0; 0 šeit nozīmē "kopējais" skaita aizkavēšanās ir nosūtīts breq PC+2 rjmp send cbi PortD, 7; PD7 līdz 0V clr kopā; atiestatīt kauliņus kopā uz 0 ret

Analizatorā saziņas apakšprogrammai mēs pievienojam zvanu no galvenās rutīnas:

clr analizators; sagatavojieties jaunam numuram

sbic PinD, 6; pārbaudiet PD6, vai nav 5V signāla, zvaniet; ja 5V iet sazināties ar mov analizatoru, kopā; izvade uz analizatora displeju rcall analizators

un pēc tam uzrakstiet saziņas apakšprogrammu šādi:

sazināties:

clr kopā; atiestatīt kopā uz 0 aizkavi 10; kavēšanās atbrīvoties no atlēcieniem sbi PortD, 7; iestatiet PB7 uz 5V, lai signāls būtu gatavs uztveršanai: 2. aizkave; gaidīt nākamo numuru inc kopā; pieaugums kopā sbic PinD, 6; ja PD6 atgriežas pie 0V, mēs esam pabeiguši rjmp saņemšanu; citādi cilpa dublēt, lai iegūtu vairāk datu cbi PortD, 7; atiestatiet PD7, kad esat pabeidzis ret

Lūdzu! Tagad katrs mikrokontrolleris ir iestatīts, lai paziņotu kauliņu metiena rezultātu un pēc tam parādītu to analizatorā.

Mēs ieviesīsim daudz efektīvāku saziņas veidu vēlāk, kad mums būs jāpārnes reģistra saturs starp kontrolieriem, nevis tikai kauliņu metiens. Tādā gadījumā mēs joprojām izmantosim tikai divus vadus, kas tos savieno, bet mēs izmantosim 1, 1, lai nozīmētu "sākt pārraidi"; 0, 1 nozīmē "1"; 1, 0 nozīmē "0"; un visbeidzot 0, 0 nozīmē "beigu pārraide".

1. uzdevums: pārbaudiet, vai varat ieviest labāku metodi un izmantot to, lai kauliņu rullīti pārsūtītu kā 8 bitu bināru skaitli.

Es pievienošu video, kurā redzams, kā mans darbojas.

3. solis: secinājums

Secinājums
Secinājums

Es pievienoju pilnu kodu jūsu atsaucei. Tas nav tik tīrs un kārtīgs, kā es gribētu, bet es to iztīrīšu, paplašinot to turpmākajās apmācībās.

No šī brīža es tikai pievienošu failus, kas satur kodu, nevis ierakstīšu to visu šeit. Mēs vienkārši ierakstīsim sadaļas, kuras mēs esam ieinteresēti apspriest.

Šī bija īsa apmācība, kurā mēs izdomājām vienkāršu metodi, kā mūsu analizatora mikrokontrolleram pateikt, kāds ir mūsu kauliņu metiena rezultāts no mūsu kauliņu ruļļu mikrokontrollera, vienlaikus izmantojot tikai divus portus.

2. vingrinājums. Tā vietā, lai izmantotu gatavu signālu, lai parādītu, kad kauliņu rullītis ir gatavs pārraidīšanai, un citu, kad analizators ir gatavs uztveršanai, izmantojiet “ārēju pārtraukumu”, ko sauc par “tapas maiņas pārtraukumu”. Atmega328p tapas var izmantot šādā veidā, tāpēc tām ir PCINT0 ar PCINT23 blakus pinout diagrammā. Jūs varat to īstenot kā pārtraukumu līdzīgi kā mēs ar taimera pārplūdes pārtraukumu. Šajā gadījumā pārtraukuma "apstrādātājs" būs apakšprogramma, kas sazinās ar kauliņu rullīti. Tādā veidā jums nav nepieciešams izsaukt sakaru apakšprogrammu no maģistrāles: tā tur nokļūs jebkurā laikā, ja tiks pārtraukta šīs tapas stāvokļa maiņa.

3. vingrinājums. Daudz labāks veids, kā sazināties un pārsūtīt datus starp vienu mikrokontrolleru uz citu kolekciju, ir izmantot mikrokontrollera iebūvēto 2 vadu seriālo saskarni. Mēģiniet izlasīt datu lapas 22. sadaļu un redzēt, vai varat izdomāt, kā to ieviest.

Mēs izmantosim šīs sarežģītākās metodes nākotnē, pievienojot papildu kontrolierus.

Fakts, ka viss, ko mēs darījām ar mūsu analizatoru, bija ņemt kauliņu metienu kopā un pēc tam izdrukāt to binārā formātā, izmantojot gaismas diodes. Fakts ir tāds, ka tagad mūsu analizators "zina", kas ir kauliņu rullis, un var to attiecīgi izmantot.

Nākamajā apmācībā mēs mainīsim mūsu "analizatora" mērķi, ieviesīsim vēl dažus ķēdes elementus un izmantosim kauliņu rullīti interesantākā veidā.

Līdz nākamajai reizei…

Ieteicams: