Sisällysluettelo:

Attiny85 samanaikainen ohjelmointi tai kurpitsa monivärisillä silmillä: 7 vaihetta
Attiny85 samanaikainen ohjelmointi tai kurpitsa monivärisillä silmillä: 7 vaihetta

Video: Attiny85 samanaikainen ohjelmointi tai kurpitsa monivärisillä silmillä: 7 vaihetta

Video: Attiny85 samanaikainen ohjelmointi tai kurpitsa monivärisillä silmillä: 7 vaihetta
Video: How to use Prototyping Shield with breadboard for Arduino 2024, Marraskuu
Anonim

Seuraa lisää tekijältä:

Kirkaisu
Kirkaisu
Kirkaisu
Kirkaisu
NiCd -akun vaihtaminen ulkoiseen virtalähteeseen
NiCd -akun vaihtaminen ulkoiseen virtalähteeseen
NiCd -akun vaihtaminen ulkoiseen virtalähteeseen
NiCd -akun vaihtaminen ulkoiseen virtalähteeseen
Digitaalikameran kahva
Digitaalikameran kahva
Digitaalikameran kahva
Digitaalikameran kahva

Tietoja: Työskentelen ohjelmistosuunnittelijana yhdessä Bay Area (Kalifornia) -yrityksistä. Aina kun minulla on aikaa, haluan ohjelmoida mikro -ohjaimia, rakentaa mekaanisia leluja ja tehdä joitain kodin parannusprojekteja. Lisätietoja jumbleviewista »

Tämä projekti osoittaa, kuinka ohjataan kahta 10 mm: n kolmiväristä yhteistä anodi-LEDiä (Pumpkin Halloween Glitterin moniväriset silmät) Attiny85-sirulla. Hankkeen tavoitteena on esitellä lukija samanaikaisen ohjelmoinnin taiteeseen ja Adam Dunkelsin prototieppikirjaston käyttöön. Tässä projektissa oletetaan, että lukija tuntee 8-bittiset AVR-ohjaimet, osaa kirjoittaa jonkin verran C-ohjelmaa ja hänellä on kokemusta Atmel-studiosta.

Projektikoodi julkaistu GitHubissa:

Tarvikkeet

Ennen ohjelmointia on vielä rakennettava piiri. Tässä on komponentteja:

  • Attiny85 -ohjain (mikä tahansa elektroninen toimittaja).
  • Kaksi kolmiväristä 10 mm: n LEDiä, joissa on yhteinen anodi. Adafruit -LEDit
  • Vastukset 100 ohmia, 120 ohmia, 150 ohmia 0,125 tai 0,250 wt (mikä tahansa elektroninen toimittaja).
  • Kuuden nastainen otsikko AVR ISP -liitäntään. Voidaan tehdä tästä Adafruit -otsikosta
  • Jotkut leipätaulut tai painetut mallitaulut. Käytin tätä
  • AVR ISP MKII -liitäntä ja Atmel Studio 6.1 (myöhemmän version pitäisi myös toimia).

Vaihe 1: Circut

Circut
Circut

Suunnittelu käyttää viittä lastutappia:

  • Kaksi nastaa, joita käytetään anodien ohjaamiseen: jokainen LED -anodi kiinnitetty omaan tappiin.
  • Kolme nastaa kiinnitetty (vastuksen kautta) LED -katodeihin (jokaisen ledin sama värikatodi kiinnitetty samaan nastaan)

Voisi kysyä: miksi et käytä sirun kaikkia kuutta sisään/ulos -nastaa, jotta LED -anodit kytketään suoraan +5 V: iin ja jokaisella katodilla on oma nastansa? Tämä tekee ohjelmoinnista helppoa. Valitettavasti ongelma on olemassa: nasta PB5 (RESET) on heikko nasta, joka pystyy tuottamaan vain ~ 2 mA virtaa, kun taas tarvitaan ~ 20 mA.

Tietenkin voidaan rakentaa transistorivahvistin tälle heikolle nastalle, mutta itse aina, kun mahdollista, haluan ratkaista ongelman koodin läpi.

Vaihe 2: Ajoituskaavio

Ajoituskaavio
Ajoituskaavio

Ajoituskaavio auttaa meitä ymmärtämään, mitä meidän on ohjelmoitava.

