Mikroprosessorin GPIO-nastat eivät koskaan riitä

Asetettu päälle

Jotenkin 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.

ADW0720 Tyyppi 2 ADW0720 Tyyppi 2

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 ATtiny841 ADW0720 ATtiny841

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ä.

ADW0720 Type 1 (4 LEDiä, 4 kytkintä) ADW0720 Type 1 (4 LEDiä, 4 kytkintä)
ADW0720 Type-2 (8 LEDiä, ei kytkimiä) ADW0720 Type-2 (8 LEDiä, 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.

Kaavio ADW0720 Type-1 -kortista Kaavio ADW0720 Type-1 -kortista
ADW0720 Type-2 kortti ADW0720 Type-2 kortti
Aputoiminnot kirjastosta Aputoiminnot kirjastosta
lähettänyt Verkkosivusto Willem Aandewiel (1955) on tausta elektroniikasta ja digitaalitekniikasta. Suurimman osan työelämästään hän on kuitenkin työskennellyt automaation parissa, jossa hän on työskennellyt lähes kaikilla aloilla ohjelmoijasta projektijohtajaan ja projektipäälliköön. Willem oli yksi ensimmäisistä hollantilaisista, joilla oli mikrotietokone (KIM-1, 1976) aikana, jolloin PC:tä ei ollut vielä keksitty. Nykyään hän keskittyy pääasiassa pienten mikroprosessoreilla varustettujen elektronisten piirien suunnitteluun ja tuotantoon. Hänen "elämäntehtävänsä" on saada ihmiset innostumaan omien elektronisten piirien, mikrotietokoneiden ja ohjelmoinnin tekemisestä.

Kommentit

The Netherlands Edwin vd Oetelaar
Hei herra Willem, Eikö MCP23017 16-bittisen IO-laajentimen käyttäminen keskeytyksen generoimalla ... olisi helpompaa projekteissa kuin erillisen IO-prosessorin tekeminen itse? Kysyn tätä, koska olen myös itse lintuharrastaja. Haluan varustaa ESP32-S-moduulin sarjalla termopariliitäntöjä - parilla 0-10 V ADC:tä - ja rivillä logiikkatuloja/lähtöjä tehdäkseni lämpöpumppujen ohjausta koskevan projektin (ja ymmärtää myös käyttäytymisen). on auttaa tätä klubia https://www.adelaar-innovatie.nl/over-ons. Toivon kahta ajatusta, ESP32, jossa kaikki on I2C-väylän kautta tai erillinen AVR (esim. atmega2560), joka hoitaa kaikki IO:t (ja mahdollisesti myös reaaliaikaisen käyttäytymisen) ja jonka kanssa annan ESP32:n puhua sarjaprotokollan kautta. Ole hyvä ja näkemyksesi. Terveisin Edwin van den Oetelaar
Asetettu päälle 
Willem
Hei Edwin, Tällainen I/O-laajennus sopii myös, mutta se ei tarjoa lisätoimintoja, kuten lyhyiden, keskipitkien ja pitkien näppäinpainallusten käsittelyä tai vilkkuvia LED-valoja ilman oman koodisi väliintuloa tai sammuta LED tietyn ajan kuluttua uudelleen. Katso: https://willem.aandewiel.nl/index.php/2020/08/10/extending-gpio-pins-on-your-micro-processor/
Asetettu päälle 
Edwin
Hei herra Willem, kiitos palautteestasi tästä aiheesta. Tulin samaan tulokseen, molemmat vaihtoehdot ovat mahdollisia. Yksi asia kuitenkin huolestuttaa minua käytettäessä laiteohjelmiston ohjattua IO-prosessoria. Tämä on tosiasia, että laiteohjelmistossa voi olla ongelmia (virheitä tai muita). Päivittämällä ESP32:n päälaiteohjelmiston, haluaisin myös päivittää ja poistaa vikoja koko järjestelmästä. Oletko koskaan flashannut toisesta master-suorittimesta AVR MCU:n laiteohjelmiston, joka oli jo piirissä ja otettu käyttöön? Vaihtoehtoinen lähestymistapa, jota harkitsen, on käyttää FPGA:ta IO-käsittelyyn. FPGA-laiteohjelmiston (kuvan) toimittaa pääprosessori järjestelmän käynnistyksen yhteydessä. Näin koko järjestelmän laiteohjelmisto voidaan päivittää järjestelmän ollessa kentällä ilman ihmisen puuttumista. Ajatuksesi ja runsas kokemuksesi ovat erittäin tervetulleita. Terveisin, Edwin
Asetettu päälle 
Webwinkelkeur Kiyoh Trustpilot Opencircuit