Avtor: Brian Millier
Epošta: bmillier1@gmail.com
Ko so majhni okrogli TFT zasloni postali dostopni navdušencem nad elektroniko, kot sem sam, sem se spraševal, za kaj bi jih lahko uporabili – razen za pametne ure ali morda kot nadomestilo za okrogle analogne števce (npr. d’Arsonvalove merilnike).
Kasneje sem naletel na sporočilo o izdelku podjetja Grayhill (izdelovalca rotacijskih kodirnikov itd.), ki je opisovalo industrijski rotacijski enkoder z majhnim TFT zaslonom, vgrajenim v sredino telesa enkoderja. To je bila zelo robustna enota s premerom približno 56 mm in 33 mm zaslonom, ki je prikazana na sliki 1.
Ta zamisel mi je bila všeč, vendar je bila cena tega enkoderja zame previsoka – približno 320 ameriških dolarjev. Razmišljal sem, da bi takšno enoto poskusil izdelati sam, saj bi bil to odličen članek, vendar nisem mogel ugotoviti, kako izdelati vrtljivo številčnico, povezano z vrtljivim enkoderjem, ki bi omogočala fiksni LCD zaslon, nameščen na sredini.
Pred kratkim sem naletel na M5Dial, ki ga je izdelalo podjetje M5Stack. Kot lahko vidite na sliki 2, je ta na videz zelo podobna Grayhill enkoderju. Ni tako robusten, kot Grayhill-ov enkoder. Vendar za razliko od Grayhill enkoderja vsebuje več perifernih naprav, zaradi česar je bolj vsestranski kot le rotacijski enkoder/prikazovalnik.
Lastnosti M5Dial
Zame je bilo najpomembnejše to, kateri MCU je bil uporabljen in katera vrsta zaslona TFT/čipa gonilnika zaslona je bila uporabljena. M5Dial uporablja priljubljeni ESP32S3, ki je novejši in zmogljivejši model od prvotnega MCU ESP32 WiFi. Čeprav je malo verjetno, da bi pisali zelo zapleteno ugnezdeno programsko opremo za MCU, ki je v osnovi namenjen krmiljenju enkoderja in TFT zaslona, vsebuje ESP32S3 v M5Dialu 8 Mb Flash pomnilnika. To veliko količino Flash pomnilnika lahko razdelite na tri dele:
Ta vsebina je samo za naročnike
- Programska particija Flash-a
- OTA particija (za brezžično programiranje)
- SPIFFS particija (datotečni sistem, ki bazira na Flash-u)
SPIFFS datotečni sistem lahko uporabite za shranjevanje številnih JPEG ali PNG slik, ki jih lahko uporabite kot slikovno ozadje za različne menije, ki jih boste morda želeli uporabiti.
ESP32S3 vsebuje lastna USB vrata, ki so hkrati COM serijska vrata in JTAG vrata za razhroščevanje. Tako kot vsi Espressif WiFi MCU-ji, lahko ugnezdeno programsko opremo za ESP32S3 razvijete s pomočjo Arduino IDE in jo prek USB vhoda tudi sprogramirate. M5Dial uporablja sodobno USBC vtičnico in ne starejšega microUSB standardarnega konektorja.
TFT zaslon, ki ga uporablja M5Dial, je barvni zaslon z ločljivostjo 240 x 240 pik s premerom 32,5 mm. Ta zaslon vsebuje krmilnik GC9A01. Čeprav je to običajen krmilnik za majhne okrogle TFT zaslone, zanj ni na voljo veliko knjižnic gonilnikov za Arduino zaslone. Vendar pa je M5Stack za M5Dial zagotovil knjižnice za podporo Arduino ploščam. V nadaljevanju članka bom podrobno opisal, kako uporabiti ta zaslon z Arduino skicami. Osvetlitev TFT zaslona lahko programsko prilagodite, da spremenite svetlost ali zmanjšate porabo energije, če M5Dial deluje na baterijo.
Zaslon M5Dial enkoderja vsebuje tudi kapacitivni zaslon na dotik. Funkcijo zaslona na dotik izvaja krmilni čip FT3267. To je običajen krmilnik, ki ga podpira M5Stack knjižnica kot del plošče M5Dial. FT3267 podpira večtočkovni dotik, ki deluje na M5Dial, zato lahko izvajate preproste geste z dvema prstoma. V praksi pa je zaslon premajhen, da bi lahko z dotikom naredil karkoli prefinjenega – za zaznavanje dotikov ga kvečjemu razdelim na 4 kvadrante. Za dopolnitev tega zaslona na dotik M5Dial vsebuje plastični okvir okoli TFT zaslona in tipko na položaju „6 ur“. Ta je označen kot „wake“ in „hold“ ter je povezan z GPIO42 oziroma GPIO46. Nisem prepričan, kako to natančno deluje, vendar obstajata dve rutini, ki ju lahko pokličete, da to preverite:
M5Dial.BtnA.wasPressed()
M5Dial.BtnA.pressedFor(2000)
//2000 je štetje milisekund
M5Dial vsebuje uro realnega časa (RTC) BM8563. Verjamem, da je to azijski klon NXP PCF8563 RTC. Domnevam, da je funkcionalno enakovreden NXP RTC-ju, v vsakem primeru pa ga podpira podporni paket M5Dial plošče.
Vrtljivi enkoder je edina nekoliko lastnost enote, ki razočara. Njegova ločljivost je le 16 korakov/detentov na obrat. Primernejši je za premikanje po menijih in kratkih seznamih, ne pa na primer za prilagajanje vrednosti parametra. Vendar bom v nadaljevanju članka navedel nekaj primerov programov, kjer lahko to omejitev premagate z uporabo zaslona na dotik.
Za zvočno povratno informacijo je na voljo piskač. Ta piezo piskač nima lastnega oscilatorja/gonilnika. Poganja ga kvadratni signal na njegovem GPIO priključku: njegovo frekvenco lahko določite, ko pokličete Speaker.tone() funkcijo.
Zadnja funkcija, ki jo opravlja M5Dial, je branje običajnih Mifare RFID itd. kartic. Preizkusil sem ga z nekaj RFID karticami, ki sem jih imel pri roki iz prejšnjega projekta, in jih je dobro zaznal, ko so bile postavljene v bližino TFT zaslona na sprednji strani enote. Iz nekega razloga pa niso bili zaznani vsi RFID tag-i, ki sem jih prav tako imel pri roki iz prejšnjega projekta. Nisem imel časa, da bi priključil modul za branje RFID, prav tako rezervni iz prejšnjega projekta, in preveril, ali bo prebral te RFID tag-e. Mislim, da sem takrat uporabljal samo RFID kartice.
Med TFT zaslonom in zaslonom na dotik ter vsemi perifernimi napravami, ki jih vsebuje M5Dial, ni nič presenetljivega, če ugotovimo, da ni na voljo preveč GPIO priključkov ESP32S3 za povezavo z vsemi zunanjimi napravami, ki jih boste morda želeli uporabiti. Na zadnji strani M5Dial pa sta dve 4-pinski Grove vtičnici:
- UART vrata skupaj s 5V in priključkom za maso in
- I2C vrata skupaj s 5V in priključkom za maso.
M5Dial se lahko napaja iz USBC (5 V) vhoda ali iz 2-pin 1,25 mm vtičnice (priložen je ustrezen vtič). V slednjem primeru mora biti napajalna napetost v razponu 6-16 V. Ni videti, da bi ga bilo mogoče napajati z eno LiPo celico. Vendar je na shemi prikazan čip za polnjenje LiPo TP4057, ki je priključen na 2-pin priključek (P6). Če želite uporabiti enocelično LiPo baterijo, morate odstraniti modul M5StampS3, da dobite dostop do tega vodila. Nisem prepričan, kako bi napajalne LiPo vodnike speljali iz M5Dial, ko ste zamenjali modul M5StackS3. Dvocelično (7,2V) LiPo baterijo bi seveda lahko uporabili s 6-16V napajalnim vhodom.
Montaža M5Dial bi morala biti razmeroma preprosta. Zahteva luknjo premera 44 mm, priložena pa ji je ustrezna plastična pritrdilna matica.
Na plošči PC M5Dial je več napetostnih regulatorjev:
- ME3116AM6G stikalni regulator, ki zniža 6-16V DC vhodno napetost na 5V.
- SY7088 boost regulator, ki pretvori napetost enocelične LiPo baterije na 5V.
- SY8089 stikalni regulator, ki pretvori napetost LiPo baterij do 3,3V.
- Čeprav ne gre za napetostni regulator, je na voljo CN809J za nadzor napetosti in generiranje reset signala, ki odklopi vezje, povezano z LiPo baterijo, ko se na P5, 6-16V DC vhodni priključek, priključi napetost.
Ni konektorja za gumb baterijo, ki bi napajala BM8563 RTC, ko je odstranjeno drugo enosmerno napajanje. Če pa napravo M5Dial napajate z LiPo celico, priključeno na notranji P6 priključek, bo ta napajala BM8563 RTC.
M5Dial vezje ni nameščeno na eni sami okrogli plošči tiskanega vezja. Namesto tega vsebuje M5StampS3 modul (slika 3), ki je priključen na gostiteljsko ploščo, ki vsebuje vse prej omenjene funkcije vezja (razen tistih na samem modulu M5StampS3). To je dobra lastnost: če bi programirali več M5Dial naprav, bi lahko celoten razvoj programa opravili na eni enoti, nato pa vnaprej programiran M5StampS3 modul vstavili v M5Dial napravo v končnem izdelku.
Shemo modula M5StampS3 najdete na naslovu:
https://docs.m5stack.com/en/core/stamps3
Shemo preostalega vezja v M5Dial napravi najdete na naslovu:
https://docs.m5stack.com/en/core/M5Dial
Napajalne zahteve
Če ste navajeni delati z ESP32, potem že imate precej dobro predstavo o njegovi porabi energije. Vendar bom opisal, katere meritve sem opravil, za tiste, ki niso tako dobro seznanjeni s tem.
Družina ESP32 na splošno ne spada med naprave z nizko porabo energije. Pričakujete lahko, da bo med izvajanjem običajnega programa porabila približno 40 mA, vendar bo med oddajanjem prek WiFi porabila približno 400 mA. Ko je ESP32S3 v stanju globokega spanja, bo porabil približno 8-10 µA.
Za merjenje porabe energije M5Dial sem uporabil analizator moči Joulescope JS220. Zato odčitki, ki sem jih dobil, vključujejo tudi moč, ki jo porabi TFT zaslon in drugi periferni čipi v enoti. Slika 4 prikazuje porabo toka M5Dial, v kateri teče program, ki prek omrežja WiFi vzpostavi stik z NTP strežnikom in te podatke uporabi za nastavitev notranje ure realnega časa BM8563 enote M5Dial ter njen prikaz.
Vidite lahko več „konic“, ko ESP32S3 stopi v stik z NTP strežnikom – te so v povprečju približno 170 mA (~400 mA največjega toka). V preostalem času M5Dial porabi približno 76 mA, kar vključuje tudi energijo, ki jo porabi TFT zaslon, ki deluje med tem preskusom.
Na sliki 5 izvajam program, ki ESP32S3 občasno preklopi v način globokega spanja. Tu je poraba toka med delovanjem ESP32S3 87 mA in pade na 8,6 mA, ko je ESP32S3 v načinu globokega spanja. Poraba 8,6 mA je veliko večja od porabe 8-10 µA samega ESP32S3.
Dodatni tok porabijo druge periferne naprave, ki jih vsebuje M5Dial, pa tudi mirujoči tok 3,3V regulatorja. Če sem iskren, se ne spomnim, ali sem pri tem testu izklopil osvetlitev TFT (z nastavitvijo svetlosti zaslona na nič) ali ne, zato je mogoče 8,6 mA še dodatno zmanjšati.
Podpora za M5Dial ploščo v Arduino okolju
Ker M5Dial kot MCU uporablja Espressif ESP32S3, je za programiranje z Arduino IDE potrebno, da je v vašem Arduino IDE prisotna podpora za ESP32 ploščo. To zahteva, da uporabljate Arduino V1.8 ali novejšo različico. Če želite namestiti paket za podporo ESP32 plošče, pojdite v meni File->Preferences (Datoteka->Nastavitve) in dodajte naslednjo vrstico v okno z možnostmi, označeno kot „Additional Boards Manager URLs“ (Dodatni URL naslovi upravitelja plošč):
https://espressif.github.io/arduino-esp32/package_esp32_index.json
Nato pojdite v meni Orodja->Plošča in vnesite „ESP32“. Nato boste videli vnos „ESP32 by Espressif“. Izberite različico 2.0.11 ali novejšo in jo namestite.
Na tej točki bi lahko razvili programe za različne ESP32 plošče, ki so na voljo, vendar M5Stack plošče ne bi bile vključene. Za vključitev M5Stack plošč sledite podobnemu postopku kot zgoraj, vendar v okno „additional Boards Manager URLs“ dodajte naslednjo vrstico:
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
Spet boste morali iti v Upravitelja plošč, poiskati „M5Stack“ in namestiti ta paket.
Če zdaj pogledate razpoložljive plošče v Arduinu, boste videli različne M5Stack plošče, vendar ne boste našli M5Dial. Namesto tega poiščite vnos M5StampS3 in ga izberite kot ploščo. Modul M5StampS3 je namreč nameščen na glavni plošči računalnika M5Dial.
Čeprav lahko zdaj razvijate programe za ESP32S3 MCU, s tem še niste končali. Dodati morate knjižnice, ki jih je napisal M5Stack, za obdelavo različnih perifernih naprav, nameščenih na M5Dial (ali katerega koli od številnih drugih modulov M5Stack, če smo že pri tem). Tukaj so potrebne knjižnice in njihovi URL Github naslovi:
- M5Dial @ https://github.com/m5stack/M5Dial
- M5GFX @ https://github.com/m5stack/M5GFX
- M5Unified @ https://github.com/m5stack/M5Unified
Ko prenesete te tri ZIP datoteke, jih postavite v mapo Arduino Libraries. Nato z uporabo menija Sketch->Include Library->Add ZIP library namestite te tri knjižnične pakete.
Tu je potrebnih nekaj pojasnil. Knjižnica M5Dial vsebuje posebne funkcije, povezane s perifernimi napravami na plošči M5Dial (TFT, krmilnik zaslona na dotik, RFID, RTC, zvočni signal itd.). Vendar pa je odvisna od drugih. TFT rutine so vsebovane v knjižnici M5GFX, številne druge pa v knjižnici M5Unified. Naslov slednje knjižnice namiguje na njen format – knjižnici M5GFX in Unified sta napisani v formatu HAL (Hardware Abstraction Layer). To pomeni, da bodo vse M5Stack plošče, ne glede na MCU, ki ga uporabljajo, in periferne čipe, ki jih imajo na plošči, uporabljale knjižnici M5GFX in M5Unified, ki bosta prilagodili nizko nivojsko kodo gonilnika za določeno ploščo, ki se uporablja.
Čeprav je to praktičen pristop družbe M5Stacks, je za novega uporabnika teh plošč nekoliko zmeden. V mojem primeru me je skrbelo pisanje kode za krmilnik TFT zaslona/zaslona na dotik, saj krmilnik zaslona GC9A01 ni tako pogost in z njim nisem imel izkušenj. Na splošno se zanašam na vzorčne programe in od tam ugotavljam, kako nadaljevati.
V tem primeru, če greste na seznam Arduino Examples in se pomaknete v razdelek, ki se nanaša na razdelek „Examples for M5StampS3“ (ker je to plošča, ki jo morate določiti za M5Dial), ne boste našli ničesar za TFT M5Dial zaslon ali katero koli drugo periferno napravo. Namesto tega se morate pomakniti v razdelek „Primeri iz knjižnic po meri“ (angl. Examples from Custom Libraries). Tu boste našli vnose za vsakega od treh zgoraj omenjenih knjižničnih paketov M5. Če izberete razdelek „M5Dial“, boste dobili nekaj zelo osnovnih primerov za vse periferne naprave M5Dial (RTC, zvočni signal, RFID, zaslon na dotik in enkoder). Vendar je primer za TFT zaslon tako osnoven, da je praktično neuporaben.
M5Dial rutine za knjižnico za TFT displej
Za vse uporabne rutine za prikaz na TFT-ju, vključno z risanjem besedila, grafike in bitnih slik, morate obiskati razdelek M5GFX->Basic, kjer boste našli več uporabnih primerov za prikaz na TFT-ju. Vendar upoštevajte, da vsi ti primeri ne bodo uporabni na majhnem TFT zaslonu M5Dial. Vendar pa služijo kot dobro vodilo za vaše lastne skice, ki potrebujejo različne funkcije zaslona. Razdelek M5Unified ne vsebuje ničesar uporabnega za M5Dial, razen tistega, kar je na voljo v prejšnjih dveh razdelkih.
Čeprav so ti primeri koristni, si običajno rad ogledam izvorno kodo v samih knjižnicah:
- Kakšne so razpoložljive funkcije?
- Kateri parametri so potrebni za vsako funkcijo?
- Katera vrsta spremenljivke je potrebna za vsak parameter?
Zaradi strukture teh knjižnic, tj. uporabe strojne abstrakcijske plasti in razpršenosti funkcij v treh ločenih knjižnicah, zbiranje zgornjih informacij ni trivialno. To oviro sem premagal na naslednji način. Čeprav je ni lahko najti, je tukaj vadnica, ki opisuje večino funkcij TFT zaslona:
https://community.m5stack.com/topic/41/lesson-1-1-lcd-graphics
V tem priročniku so vse funkcije opremljene s predpono M5.lcd. Vendar pa lahko opazite, da nekateri M5Dial primeri uporabljajo iste funkcije, vendar imajo predpono M5Dial.Display. Zaradi HAL narave treh prej omenjenih M5 knjižnic se lahko oba načina označevanja uporabljata izmenično.
Če uporabljate starejši IDE Arduino 1.8.x, veste, da njegov urejevalnik nima veliko orodij, kot sta dokončanje ukazov Intellisense ali možnost klika na vrstico, ki vsebuje knjižnično funkcijo, in pridobitev informacij o parametrih/tipih, potrebnih za to funkcijo. Prav tako ne omogoča klika na knjižnično funkcijo in skoka na mesto, kjer je ta funkcija opredeljena, v izvorni datoteki knjižnice. S to zmožnostjo je delo z novimi, ne tako dobro dokumentiranimi knjižnicami veliko lažje. V preteklosti sem uporabljal vtičnik Visual Micro za Visual Studio 2019, ki je „ovoj“ okoli starejšega okolja Arduino IDE. Ta aplikacija je zagotavljala zgoraj navedena orodja in še mnoga druga, kar je precej olajšalo razvoj.
Z veseljem lahko povem, da nov Arduino 2.3.2 IDE vsebuje veliko orodij, ki sem jih prej uporabljal v Visual Micro/Visual Studio. Predlagam, da ga namestite, če se ukvarjate z razvojem programov na M5Dial.
Organizacija Arduino se je ob objavi novega IDE pohvalila z novo možnostjo razhroščevanja strojne opreme v IDE. V preteklosti sem uporabljal Atmel AVR MCU-je in sem kupil razhroščevalno enoto Atmel JTAGICE3. Takrat sem programiral z Bascom-AVR, ki ni podpiral strojnega razhroščevanja. Atmel Studio je sicer podpiral JTAGICE3, vendar se mi je zdel zelo težaven za uporabo. Namesto tega sem se odločil za uporabo okolja Arduino IDE, ki je bilo v tistem času sicer precej poenostavljeno/omejeno, vendar je olajšalo prehod na C++. Vendar do različice 2.x.x Arduino IDE ni podpiral razhroščevanja strojne opreme.
Trenutno Arduino 2.3.2 podpira le strojno razhroščevanje na MCU-jih na osnovi ARM, ki so na ploščah Arduino (izjema je Raspberry Pi Pico). Za večino podprtih Arduino plošč je potreben ločen modul za JTAG razhroščevanje.
Prejšnje različice Arduino 2.x.x IDE okolja so zagotavljale, da je njegova funkcija strojnega razhroščevanja delovala z ESP32S3. Kot dodaten bonus ne bi potrebovali ločenega razhroščevalnega JTAG modula, saj ESP32S3 vsebuje USB-JTAG razhroščevalnik v samem MCU-ju. Vendar je bila ta zmožnost v različici 2.3.2- izgubljena, vsaj za zdaj, dokler ne bo prišlo do nekaterih sprememb v paketu za podporo ploščam ESP32. Poskusil sem uporabiti funkcijo razhroščevanja Arduino 2.3.2 z ESP32S3, uporabljenim v tem projektu, in se prepričal, da ne deluje.
Poleg prej omenjenega priročnika za LCD M5 je še ena koristna informacija o uporabi različnih pisav na TFT zaslonu. Pri tem je na voljo kar nekaj fleksibilnosti. Za začetek je v M5 knjižnicah na voljo veliko pisav. Najdete jih v naslednji Libraries mapi:
M5GFX/src/lgfx/fonts
Sama mapa fonts vsebuje 11 pisav, vendar so v njej še 4 druge podmape, ki vsebujejo veliko več pisav, med katerimi so tudi pisave v tujih jezikih (mapa efont). Velikost pisave v točkah je dodana imenu pisave in se giblje od 9 do 72. S funkcijo knjižnice setTextSize() pa lahko te pisave pomanjšate od 1x do 7x (čeprav bo v večini primerov majhna velikost zaslona M5 omejila praktično izbiro na faktor pomanjšanja, manjši od 4). Za prikaz besedila s temi pisavami uporabite samo funkcijo M5Dial.Display.Print(), barva končnega besedila pa je določena s funkcijo knjižnice setTextColor().
Obstaja tudi funkcija TFT zaslona drawChar(). Ta uporablja fiksno mrežo znakov z nizko ločljivostjo 5×7, vendar jo je mogoče pomanjšati. V tem primeru se pri skaliranju ne uporablja funkcija setTextSize(), temveč se faktor skaliranja vnese kot zadnji parameter, posredovan rutini. Razpon je 0-256, vendar je praktično gledano faktor pomanjševanja 3-5 edina smiselna izbira pri majhnem M5Dial zaslonu.
M5Dial zaslon ima 16-bitno barvno paleto, urejeno po standardu RGB565 (5-bitna rdeča, 6-bitna zelena, 5-bitna modra). M5Dial knjižnice, ki sem jih navedel prej, opredeljujejo številne običajne barve v obliki TFT_BLACK itd. Druga možnost je, da obiščete spletno stran RGB565colorpicker.com kjer najdete spletni kalkulator.
Med grafičnimi rutinami v knjižnici zaslona TFT so različne rutine za kroge, loke in pravokotnike, tako zapolnjene kot nezapolnjene. Funkcija M5Dial.Display.drawCircleHelper() deluje v redu: kvadranti so:
- 1 (9-12 ure)
- 2 (12-3 ure)
- 3 (kombinacija 1&2)
- 4 (3-6 ure)
- 8 (6-9 ure)
Vendar M5Dial.Display.fillCircleHelper() rutina ne daje nobenih uporabnih rezultatov.
Želel sem rutino za razdelitev zaslona na 4 kvadrante, vsakega v drugi barvi, za preprost menijski sistem. Brez funkcije fillCircleHelper() je to še vedno enostavno narediti z uporabo štirih zapolnjenih pravokotnikov, saj del pravokotnikov, ki sega čez rob krožnega zaslona, tako ali tako ni prikazan. Slika 6 prikazuje prikaz menija.
Nisem preizkusil nobene od rutin za bitne slike na TFT zaslonu. Bitno sliko morate nekako prenesti v SRAM ESP32. To se običajno doseže z branjem take bitne slike z SD kartice, ki je z ESP32S3 povezana prek SPI vrat in uporablja SD knjižnico.
V primeru M5Dial ni priključkov za zunanja SPI vrata (čeprav se ena od SPI vrat na ESP32S3 uporablja za TFT zaslon). Vendar pa lahko v ESP32S3 M5Dial nastavite particijo SPIFFS in nanjo naložite bitne slikovne datoteke z uporabo funkcije „Sketch Data Upload“ v meniju Orodja v Arduino IDE.
Ta funkcija je razširitev, ki jo morate dodati različici 1.8.x. Vendar je v različici 2.x.x Arduino IDE ni, ker različica 2.x.x Arduino IDE ne podpira razširitev. To je zelo žalostno!
Zadnje točke, ki jih bom omenil v tem poglavju o TFT zaslonu, so naslednje:
- Slika 7 prikazuje „analogni“ prikaz VU metra, ki sem ga napisal.
- Na sliki 8 je prikazana rutina za „analogen“ S-meter, ki sem jo napisal.
Koda za obe skici je na voljo na spletnem mestu revije Svet Elektronike v razdelku za podporo člankom. Upoštevajte, da je v obeh skicah rutini posredovana vrednost od 0 do 100, ki predstavlja odklon od nič do polnega obsega. Odgovornost za preslikavo enot S ali enot VU v to območje mora opraviti rutina, ki kliče te rutini za prikaz.
V naslednji številki revije Svet Elektronike bom opisal projekt, ki sem ga izvedel z uporabo M5Dial. Na M5Dial sta na voljo en I2C vhod in en UART vhod. Zanimalo me je, ali bi na M5Dial priključil programirljiv generator signalov AD9833. AD9833 omogoča sinusne, trikotne in kvadratne oblike signalov pri natančno nadzorovanih frekvencah. Vendar uporablja SPI vmesnik, ki ga M5Dial nima na voljo. V drugem delu tega članka bom razložil, kako sem to omejitev zaobšel.
https://svet-el.si