Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Circut
- Vaihe 2: Ajoituskaavio
- Vaihe 3: Ohjelmointi. Makrot ja määritelmät
- Vaihe 4: Ohjelmointi. Pääsilmukka
- Vaihe 5: Ohjelmointi. Aputoiminnot
- Vaihe 6: Ohjelmointi. Prototyyppirutiinit
- Vaihe 7: Sisäosat
Video: Attiny85 samanaikainen ohjelmointi tai kurpitsa monivärisillä silmillä: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Seuraa lisää tekijältä:
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
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 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
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
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
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
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
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:
IoT Halloween -kurpitsa - Ohjaa LED -valoja Arduino MKR1000- ja Blynk -sovelluksella ???: 4 vaihetta (kuvilla)
IoT Halloween -kurpitsa | Ohjaa LED -valoja Arduino MKR1000- ja Blynk -sovelluksella ???: Hei kaikki, Muutama viikko sitten oli Halloween ja perinteen mukaisesti veistin mukavan kurpitsan parvekkeelleni. Mutta kun kurpitsani oli ulkona, tajusin, että oli melko ärsyttävää mennä ulos joka ilta sytyttämään kynttilä. Ja minä
Halloween -kurpitsa liikkuvalla animatronisella silmällä - Tämä kurpitsa voi pyörittää silmiään!: 10 vaihetta (kuvilla)
Halloween -kurpitsa liikkuvalla animatronisella silmällä | Tämä kurpitsa voi pyörittää silmiään!: Tässä opetusohjelmassa opit tekemään Halloween -kurpitsaa, joka kauhistuttaa kaikkia, kun sen silmä liikkuu. Säädä ultraäänianturin laukaisuetäisyys oikeaan arvoon (vaihe 9), ja kurpitsasi kivittää kaikki, jotka uskaltavat ottaa kynttilän
Liikkeentunnistus Arduino Halloween -kurpitsa: 4 vaihetta
Liikkeentunnistus Arduino Halloween -kurpitsa: Tämän Instructablein tavoitteena oli luoda halpa ja helppo tapa tehdä Halloween -koristeita kotona ilman aiempaa taitoa tai hienoja työkaluja. Käyttämällä helposti hankittavia kohteita Internetistä voit myös tehdä omia yksinkertaisia ja yksilöllisiä
ESP8266 AT -laiteohjelmiston flash -ohjelmointi tai ohjelmointi ESP8266 -välähdys- ja ohjelmointilaitteella, IOT Wifi -moduuli: 6 vaihetta
ESP8266 AT -laiteohjelmiston flash-ohjelmointi tai ohjelmointi ESP8266-salama- ja ohjelmoijaohjelmistolla, IOT Wifi -moduuli: Kuvaus: Tämä moduuli on USB-sovitin /ohjelmoija ESP-0166- tai ESP-01S-tyyppisille ESP8266-moduuleille. Se on kätevästi varustettu 2x4P 2,54 mm: n naarasliittimellä ESP01: n liittämiseksi. Lisäksi se katkaisee kaikki ESP-01: n nastat 2x4P 2,54 mm uroksen kautta
ATtiny85 puettavat värisevät aktiivisuuden seurantakellot ja ohjelmointi ATtiny85 Arduino Unolla: 4 vaihetta (kuvilla)
ATtiny85 puettavat värisevät aktiivisuuden seurantakellot ja ohjelmointi ATtiny85 Arduino Unon kanssa: Kuinka tehdä puettava aktiivisuuden seurantakello? Tämä on puettava laite, joka on suunniteltu tärisemään havaitessaan pysähtyneisyyden. Vietätkö suurimman osan ajastasi tietokoneella kuten minä? Istutko tuntikausia huomaamatta? Sitten tämä laite on f