I2C pyörivä anturi
Asetettu päälleI²C Rotary Encoder
Käsittelen tässä artikkelissa kahta aihetta.
Ensimmäinen koskee Rotary Enkoodereja ja (lyhyesti) niiden toimintaa. Toinen koskee Philipsin kehittämää Inter-Integrated Circuit-protokollaa (I²C).
pyörivät kooderit
Rotary Encoder on laite, joka (fyysisesti) muistuttaa potentiometriä, mutta ei muuta vastusta kahden/kolmen liittimen välillä, vaan antaa pulsseja, kun akselia käännetään. Toinen ero potentiometriin on, että voit kääntää akselia 360° (itse asiassa ei ole rajaa kuinka monta astetta voit kiertää akselia).
Useimmissa pyörivissä koodereissa on painokytkin, joka aktivoituu, kun painat akselia. Ja on olemassa pyöriviä koodereita, joissa on sisäinen kolmivärinen LED (ns. RGB Rotary Encoder), jolla voit antaa palautetta käyttäjälle väripaletilla.
Rotary Encoder tuottaa pulsseja, kun akselia käännetään. Useimmat pyörivät kooderit tuottavat 24 pulssia jokaisella 360°:n kierroksella, mutta on myös pyöriviä enkoodereita, jotka tuottavat enemmän tai vähemmän pulsseja kierrosta kohti. Ohjelmassasi voit laskea nämä pulssit ja reagoida niihin (esimerkiksi: lisätä tai vähentää virtalähteen lähtöjännitettä tai käydä läpi valikkoluetteloa).
Saatat kysyä: " Miksi käyttää Rotary Encoderia eikä vain potentiometriä? ". Tähän ei tietenkään ole " tämä on parempi kuin tuo " vastausta. Se riippuu projektista. Jos rakennat analogista hifi-vahvistinta, potentiometri on luultavasti parempi valinta. Jos sinulla on projekti, jossa on mikroprosessori, Rotary Encoder antaa sinulle monia vaihtoehtoja mukavan käyttöliittymän luomiseen (ehkä hieno/karkea muutos riippuen lyhyestä tai pitkästä akselin painalluksesta ja värillinen palaute näyttää mikä tila on aktiivinen) .
Alla on esimerkkipiirros Rotary Encoderin "lukemiseksi". Jotta tämä ohjelma toimisi oikein ja luotettavasti, tarvitset laitteiston pomppimisen ohjauksen (RC-verkko) kooderin nastoihin A ja B:
Demo Sketch Rotary Encoder
Valitettavasti Rotary Encoderin käytöllä projektissa on myös haittapuoli: tarvitset paljon GPIO-nastaja!
Yksi RGB Rotary Encoder tarvitsee kaksi GPIO-nastaa itse kooderia varten (plus GND), sitten tarvitset yhden GPIO-nastan painokytkimelle ja kolme GPIO-nastaa RGB-LEDille. Se on yhteensä kuusi GPIO-nastaa! Esimerkiksi ESP8266:ssa sinulla on enää kolme GPIO-nastaa jäljellä projektin loppuosan ohjaamiseen! Arduino UNO:ssa on enemmän GPIO-nastoja, joten yksi pyörivä Encoder ei ole ongelma. Mutta entä jos haluat liittää kaksi, kolme tai jopa useampia Rotary Enkooderia. Se ei ole mahdollista ESP8266:ssa, mutta Arduino UNO:ssa GPIO-nastat loppuvat pian!
Onneksi on ratkaisu!
Inter-Integrated Circuit -väylä (I²C)
Tätä kutsutaan (data) "väyläksi", koska voit liittää siihen monia laitteita. "Bussi" koostuu kahdesta linjasta. Kellolinja (SCL) ja datalinja (SDA). Aina on (ainakin) yksi'hallita'-laite ja kaikki muut laitteet ovat'orja' laitteet. Jokaisella laitteella on yksilöllinen osoite, joka erottaa itsensä toisistaan. En mene I²C-protokollan syvyyksiin, mutta normaalisti isäntä vaatii väylän hallintaa ja lähettää pyynnön orjalle tietyllä osoitteella. Orja puolestaan ryhtyy toimiin pyynnön suhteen joko suorittamalla tietyn toiminnon itse orjassa, lähettämällä tietoja takaisin isännälle tai yksinkertaisesti lähettämällä kuittauksen takaisin isännälle ilmoittaen, että hän on vastaanottanut pyynnön. Tässä voit lukea lisää I²C-protokollasta.
I²C Rotary Encoder
Eikö olisi mukavaa pystyä kytkemään Rotary Encoder käyttämällä vain kahta I²C-väylän johtoa!?
Ja siitä tässä viestissä oikeastaan on kyse: pyörivästä Encoderista, jonka liität I²C-väylän kautta ja jota ohjaat I²C-protokollalla.
Suunnittelin laiteohjelmiston ja pienen piirilevyn ATtiny841-mikroprosessorilla. ATtiny841:ssä on sisäänrakennettu lankalaitteisto (I²C:n alapuolella oleva kerros), mikä tekee siitä erittäin sopivan I²C-slave-laitteena tähän malliin.
Laiteohjelmisto varmistaa, että ATtiny841 toimii toisaalta "normaalina" I²C-slavena ja toisaalta tarjoaa käyttöliittymän RGB Rotary Encoderiin. I²C RotaryEncoderin ohjaamiseksi helposti minulla on yhteensopiva ja helppokäyttöinen Arduino / ESP8266 kirjasto kirjoitettu.
Tällä asetuksella on mahdollista liittää niin monta (kirjaimellisesti!) I²C RotaryEncoderia mikroprosessoriin kuin haluat, mutta silti tarvitsee käyttää vain kahta GPIO-nastaa. Voit jopa liittää muita I²C-laitteita (näytöt, anturit jne.) samoihin kahteen GPIO-nastaan, jolloin monet GPIO-nastat jäävät vapaiksi muihin tarkoituksiin.
Jos haluat, voit käyttää I²C RotaryEncoderin keskeytysnastaa tehdäksesi ohjelmastasi "keskeytyspohjaisen".
Keskeytystappi luo keskeytyksen jokaisen pyörivän akselin tai painonapin asennon muutoksen yhteydessä. Kaikilla I²C RotaryEncodereilla on sama keskeytyslinja.
Kuinka voit käyttää I²C RotaryEncoderia projektissasi?
Alla oleva koodi on esimerkkiluonnos kommunikoidaksesi I²C RotaryEncoderin kanssa (käyttäen keskeytysnastaa):