Sisällysluettelo:

AVR -kokoonpanon opetusohjelma 6: 3 vaihetta
AVR -kokoonpanon opetusohjelma 6: 3 vaihetta

Video: AVR -kokoonpanon opetusohjelma 6: 3 vaihetta

Video: AVR -kokoonpanon opetusohjelma 6: 3 vaihetta
Video: Как использовать SSD1306 128x32 OLED-дисплей I2C с кодом Arduino 2024, Heinäkuu
Anonim
AVR -kokoonpanon opetusohjelma 6
AVR -kokoonpanon opetusohjelma 6

Tervetuloa opetusohjelmaan 6!

Tämän päivän opetusohjelma on lyhyt, jossa kehitämme yksinkertaisen menetelmän tietojen välittämiseksi yhden atmega328p: n ja toisen välillä käyttämällä kahta niitä yhdistävää porttia. Otamme sitten noppatelan opetusohjelmasta 4 ja rekisterianalysaattorin opetusohjelmasta 5, yhdistämme ne yhteen ja käytämme menetelmäämme kommunikoidaksesi nopanheittojen tulokset rullasta analysaattoriin. Tulostamme rullan binäärinä käyttämällä opetusohjelmassa 5 analysaattorille luomiamme LED -valoja. Kun tämä työ on valmis, voimme rakentaa seuraavan kokonaisprojektimme seuraavan opetusohjelman.

Tässä opetusohjelmassa tarvitset:

  1. Prototyyppitaulusi
  2. Noppapyöräsi opetusohjelmasta 4
  3. Rekisteröinti -analysaattorisi opetusohjelmasta 5
  4. Kaksi liitäntäjohtoa
  5. Kopio täydellisestä tiedotteesta (vuoden 2014 versio):

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

  6. Kopio käyttöohjeesta (vuoden 2014 versio):

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

Tässä on linkki koko AVR-kokoonpanon opetusohjelmien kokoelmaan:

Vaihe 1: Kuinka saamme kaksi mikro -ohjainta keskustelemaan keskenään?

Miten saamme kaksi mikro -ohjainta keskustelemaan keskenään?
Miten saamme kaksi mikro -ohjainta keskustelemaan keskenään?

Koska alamme laajentaa projektiamme siten, että yksittäinen lopputuotteemme koostuu kokoelmasta pienempiä osia, tarvitsemme enemmän nastoja kuin yksi Atmega328P voi tarjota. Siksi aiomme tehdä kaikki kokonaisprojektin osat erillisellä mikro -ohjaimella ja sitten jakaa ne keskenään. Joten ongelma, joka meidän on ratkaistava, on se, miten voimme keksiä yksinkertaisen tavan, jolla ohjaimet voivat keskustella keskenään ja siirtää tietoja keskenään? Yksi asia näissä ohjaimissa on, että he suorittavat kukin 16 miljoonaa käskyä sekunnissa. Tämä on hyvin tarkasti ajoitettu, joten voimme käyttää tätä ajoitusta tiedonsiirtoon. Jos käytämme datan muodostamiseen millisekunnin viiveitä, meidän ei todellakaan tarvitse olla niin tarkkoja, koska suoritin suorittaa 16 000 käskyä yhdessä millisekunnissa. Toisin sanoen millisekunti on ikuisuus CPU: lle. Joten kokeillaan sitä noppapullien kanssa. Haluan siirtää nopanheiton tuloksen noppapullista analysaattorisirulle. Oletetaan, että seisoit kadun toisella puolella ja halusin ilmoittaa sinulle nopanheiton tuloksesta. Yksi asia, jonka voisin tehdä, jos meillä molemmilla olisi kello, voisin kytkeä taskulampun päälle, sitten kun olet valmis vastaanottamaan tietoni, sytytät taskulampun ja me molemmat käynnistämme kellomme. Sitten pidän taskulampun päällä täsmällisen määrän millisekuntia noppien vieriessä ja sammutan sen sitten. Joten jos heittäisin 12: n, pitäisin valoni päällä 12 millisekuntia. millisekuntia. Mutta entä tämä: Oletetaan, että päätimme, että pidän valoni päällä yhden vuoden jokaisen nopan numeron kohdalla? Sitten jos heitän 12: n, loistaisin sinulle valoa 12 vuoden ajan ja luulen, että olet samaa mieltä siitä, että ei ole mahdollista, että teet virheen selvittäessäsi numeron oikein? Voit pitää tauon ja mennä pelaamaan baseballia, voit jopa pelata crapsia Vegasissa 6 kuukauden ajan, kunhan jossain vaiheessa vuotta vilkaiset kadun toisella puolella nähdäksesi, palaako valo, et menetä laskua. No, juuri sitä teemme mikrokontrollereille! Yksi millisekunti CPU: lle on kuin vuosi. Joten jos kytken signaalin päälle 12 millisekunniksi, ei ole melkein mitään mahdollisuutta, että toinen mikrokytkin sekoittaa sen 10 tai 11 minuuttiin riippumatta siitä, mikä keskeyttää ja mitä ei tapahdu tällä välin. Mikrokontrollereille millisekunti on ikuisuus, joten teemme tämän. Ensin valitsemme kaksi ohjaimen porttia viestintäportteiksi. Käytän PD6: ta tietojen vastaanottamiseen (voisimme kutsua sitä Rx: ksi, jos haluamme) ja valitsen PD7: n tietojen lähettämiseen (voisimme kutsua sitä Tx: ksi, jos haluamme). Analysaattorisiru tarkistaa säännöllisesti sen Rx -nastan ja jos se näkee signaalin, se putoaa "viestintäaliohjelmaan" ja lähettää sitten paluusignaalin noppapullalle sanoen, että se on valmis vastaanottamaan. Molemmat aloittavat ajoituksen ja noppapulla lähettää signaalin (eli 5 V) millisekunnin ajan noppaa kohti. Joten jos heitto oli kaksinkertainen kuusi tai 12, noppapulla asetti sen PD7 arvoon 5 V 12 millisekunniksi ja asetti sen sitten takaisin 0 V: iin. Analysaattori tarkistaa PD6 -nastansa joka millisekunti, laskee joka kerta, ja kun se palaa 0 V: iin, se lähettää tuloksena olevan numeron analysaattorin näyttöön ja näyttää kaksitoista binäärinä LED -valoissa. Katsotaan, osaammeko toteuttaa sen.

Vaihe 2: Viestinnän aliohjelmat

Ensimmäinen asia, joka meidän on tehtävä, on yhdistää kaksi ohjainta. Ota siis johdin PD6: sta toisella ja kytke se toiselle PD7: lle ja päinvastoin. Alusta ne sitten asettamalla PD7 -asetukseksi OUTPUT molemmissa ja PD6 -kohdassa INPUT molemmissa. Aseta lopuksi kaikki 0V. Lisää seuraavat tiedot jokaisen mikro -ohjaimen koodin Init- tai Reset -osioon:

sbi DDRD, 7; PD7 asetettu lähtöön

cbi PortD, 7; PD7 aluksi 0V cbi DDRD, 6; PD6 asetettu tuloon cbi PortD, 6; PD6 aluksi 0V clr yhteensä; yhteensä nopilla aluksi 0

Asetetaan nyt viestintäaliohjelma noppapullille. Määritä ensin ylhäältä uusi muuttuja nimeltä "yhteensä", joka tallentaa noppaparille heitetyn kokonaismäärän ja alustaa sen nollaan.

Kirjoita sitten aliohjelma kommunikoidaksesi analysaattorin kanssa:

kommunikoida:

cbi PortD, 7 sbi PortD, 7; Lähetä valmis signaali odota: sbic PinD, 6; lue PinD ja ohita, jos 0V rjmp odotusviive 8; synkronoinnin viive (löytyi kokeellisesti) lähetä: vähennä kokonaisviive 2; viive kutakin kuolemaa laskettaessa cpi yhteensä, 0; 0 tarkoittaa tässä "kokonais" viiveitä lähetetty breq PC+2 rjmp send cbi PortD, 7; PD7 - 0V clr yhteensä; nollaa nopat yhteensä 0 ret

Analysaattorissa lisätään rcall päärutiinista viestintäaliohjelmaan:

clr -analysaattori; valmistaudu uuteen numeroon

sbic PinD, 6; tarkista PD6 5V -signaalin rcall -kommunikointiin; jos 5V mennä kommunikoimaan mov analysaattori, yhteensä; lähtö analysaattorin näyttöön rcall -analysaattori

ja kirjoita sitten viestintäaliohjelma seuraavasti:

