Orodha ya maudhui:
- Hatua ya 1: Je! Tunawezaje Kupata Watawala Wawili Wawili Kuzungumzana?
- Hatua ya 2: Subroutines za Mawasiliano
- Hatua ya 3: Hitimisho
Video: Mafunzo ya Mkusanyiko wa AVR 6: 3 Hatua
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:48
Karibu kwenye Mafunzo ya 6!
Mafunzo ya leo yatakuwa mafupi ambapo tutakua na njia rahisi ya kuwasiliana na data kati ya atmega328p na nyingine kwa kutumia bandari mbili zinaziziunganisha. Kisha tutachukua roller ya kete kutoka kwa Mafunzo ya 4 na Analyzer ya Usajili kutoka kwa Mafunzo ya 5, tutaunganisha pamoja, na tumia njia yetu kuwasiliana matokeo ya safu za kete kutoka kwa roller hadi kwa analyzer. Kisha tutachapisha roll katika binary kutumia LEDs ambazo tulizijengea mchambuzi katika Mafunzo ya 5. Mara tu tutakapokuwa na kazi hii tutaweza kujenga kipande kinachofuata cha mradi wetu wote katika mafunzo yafuatayo.
Katika mafunzo haya utahitaji:
- Bodi yako ya kuiga
- Roli yako ya kete kutoka kwa Mafunzo ya 4
- Msajili wako wa Sajili kutoka kwa Mafunzo ya 5
- Waya mbili za kuunganisha
-
Nakala ya Karatasi kamili ya Takwimu (marekebisho ya 2014):
www.atmel.com/images/Atmel-8271-8-bit-AVR-M…
-
Nakala ya Mwongozo wa Kuweka Maagizo (marekebisho ya 2014):
www.atmel.com/images/atmel-0856-avr-instruc …….
Hapa kuna kiunga cha mkusanyiko kamili wa mafunzo yangu ya kukusanyika ya AVR:
Hatua ya 1: Je! Tunawezaje Kupata Watawala Wawili Wawili Kuzungumzana?
Kwa kuwa tunaanza kupanua mradi wetu ili bidhaa yetu ya mwisho iwe na mkusanyiko wa sehemu ndogo tutahitaji pini zaidi kuliko Atmega328P moja inaweza kutoa. Kwa hivyo tutafanya kila kipande cha mradi kwa jumla kwa mdhibiti mdogo na kisha wape kushiriki data kati yao. Kwa hivyo shida ambayo tunahitaji kusuluhisha ni jinsi gani tunaweza kupata njia rahisi ya watawala kuongea na kila mmoja na kuhamisha data kati yao? Kweli, jambo moja juu ya watawala hawa ni kwamba kila mmoja wao hufanya maagizo milioni 16 kwa sekunde. Hii imepangwa kwa usahihi na kwa hivyo tunaweza kutumia wakati huu kuhamisha data. Ikiwa tunatumia ucheleweshaji wa millisecond kuunda data basi sio lazima tuwe sahihi kabisa kwani CPU inafanya maagizo 16,000 kwa millisecond moja. Kwa maneno mengine, millisecond ni umilele kwa CPU. Basi wacha tuijaribu na safu za kete. Ninataka kusambaza matokeo ya roll ya kete kutoka kwa chip ya roller ya kete hadi kwenye chip ya analyzer. Tuseme ulikuwa umesimama kando ya barabara na nilitaka kukuashiria matokeo ya roll yangu ya jozi ya kete. Jambo moja ambalo ningeweza kufanya, ikiwa wote wawili tulikuwa na saa, ni kwamba ningeweza kuwasha tochi, kisha ukiwa tayari kupokea data yangu unawasha tochi yako na sisi wote tunaanza saa zetu. Kisha mimi huweka tochi yangu kwa idadi kamili ya milliseconds kama roll ya kete na kisha kuifunga. Kwa hivyo ikiwa nitavingirisha 12 ningeendelea kuwasha taa yangu kwa milliseconds 12. Sasa shida na hapo juu ni kwamba, kwako mimi na wewe, hakuna njia ambayo tungeweza kuweka wakati vitu kwa usahihi wa kutosha kutofautisha kati ya milliseconds 5 na 12 sekunde millisecond. Lakini vipi kuhusu hii: Tuseme tuliamua kwamba nitaweka taa yangu kwa mwaka mmoja kwa kila nambari kwenye kete? Halafu nikigonga 12 ningekuangazia kwa miaka 12 na nadhani utakubali kuwa hakuna uwezekano kwamba utafanya makosa kugundua nambari sawa? Unaweza kuchukua mapumziko na kwenda kucheza baseball, unaweza hata kwenda kucheza craps huko Vegas kwa miezi 6, ilimradi wakati fulani wakati wa mwaka kutupia macho barabarani ili kuona ikiwa taa ilikuwa imewashwa hautakosa hesabu. Kweli hiyo ndio haswa tunayofanya kwa watawala wadogo. Milisekunde moja kwa CPU ni kama mwaka. Kwa hivyo ikiwa nitawasha ishara kwa milisekunde 12 karibu hakuna nafasi ya kwamba mdhibiti mwingine ataichanganya kwa 10 au 11 bila kujali ni nini kinakatiza na nini kisichotokea wakati huu. Kwa watawala wadogo, millisecond ni umilele, kwa hivyo hii ndio tutafanya. Kwanza tutachagua bandari mbili kwenye kidhibiti kuwa bandari zetu za mawasiliano. Nitatumia PD6 kwa Kupokea Takwimu (tunaweza kuiita Rx ikiwa tunapenda) na nitachagua PD7 kwa kupeleka data (tunaweza kuiita Tx ikiwa tunapenda). Chip ya analyzer itaangalia mara kwa mara ni pini ya Rx na ikiwa itaona ishara itashuka kwa "njia ndogo ya mawasiliano" na kisha isambaze ishara ya kurudi kwa roller ya kete ikisema iko tayari kupokea. Wote wataanza muda na roller ya kete itasambaza ishara (i.e. 5V) kwa millisecond kwa kila nambari kwenye kete. Kwa hivyo ikiwa roll ilikuwa sita sita, au 12, basi roller roller ingeweka ni PD7 hadi 5V kwa milliseconds 12 na kisha kuirudisha kwa 0V. Mchambuzi atakagua pini yake ya PD6 kila millisecond, akihesabu kila wakati, na inaporudi kwa 0V kisha inatoa nambari inayosababisha onyesho la analyzer, ikionyesha kumi na mbili kwa binary kwenye LED. Kwa hivyo huo ndio mpango. Wacha tuone ikiwa tunaweza kuitekeleza.
Hatua ya 2: Subroutines za Mawasiliano
Jambo la kwanza tunalohitaji kufanya ni kuunganisha watawala wawili. Kwa hivyo chukua waya kutoka PD6 kwa moja na uiunganishe na PD7 kwa upande mwingine, na kinyume chake. Kisha waanzishe kwa kuweka PD7 kwa OUTPUT kwa zote na PD6 kwa INPUT kwa zote mbili. Mwishowe weka zote kwenye 0V. Hasa, ongeza zifuatazo kwenye Init, au Rudisha sehemu ya nambari kwenye kila mdhibiti mdogo:
sbi DDRD, 7; PD7 imewekwa kwenye pato
cbi PortD, 7; PD7 awali 0V cbi DDRD, 6; PD6 imewekwa kwa cbi PortD, 6; PD6 awali 0V clr jumla; jumla ya kete mwanzoni 0
Sasa wacha tuanzishe njia ndogo ya mawasiliano kwenye chip ya roller-kete. Kwanza fafanua anuwai mpya hapo juu inayoitwa "jumla" ambayo itahifadhi nambari ya jumla iliyovingirishwa kwenye jozi ya kete na kuianzisha hadi sifuri.
Kisha andika subroutine kuwasiliana na analyzer:
wasiliana:
cbi PortD, 7 sbi PortD, 7; Tuma subira ya ishara tayari: sbic PinD, 6; soma PinD na ruka ikiwa 0V rjmp kusubiri kuchelewa 8; kuchelewesha kusawazisha (kupatikana kwa majaribio) tuma: dec kuchelewa jumla 2; kuchelewesha kwa kila hesabu ya kufa ya cpi jumla, 0; 0 hapa inamaanisha ucheleweshaji wa idadi "jumla" umetumwa breq PC + 2 rjmp tuma cbi PortD, 7; PD7 hadi 0V clr jumla; weka upya kete kwa 0 ret
Katika analyzer tunaongeza rcall kutoka kwa kawaida kuu kwa subroutine ya mawasiliano:
mchambuzi wa clr; jiandae kwa nambari mpya
Pinb ya sbic, 6; angalia PD6 kwa mawasiliano ya ishara ya 5V; ikiwa 5V itaenda kuwasiliana na analyzer ya mov, jumla; pato kwa analyzer kuonyesha analyzer rcall
na kisha andika sehemu ndogo ya mawasiliano kama ifuatavyo:
wasiliana:
jumla ya clr; weka jumla ya kuchelewesha 0; kuchelewesha kuondoa bounces sbi PortD, 7; weka PB7 kwa 5V kuashiria kupokea tayari: kuchelewesha 2; subiri nambari inayofuata inc jumla; nyongeza jumla ya sbic PinD, 6; ikiwa PD6 inarudi kwa 0V tumemaliza kupokea rjmp; vinginevyo kitanzi nyuma kwa data zaidi cbi PortD, 7; weka upya PD7 ukimaliza kurudi
Huko unaenda! Sasa kila mdhibiti mdogo amewekwa ili kuwasiliana na matokeo ya roll ya kete na kisha kuionyesha kwenye analyzer.
Tutatumia njia bora zaidi ya kuwasiliana baadaye wakati tutahitaji kuhamisha yaliyomo kwenye rejista kati ya watawala badala ya roll ya kete tu. Kwa hali hiyo, bado tutatumia waya mbili tu kuziunganisha lakini tutatumia 1, 1 kumaanisha "anza usambazaji"; 0, 1 kumaanisha "1"; 1, 0 kumaanisha "0"; na mwishowe 0, 0 inamaanisha "maambukizi ya mwisho".
Zoezi la 1: Angalia ikiwa unaweza kutekeleza njia bora na uitumie kuhamisha roll ya kete kama nambari ya binary ya 8-bit.
Nitaambatanisha video ambayo inaonyesha yangu inafanya kazi.
Hatua ya 3: Hitimisho
Nimeambatanisha nambari kamili kwa kumbukumbu yako. Sio safi na nadhifu kama vile ningependa, lakini nitaisafisha tunapoipanua katika mafunzo ya baadaye.
Kuanzia sasa nitaunganisha tu faili zilizo na nambari badala ya kuziandika zote hapa. Tutaandika tu sehemu ambazo tunapenda kujadili.
Hii ilikuwa mafunzo mafupi ambapo tulikuja na njia rahisi ya kumwambia mdhibiti wetu mdogo wa uchambuzi nini matokeo ya roll yetu ya kete kutoka kwa mdhibiti wetu wa kete ndogo wakati tunatumia bandari mbili tu.
Zoezi la 2: Badala ya kutumia ishara tayari kuonyesha wakati roller ya kete iko tayari kusambaza na nyingine wakati analyzer iko tayari kupokea, tumia "usumbufu wa nje" uitwao "Pin Change Interrupt". Pini kwenye atmega328p zinaweza kutumika kwa njia hii ndio sababu wana PCINT0 kupitia PCINT23 kando yao kwenye mchoro wa pinout. Unaweza kutekeleza hii kama usumbufu kwa njia sawa na vile tulifanya na usumbufu wa kufurika kwa saa. Katika kesi hii "mshughulikiaji" anayesumbua atakuwa njia ndogo inayowasiliana na roller ya kete. Kwa njia hii hauitaji kupigia simu njia kuu ya mawasiliano kutoka kuu: itaenda huko wakati wowote kuna usumbufu unaokuja kutokana na mabadiliko ya serikali kwenye pini hiyo.
Zoezi la 3: Njia bora zaidi ya kuwasiliana na kuhamisha data kati ya mdhibiti mdogo hadi mkusanyiko wa zingine ni kutumia kiunganishi cha waya-2 kilichojengwa kwenye kiwambo kidogo. Jaribu kusoma kifungu cha 22 cha hati ya data na uone ikiwa unaweza kujua jinsi ya kuitekeleza.
Tutatumia mbinu hizi laini zaidi katika siku zijazo tunapoongeza vidhibiti zaidi.
Ukweli kwamba yote tuliyoyafanya na analyzer yetu ni kuchukua jumla ya roll ya kete na kisha kuichapisha kwa binary kutumia LEDs sio muhimu. Ukweli ni kwamba sasa mchambuzi wetu "anajua" roll ya kete ni nini na anaweza kuitumia ipasavyo.
Katika mafunzo yanayofuata tutabadilisha kusudi la "analyzer" yetu, tukileta vitu kadhaa vya mzunguko, na kutumia roll ya kete kwa njia ya kufurahisha zaidi.
Mpaka wakati ujao…
Ilipendekeza:
Mafunzo ya Mkusanyiko wa AVR 2: 4 Hatua
Mafunzo ya AVR Assembler 2: Mafunzo haya ni mwendelezo wa " Mafunzo ya Mkusanyiko wa AVR 1 " Ikiwa haujapitia Mafunzo ya 1 unapaswa kuacha sasa na ufanye hiyo ya kwanza.Katika mafunzo haya tutaendelea na masomo yetu ya programu ya lugha ya mkutano wa atmega328p u
Mafunzo ya Mkusanyiko wa AVR 1: Hatua 5
ASR Assembler Mafunzo 1: Nimeamua kuandika safu kadhaa za mafunzo juu ya jinsi ya kuandika programu za kusanyiko za Atmega328p ambayo ni mdhibiti mdogo anayetumiwa katika Arduino. Ikiwa watu watabaki na hamu nitaendelea kuweka moja kwa wiki au hivyo hadi nitakapomaliza
Mafunzo ya Mkusanyiko wa AVR 8: 4 Hatua
Mafunzo ya AVR Assembler 8: Karibu kwenye Mafunzo ya 8! Katika mafunzo haya mafupi tutachukua tofauti kutoka kwa kuanzisha vipengee vipya vya programu ya lugha ya mkutano ili kuonyesha jinsi ya kuhamisha vifaa vyetu vya kuiga kwa " iliyochapishwa " bodi ya mzunguko.
Mafunzo ya Mkusanyiko wa AVR 7: 12 Hatua
Mafunzo ya AVR Assembler 7: Karibu kwenye Mafunzo ya 7! Leo tutaonyesha kwanza jinsi ya kutumia keypad, na kisha tuonyeshe jinsi ya kutumia bandari za kuingiza Analog kuwasiliana na kitufe. Tutafanya hivyo kwa kutumia usumbufu na waya moja kama pembejeo. Tutakata keypad kwa hivyo t
Mafunzo ya Mkusanyiko wa AVR 9: 7 Hatua
Mafunzo ya AVR Assembler 9: Karibu kwenye Mafunzo 9. Leo tutakuwa tukionyesha jinsi ya kudhibiti onyesho la sehemu 7 na onyesho la tarakimu nne kwa kutumia nambari yetu ya lugha ya mkutano ya ATmega328P na AVR. Wakati wa kufanya hivyo itabidi tuchukue mabadiliko katika jinsi ya kutumia stack