Kaavion kaksi ylintä riviä osoittavat jännitteen muutoksen LED -anodeissa. LED -anodeihin kytkettyjen nastojen jännite värähtelee taajuudella ~ 250 Hz. Tämä vasemman LEDin jännitevärähtely on vastakohta oikean LEDin värähtelylle. Kun anodin jännite on korkea, vastaava LED voi olla kirkas. Kun lämpötila on alhainen, vastaava LED -valo on pimeä. Tämä tarkoittaa, että jokainen LED -valo voi olla kirkas 2 millisekunnin välein ja tumma toisen 2 millisekunnin aikana. Koska ihmissilmällä on jonkin verran hitautta, 250 Hz: n vilkkuminen ei ole havaittavissa. Katsotaanpa kaavion ensimmäistä saraketta. Se näyttää tapauksen, kun vasen LED on punainen ja oikea LED vihreä. Tässä PUNAISET katodit pysyvät alhaisina, kun vasen anodi on korkea, VIHREÄ katodi pysyy alhaisina, kun oikea anodi on korkeina, ja SININEN katodi pysyy alhaisina koko ajan. Muut kaavion sarakkeet esittävät katodin ja anodijännitteen yhdistelmiä eri väreille.

Kuten näemme, nastatilaan liittyy keskinäinen riippuvuus. Ilman joitakin kehyksiä se ei olisi helppo ratkaista. Ja tässä prototyyppikirjasto on kätevä.

Vaihe 3: Ohjelmointi. Makrot ja määritelmät

Ohjelmointi. Makrot ja määritelmät
Ohjelmointi. Makrot ja määritelmät

Esimerkki ohjelmointivaiheista edustaa hieman yksinkertaistettua versiota. Ohjelmaa lyhennetään ja jotkut symboliset määritelmät korvataan nimenomaisilla vakioilla.

Aloitetaan alusta. Ohjelma sisältää Atmel Studion mukana tulevat tiedostot sekä prototyyppisen kirjaston otsikon. Seuraavaksi on kaksi makroa, joilla voidaan käsitellä nastatasoja, ja joitakin määritelmiä, joilla annetaan loogisia nimiä pin -signaaleille. Toistaiseksi ei mitään erikoista.

Vaihe 4: Ohjelmointi. Pääsilmukka

Ohjelmointi. Pääsilmukka
Ohjelmointi. Pääsilmukka

Katsotaan sitten lopuksi, mitä päämenettely sisältää.

Funktion päätoiminto alustuksen jälkeen pysyy ikuisesti. Tässä silmukassa se tekee seuraavat vaiheet:

  • Käynnistää prototyyppirutiinin vasemmanpuoleiselle LEDille. Se muuttaa joidenkin nastojen jännitettä.
  • Tee kahden millisekunnin viive. Nastan jännite ei muutu.
  • Käynnistää prototyypin oikealle LEDille. Se muuttaa jonkin verran pin -jännitettä.
  • Tee 2 MS: n viive. Nastan jännite ei muutu.

Vaihe 5: Ohjelmointi. Aputoiminnot

Ohjelmointi. Aputoiminnot
Ohjelmointi. Aputoiminnot

Ennen kuin aloitamme keskustelun prototierteistä, meidän on tarkasteltava joitain aputoimintoja. Ensinnäkin on toimintoja tietyn värin asettamiseksi. Ne ovat suoraviivaisia. Tällaisia toimintoja on yhtä monta kuin tuettuja värejä (seitsemän) ja yksi toiminto LEDin tummaksi asettamiseksi (NoColor).

Ja on vielä yksi toiminto, johon prototyyppirutiini vetoaa suoraan. Sen nimi on DoAndCountdown ().

Teknisesti tällaisen toiminnon käyttö ei ole pakollista, mutta minusta se oli kätevää. Siinä on kolme argumenttia:

  • Osoitin toimintoasetuksen LED -väriin (kuten RedColor tai GreenColor tai jne.)
  • Käänteisen laskurin alkuarvo: kuinka monta kertaa tämä toiminto on käynnistettävä tietyssä prototyyppivaiheessa.
  • Osoitin peruutuslaskuriin. Oletetaan, että kun väri muuttuu, käänteinen laskuri on 0, joten aluksi iteraatiokoodi antaa sille laskurin alkuarvon. Jokaisen iterointilaskurin arvo pienenee.

Toiminto DoAndCountdown () palauttaa käänteisen laskurin arvon.

Vaihe 6: Ohjelmointi. Prototyyppirutiinit

Ohjelmointi. Prototyyppirutiinit
Ohjelmointi. Prototyyppirutiinit

Ja tässä on kehysydin: prototyyppirutiini. Yksinkertaisuuden vuoksi esimerkki rajoittuu vain kolmeen vaiheeseen: värin vaihtaminen PUNAISEKSI, VIHREÄ ja SININEN.