kommunikoida:

clr yhteensä; nollaa yhteensä 0 viiveeseen 10; viive päästä eroon pomppimisesta sbi PortD, 7; aseta PB7 arvoon 5V signaaliksi valmiiksi vastaanottamiseksi: viive 2; odota seuraavaa numeroa, yhteensä; lisäys sbic PinD, 6; jos PD6 palaa 0V: een, olemme saaneet rjmp -vastaanoton; muussa tapauksessa varmuuskopioi lisää dataa cbi PortD, 7; nollaa PD7, kun olet valmis

Ole hyvä! Nyt jokainen mikro -ohjain on asetettu ilmoittamaan nopanheiton tulos ja näyttämään se sitten analysaattorissa.

Otamme käyttöön paljon tehokkaamman tavan kommunikoida myöhemmin, kun meidän on siirrettävä rekisterin sisältö ohjaimien välillä pelkän noppapelin sijaan. Siinä tapauksessa käytämme edelleen vain kahta johdinta, jotka yhdistävät ne, mutta käytämme 1, 1 tarkoittaa "aloita lähetys"; 0, 1 tarkoittaa "1"; 1, 0 tarkoittaa "0"; ja lopuksi 0, 0 tarkoittaa "lopetuslähetystä".

Harjoitus 1: Katso, voitko toteuttaa paremman menetelmän ja käyttää sitä siirtääksesi noppapullan 8-bittisenä binäärilukuna.

Liitän videoon, joka näyttää omani toiminnassa.

Vaihe 3: Johtopäätös

Johtopäätös
Johtopäätös

Olen liittänyt koko koodin viitteellesi. Se ei ole niin puhdas ja siisti kuin haluaisin, mutta puhdistan sen, kun laajennamme sitä tulevissa opetusohjelmissa.

Tästä lähtien liitän vain koodia sisältävät tiedostot sen sijaan, että kirjoitan kaiken tänne. Kirjoitamme vain osiot, joista olemme kiinnostuneita.

Tämä oli lyhyt opetusohjelma, jossa keksimme yksinkertaisen menetelmän kertoa analysaattorimikro-ohjaimellemme, mikä on nopanheiton tulos noppapullimikro-ohjaimestamme käyttämällä vain kahta porttia.

Harjoitus 2: Sen sijaan, että näytettäisiin valmis signaali, joka näyttää, milloin noppapulla on valmis lähetettäväksi, ja toisen, kun analysaattori on valmis vastaanottamaan, käytä "ulkoista keskeytystä", jota kutsutaan "Tapinvaihdon keskeytykseksi". Atmega328p: n tappeja voidaan käyttää tällä tavalla, minkä vuoksi niissä on PCINT0 PCINT23: n vieressä pinout -kaaviossa. Voit toteuttaa tämän keskeytyksenä samalla tavalla kuin teimme ajastimen ylivuotokeskeytyksen kanssa. Tässä tapauksessa keskeytyksen "käsittelijä" on aliohjelma, joka kommunikoi noppapullin kanssa. Näin sinun ei tarvitse itse kutsua viestinnän aliohjelmaa päävalikosta: se menee sinne milloin tahansa, kun kyseisellä tapilla olevan tilan muutoksesta tulee keskeytys.

Harjoitus 3: Paljon parempi tapa kommunikoida ja siirtää tietoja yhden mikro-ohjaimen välillä muiden joukkoon on käyttää mikrokontrollerin sisäänrakennettua 2-johtimista sarjaliitäntää. Yritä lukea tietolomakkeen kohta 22 ja katso, voitko selvittää, miten se otetaan käyttöön.

Käytämme näitä hienostuneempia tekniikoita tulevaisuudessa, kun lisäämme lisää ohjaimia.

Se, että analysaattorillamme teimme vain noppapullin kokonaismäärän ja tulostimme sen sitten binäärinä LEDien avulla, ei ole tärkeää. Tosiasia on, että nyt analysaattorimme "tietää" mitä noppapeli on ja voi käyttää sitä sen mukaisesti.

Seuraavassa opetusohjelmassa aiomme muuttaa "analysaattorimme" tarkoitusta, ottaa käyttöön muutamia muita piirielementtejä ja käyttää noppapeliä mielenkiintoisemmalla tavalla.

Ensi kertaan…

Suositeltava: