Mikroprosessorin GPIO-nastat eivät koskaan riitä
Asetettu päälleJotenkin riippumatta siitä, minkä mikroprosessorin valitsen, minulta loppuvat GPIO-nastat projektin tarpeita varten tai mitä haluan tehdä.
Joten äskettäisessä projektissa vaihdoin ESP8266:sta ESP32:een, jossa on paljon enemmän GPIO-nastoja kuin edeltäjässään .. mutta ei silti tarpeeksi projektiin, jonka parissa työskentelen.
Lopettaakseni tämän GPIO-nastojen käytön lopullisesti, päätin, että tarvitsen halvan laajennuskortin, joka voidaan konfiguroida kytkimille (tulo) ja LEDeille tai muille asioille (lähtö). Ja kun olin siinä, ajattelin, että ylimääräinen logiikka olisi mukavaa.
Joten keksin I2C-kortin, jossa on kahdeksan GPIO-nastaa, jotka ovat vapaasti konfiguroitavissa tuloa tai lähtöä varten (kutsun GPIO-nastoja "Sloteiksi").
Laajennuslevy sopii erinomaisesti käytettäväksi juottamattomassa leipälevyssä. Kaavakuva voidaan myöhemmin sisällyttää laitteiston kokonaissuunnitteluun.
Slottia, joka on määritetty tuloa varten, käytetään luultavasti kytkimille, ja silloin olisi hienoa, jos pystyisimme erottamaan painikkeen painamisen ja sen vapauttamisen (pikavapautus, keskivapautus ja pitkä vapautus). Pääprosessorin koodissa voit vain sanoa:
Lähtöä varten määritetyistä paikoista tulee "ampu ja unohda" -tyyppisiä paikkoja. Toisin sanoen voit määrittää Slotin olevan HIGH tai LOW, kuten Arduino IDE:n digitalWrite()-toiminnolla. Mutta voit myös sanoa: menee HIGH 2500 ms ja menee sitten taas LOW. Pääohjelmassasi sinun ei tarvitse kirjoittaa koodia odottaa 2500 ms ja tehdä sitten GPIO-nastasta LOW.
Voit myös käskeä lukon vilkkumaan päälle- ja poistumisajan sekä halutessasi keston kanssa. Esimerkiksi:
Lukitus vilkkuu 500 ms päällä, 1000 ms pois päältä 10 sekunnin ajan (10 000 ms) ja lakkaa sitten vilkkumasta.
Samanlainen kuin yllä oleva esimerkki, mutta nyt lukko vilkkuu ikuisesti (tai kunnes käsket sen tekemään jotain muuta);
Laitteisto on suunniteltu ATtiny841-mikro-ohjaimen ympärille. Tiedonsiirto tapahtuu I2C-väylän kautta (kaksi johdinta, SCL ja SDA).
Voit käyttää kortteja joko 5 voltilla tai 3,3 voltilla tarpeidesi mukaan (lähinnä pääprosessorin käyttämästä jännitteestä), mutta et voi yhdistää 5 voltin ja 3,3 voltin järjestelmiä ilman ylimääräistä logiikkaa (tasonsiirtimet SDA- ja SCL-linjoille) .
ADW0720-korttien ohjaamiseksi kehitin kirjaston, jossa on yksinkertaiset toiminnot.
Jokaisella I2C-laitteella on osoite välillä 1-127 (desimaali). ADW0720-korttien oletusosoite on 0x18 (24 desimaalista), mutta voit muuttaa sen haluamaksesi seuraavalla koodilla:
Toinen rivi tallentaa tämän uusi osoite EEPROMiin ja siitä lähtien se on uusi osoite tämän moduulin osoite.
Antamalla jokaiselle ADW0720-kortille yksilöllisen osoitteen, voit ohjata useita ADW0720-kortteja käyttämällä vain kahta I2C-linjaa!
Olen suunnitellut kahden tyyppisiä ADW0720-levyjä, jotka ovat käyttövalmiita. Type-1-kortissa on 4 kosketuskytkintä ja 4 LEDiä, Type-2-kortissa on 8 LEDiä, mutta ei kytkimiä.
LED-valojen sijasta on myös mahdollista käyttää N-kanavaista MOSFETiä (kuten 2N7000 tai 2N7002) kytkimenä suurempien kuormien, kuten summerien, releiden tai moottoreiden, ohjaamiseen.
Löydät kirjaston ja koodin ATtiny841-I2C-orjalle osoitteesta github. Sieltä löydät myös kirjaston dokumentaatiot.
Kirjaston mukana tulee kaksi esimerkkiluonnosta. Ensimmäinen on näyttää, mitä ADW0720-kortit voivat tehdä (show-of) ja toinen esimerkki (I2C_ADW0720_Configurator) näyttää edistyneemmän käytön.
Esimerkiksi toisessa esimerkissä voit asettaa Slots-palojen toiminnot (tulo tai lähtö) ja voit asettaa ADW0720:n I2C-osoitteen, jotta sinun ei tarvitse tehdä sitä pääohjelmassasi.