Toimintoa kutsutaan kahdella argumentilla:

  • Osoitin prototyynyrakenteeseen. Tämä rakenne alustettiin main ennen pääsilmukan alkua.
  • Osoitin peruutuslaskuriin. Se asetettiin 0: ksi ennen pääsilmukan alkua.

Toiminto asettaa jännitteet, jotta vasen LED aktivoituu ja käynnistää prototielan segmentin. Tämä segmentti on makrojen PT_BEGIN ja PT_END välissä. Sisällä on koodi, joka meidän tapauksessamme toistaa vain makrot PT_WAIT_UNTIL. Nämä makrot toimivat seuraavaksi:

  • Toiminnon DoAndCountdown kutsuminen. Tämä asettaa jännitteen LED -katodeihin lähettämään tiettyä väriä.
  • Palautettu tulos verrattuna 0: een. Jos ehto on "väärä", prototiefunktio palauttaa välittömästi ja antaa ohjauksen pääsilmukalle.
  • Kun prototielanka käynnistetään seuraavan kerran, se suorittaa koodin uudelleen ennen PT_BEGIN -koodia ja hyppää sitten suoraan niiden PT_WAIT_UNTIL -makrojen sisälle, joista se palautti viimeksi.
  • Tällaisia toimintoja toistetaan, kunnes DoAndCountdown -tulos on 0. Siinä tapauksessa palautusta ei tapahdu, ohjelma pysyy prototyypissä ja suorittaa koodin seuraavan rivin. Meidän tapauksessamme se on seuraava PT_WAIT_UNTIL, mutta yleisesti ottaen se voi olla melkein mikä tahansa C -koodi.
  • Toisen PT_WAIT_UNTIL -käänteislaskurin alussa on 0, joten DoAndCountdown () -toiminto asettaa sen alkuarvoon. Toiset makrot suoritetaan jälleen 250 kertaa, kunnes käänteislaskuri saavuttaa 0.
  • Rakenteen pt tila nollataan heti, kun ohjaus saavuttaa PT_END -makrot. Kun prototyyppitoiminto käynnistetään seuraavan kerran, prototie -segmentti alkaa suorittaa koodirivin heti PT_BEGIN jälkeen.

Oikealla LEDillä on samanlainen prototyyppirutiini. Esimerkissämme se vain pakottaa eri värijärjestyksen, mutta jos voimme tehdä sen täysin toisin: vasemman ja oikean LED -rutiinin välillä ei ole tiukkaa kytkentää.

Vaihe 7: Sisäosat

Sisäosat
Sisäosat

Koko ohjelma on alle 200 riviä koodia (kommentit ja tyhjät rivit) ja vie alle 20% Attiny85 -koodimuistista. Tarvittaessa on mahdollista hyödyntää täällä useita prototyyppirutiinia ja määrittää niille paljon monimutkaisempi logiikka.

Protothreads -kirjasto on yksinkertaisin tietokoneiden samanaikaisen ohjelmoinnin muoto. Rinnakkaisohjelmointi on lähestymistapa, jonka avulla ohjelma voidaan jakaa loogisiin osiin: joskus niitä kutsutaan korutineiksi, joskus säikeiksi, joskus tehtäviksi. Periaate on, että jokainen tällainen tehtävä voi jakaa saman prosessoritehon pitäen koodin enemmän tai vähemmän lineaarisena ja riippumattomana muista osista. Loogisesta näkökulmasta tehtävät voidaan suorittaa samanaikaisesti.

Kehittyneille järjestelmille tällaisten tehtävien hallinta suoritetaan joko käyttöjärjestelmän ytimen tai kielen ajon aikana, joka on upotettu suoritettavaksi kääntäjän toimesta. Mutta prototierteiden tapauksessa sovellusohjelmoija ohjaa sitä manuaalisesti käyttämällä prototyyppimakrokirjastoa tehtävien rutiineissa ja kutsumalla tällaiset rutiinit (yleensä pois pääsilmukasta).

Haluatko luultavasti tietää, miten prototyyny todella toimii? Mihin taika piiloutuu? Prototyypit tukeutuvat C -kielen erityisominaisuuteen: se, että C -kirjainkokolauseke voidaan upottaa if- tai johonkin muuhun lohkoon (kuten while tai for). Lisätietoja saat Adam Dunkelsin sivustolta

Tämän projektin elektroniikan sisäosat ovat hyvin yksinkertaisia. Yllä oleva kuva antaa sinulle vihjeen. Olen varma, että pystyt parempaan.

Suositeltava: