V prejšnjem nadaljevanju smo veliko pozornosti namenili Microchip Code Configuratorju, računali varnostno kodo CRC, uporabljali modulator za digitalne signale in numerično krmiljeni oscilator in ugotovili, zakaj nekateri novejši mikrokontrolerji pri komunikaciji prek USB 2.0 ne potrebujejo natančnih kristalnih oscilatorjev.
Avtor: dr. Simon Vavpotič
Tokrat najprej nadaljujemo s periferijo Microchipovih 8-bitnikov in se v nadaljevanju lotimo praktičnega primera, izdelave krmilnika LED osvetlitve z daljinskim upravljalnikov, s katerim bomo popestrili temačne zimske večere. A ne bomo krmili samo belih LED verig, ampak tudi barvne, s katerimi pričaramo različno »tople« belo-rumene svetlobe, ali pa se podamo v svet barv.
Napredni 10- ali 12-bitni A/D pretvornik
PIC mikrokontrolerji imajo dolgo vgrajene sorazmerno zmogljive A/D pretvornike (ADC), novost pa so sodobni digitalni nizko-pasovni filtri, ki omogočajo filtriranje napak A/D pretvorbe pri počasnih signalih. S hitrim vzorčenjem in filtriranjem se tako izognemo napakam A/D pretvorbe pri večjih ločljivostih vzorčenja, predvsem od 8-bitov naprej.
Ta vsebina je samo za naročnike
Poleg natančnosti meritve je pomembna tudi njena točnost, ki jo lahko zagotovimo samo z natančno določeno referenčno napetostjo, s katero ADC primerja merjeno napetost. Denimo, 10-bitni ADC PIC16F18855 omogoča izbiro med petimi viri referenčne napetost, poleg običajnih Vref, za katero moramo žrtvovati enega od zunanjih priključkov in sami zagotoviti dovolj točen vir referenčne napetosti in napajalne napetosti Vdd, lahko izbiramo tudi med tremi fiksnimi napetostmi 1,024 V, 2,048 V in 4,096 V notranjega vira, ki deluje neodvisno od napajalne napetosti Vdd. Napetosti tega vira lahko uporablja tudi 5-bitni vgrajeni D/A pretvornik, o katerem več kasneje. Zaenkrat povejmo le, da lahko A/D pretvornik kot referenčno napetost uporablja tudi izhodno napetost D/A pretvornika.
Napredni ADC, ki so mu pri Microchipu nadeli tudi oznako ADC2 (»na kvadrat«), kar dejansko pomeni tudi veliko novih načinov delovanja, ki mikrokontrolerjevo procesno enoto razbremenijo zahtevnih izračunov. Osnovni način je enak kot pri ADC starejših mikrokontrolerjev in omogoča zajemanje podatkov brez naknadnih obdelav, dodani pa so načini: accumulate, average, burst average in nizkoprepustni filter. Pri počasnih aplikacijah, kakršno je krmiljenje LED osvetlitve, se splača uporabiti prav slednjega, saj tako zanesljiveje izmerimo napetost ob določenem bremenu.
ADC omogoča tudi merjenje zunanje kapacitivnosti, saj ima vgrajene 3 referenčne kondenzatorje, ki jih lahko programsko vklapljamo in izklapljamo prek krmilnega registra. Obenem imamo na voljo tudi digitalni stikali, s katerima kondenzatorje bodisi programsko vežemo na napajanje (Vdd) ali na maso (Vss), čemer povzročimo polnjenje ali praznjenje kondenzatorja. Kapacitivnost izmerimo s pomočjo časa polnjenja in/ali časa praznjenja.
Nadvse uporabni D/A pretvorniki
Čeprav bi težko bi trdili, da D/A pretvornika (DAC) sodobnega 8-bitnega PIC16F18855 mikrokontrolerja prinašata kopico novosti, je res, da starejši PIC-i DAC-ov niso imeli. Slednje smo poznali le pri AVR-jih.
Kljub temu, da ima veliko mikrokontrolerjev po dva DAC-a, s katerima lahko predvajamo tudi stereo zvok, je PIC16F18855 skromnejši in premore zgolj enega 5-bitnega, vendar lahko programsko preklapljamo med izhodoma DAC1OUT1 (RA2) in DAC1OUT2 (RB7), kar v praksi pomeni, da lahko s hitrim preklapljanjem in ustreznimi RC-vezji ustvarimo dva počasnejša DAC izhoda, ki dosegata največ okoli polovico hitrosti osnovnega DAC.
Katere napetosti lahko proizvede DAC? Analogni DAC ni omejen na napajalno napetost mikrokontrolerja, saj je ta le ena od mogočih izbir referenčne napetosti, podobno kot pri ADC.
A morda je ideja, da se namesto tega ozremo po zmogljivejših mikrokontrolerjih vseeno boljša. Denimo, PIC18-Q71 ima dva 8-bitna pa tudi 10-bitni DAC. Omenimo še AVR-je, od katerih imajo 8 ali 10-bitne DAC-e družine: ATtiny, AVR-DB, AVR-DA in AVR-DD.
A lotimo se raje praktičnega primera, v katerem bomo uporabili tako ADC kot DAC…
Krmilnik LED trakov
Tračno LED osvetlitev pogosto uporabljamo v kuhinji za osvetljevanje kuhinjskega pulta in kuhinjske nape, lahko pa tudi drugod, predvsem za osvetljevanje polic in vitrin. Čeprav se zdi krmiljenje LED verig sorazmerno enostaven problem, kljub temu ni trivialen, še poseben če želimo zagotavljati konstantno in dovolj zmogljivo osvetlitev. LED osvetlitev zaradi sorazmerno nizke napajalne napetosti (večinoma +12 V) omogoča tudi poceni in enostavno izvedbo upravljanja: od vseh vrst stikal in panelov za prižiganje in ugašanje posameznih svetil in nastavitve njihove svetlosti, do daljinskega upravljanja prek IR upravljalnika in/ali Bluetooth in/ali Wi-Fi in/ali Etherneta. Vendar se večina zadovolji z IR daljinskim upravljalnikom, s katerim se izogne spreminjanju že vgrajenih stikal.
Naslednje vprašanje je, kako zagotoviti napajanje. Poraba LED trakov je sicer manjša od drugih vrst svetil, a električni tokovi skozi posamezne LED trakove zaradi sorazmerno nizke napajalne napetosti lahko dosežejo tudi nekaj amperov, kar zahteva uporabo ustreznega ojačevalnega ali preklopnega vezja. Za krmiljenje LED trakov lahko uporabljamo vezja s konstantnim tokom ali PWM vezja. Prednost slednjih je manjša poraba energije, saj je padec napetosti na preklopnem elementu, na primer močnostnem P-MOSFET ali n-MOSFET tranzistorju, zanemarljiv. Po drugi strani, lahko z močnostnimi bipolarnimi NPN ali PNP tranzistorji zagotovimo želeno napajalno napetost brez uporabe visokih frekvenc in PWM, s čemer zagotovimo povsem konstanten vir osvetlitve pod pogojem da zanj uporabimo tudi konstanten tokovni vir. Je pa tudi res, da lahko z dovolj velikimi elektrolitskimi in keramičnimi kondenzatorji napetost PWM zelo dobro zgladimo, zato je prvi princip na večino uporab morda tudi enostavnejši, saj ne zahteva hlajena močnostnih bipolarnih tranzistorjev.
Kakorkoli, v našem primeru bomo za krmiljenje treh trakov LED uporabili močnostni bipolarni NPN tranzistor kot zatemnilnik (dimmer), medtem ko bomo za vklapljanje in izklapljanje LED trakov uporabili preklopne P-MOSFET tranzistorje, ki zmorejo tok nekaj amperov (npr. 10), ki jih lahko uporabljamo tudi za krmiljenje elektromotorjev. Zasnova krmilnega vezja je sorazmerno enostavna, a moramo pri tem upoštevati še dve stvari: P-MOSFET tranzistorji zahtevajo napetostni prilagodilnik, medtem ko za močnostni NPN tranzistor potrebujemo ustrezen hladilnik. In ne samo to! Denimo 15-amperskemu 2N3055 NPN tranzistorju moramo dodati še BD243C ali podoben NPN gonilni tranzistor, s katerim zagotovimo dovolj velik bazni tok. Šele tako lahko nato krmilimo z D/A pretvornikom sodobnega mikrokontrolerja. Dodajmo še, da zaradi baznega toka med 100 mA in 200 mA, ki je potreben za popolno odprtje 2N3055 pri velikem kolektorskem toku, tudi BD243C potrebuje ustrezen hladilnik.
Povsem drugače je s P-MOSFET močnostnimi tranzistorju, pri katerih lahko za napetostno prilagoditev uporabimo tranzistorje za majhne moči. Sam sem imel pri roli BC109C, ki zdrži do 200 mA kolektorskega toka, a bi brez skrbi lahko uporabil tudi bistveno manj zmogljiv tranzistor.
Program 1:
void IRAM_ATTR isr_IR()
{
…
t1 = micros() ; // Get system current time
intval = t1 – t0 ; // Compute interval
IR_i[IR_active]=intval;t0=t1; // Save for next compare
if(IR_active>MAX_interval)IR_active=MAX_interval; // Preserve recording
if ( ( intval > 100 ) && ( intval < 1000 ) ) // Short pulse?
{
ir_locvalue = ir_locvalue << 1 ; // Shift in a »zero« bit
IR_b[IR_active]=0;
ir_loccount++ ; // Count number of received bits
ir_0 = ( ir_0 * 3 + intval ) / 4 ; // Compute average durartion of a short pulse
}
else if ( ( intval > 1100 ) && ( intval < 2200 ) ) // Long pulse?
{
ir_locvalue = ( ir_locvalue << 1 ) | 1 ; // Shift in a »one« bit
IR_b[IR_active]=1;
ir_loccount++ ; // Count number of received bits
ir_1 = ( ir_1 * 3 + intval ) / 4 ; // Compute average durartion of a short pulse
}
else if(intval>10000) // sync pulse
{
if((ir_loccount>=40)){
ir_value=ir_locvalue&0xFFFF;
if(!ir_value)ir_value=0x10000; // Enable reception of IR code 0
ir_locvalue = 0;ir_loccount = 0;ir_dummy = 0;
}
} else {
ir_dummy++;ir_value=0;ir_locvalue=0;ir_loccount=0;
}
IR_active++; // Count IR ISR activations
}
Daljinsko upravljanje
Imamo ojačevalno vezje. Kaj zdaj? Vsekakor si ne želimo zahtevne predelava stikal za vklop in izklop luči, še manj pa napeljevanja dodatnih kablov za upravljanje. Lahko bi se znašli tako, da bi v prostor za stikala vgradili poseben mikrokontroler s tipkovnico, ki bi nato preko ad-hoc SPI ali I2C vodila prenašal ukaze v krmilnik LED osvetlitve, a veliko enostavneje je uporabiti katerega od daljincev odsluženih avdio ali video naprav, ki jih ne uporabljamo več. Namesto tega lahko izkoristimo tudi morebitne neuporabljene funkcijske tipke daljinca kuhinjskega radija. Da bi znižali stroške proizvodnje včasih proizvajalci priložijo univerzalne daljince, s katerimi lahko poleg radijskega sprejemnika krmilimo tudi druge naprave istega proizvajalca. Če slednjih ne nameravamo kupiti, lahko te tipke izkoristimo po svoje, pri čemer ne potrebujemo novih daljincev.
Daljinca imamo! Potrebujemo še IR sprejemnik. Proizvajalci zabavne elektronike so že pred leti zgradili IR sprejemnike v enem čipu, ki sprejeto IR svetlobo pretvorijo v digitalni signal, naša naloga pa je, da poskrbimo za njihovo napajanje in napetostno prilagoditev digitalnega signala ter napišemo ustrezen program. Slednjega lahko izluščimo in prilagodimo za PIC ali AVR mikrokontroler iz projekta spletnega radia, ki ga najdemo na spletnih straneh PC USB Projects (sites.google.com/site/pcusbprojects), glej program 1.
Kot vidimo, se vsa učenost skriva v dokaj enostavnem prekinitvenem podprogramu, ki se sproži vsakič, ko se vrednost izhoda iz IR sprejemnika spremeni. Slednje moramo upoštevati tudi pri vzpostavitvi delovanja, ki nastavimo način proženja prekinitvenega vektorja. Na to je v glavnem programu zadnja sprejeta IR kora vedno na voljo v globalni spremenljivki ir_value.
Kako vemo, da smo sprejeli novo kodo z daljinskega upravljalnika? Po izvedbi akcije (npr. prižiganje LED traka) v ir_value spremenljivko zapišemo vrednost 0. Nato v glavni programski zanki čakamo, dokler ir_value ne dobi vrednosti različne od 0. Slednja je naša nova koda z daljinskega upravljalnika.
Zgoraj prikazani prekinitveni podprogram deluje z veliko daljinskimi upravljalniki, vendar ne z vsemi, saj nekateri uporabljajo drugačen princip posredovanja kod, vsekakor pa lahko kode tipk tudi neposredno zajamemo v obliki meritev dolžin časovnih intervalov med nizkimi logičnimi vrednostmi in visokimi logičnimi vrednostmi digitalnega izhoda IR sprejemnika. Povejmo še, da različni IR sprejemniki in IR oddajniki uporabljajo tudi različne IR svetlobne spektre. Če ne dobimo odziva IR sprejemnika, čeprav vemo, da ima daljinski upravljalnik nove baterije in sicer odlično deluje, si lahko pomagamo s takim za drug svetlobni spekter. Vseeno je treba poudariti, da navadno zadošča manjše prilagajanje programske opreme – predvsem časovnih konstant.
Princip delovanja enosmernega krmilnika LED osvetlitve
Deklarirana napajalna napetost tračnih LED svetil je +12 V, zato od te napetosti ne smemo odstopati navzgor, medtem ko jo lahko poljubno nižamo navzdol, s čemer zmanjšamo in po želji prilagodimo osvetlitev prostora. Ker pa NPN tranzistorji nimajo idealne prenosne karakteristike, tudi v povsem odprtem stanju za okoli 0,3 V znižajo napetost (in se temu primerno tudi segrevajo). To moramo upoštevati tudi pri napetostnem viru, pri katerem zato namesto 12 V zagotovimo med 12,5 V ali 13 V napetosti.
Natančno nastavitev napajalne napetosti nato zagotovimo z mikrokontrolerjem, ki pred D/A pretvornika upravlja zatemnjevalnik. Pri tem meri tako napajalno napetost napajalnega vira, kakor tudi napetost na kolektorju močnostnega NPN tranzistorja, s katerim uravnavamo tok skozi LED trakove.
V našem primeru imamo 3 LED trakove, ki jih lahko posamično vklapljamo in izklapljamo, kar posledično vpliva na upornost bremena, ki ga čuti močnostni NPN tranzistor. Omenimo še, da je padec napetosti na P-MOSFET tranzistorjih zanemarljiv, saj imajo notranjo upornost le 42 mili Ohmov. Kljub temu moramo napajalno napetost prilagajati tako, da nikoli ne preseže 12 V ne glede na to, ali so vklopljeni 1, 2 ali vsi trije LED trakovi.
LED kalibracija ter hramba in uporaba izmerjenih vrednosti
Ker pa LED trakovi niso enako dolgi, imajo različno notranjo upornost, zato moramo pri uravnavanju napetosti upoštevati vse mogoče kombinacije, ki so v našem primeru {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3} in {1, 2, 3}. Za vsako od kombinacij moramo poznati učinek izhodne napetost D/A pretvornika in posledično vrednost razlike napetosti napajalnika in napetosti na kolektorju NPN tranzistorja, ki je približno enaka napajalni napetosti LED trakov.
Ker karakteristika slednjega ni linearna, moramo pred začetkom izvesti kalibracijo. Slednja je potrebna tudi zato, ker bi imela sprotna regulacija napetosti lahko tudi neželene svetlobne učinke, se ji lahko izognemo z izvedbo kalibracije LED osvetlitve za vse mogoče nastavitve, pri kateri mikrokontroler ustvari tabelo vrednosti napajalnih napetosti pri celotnem razponu D/A pretvornika in vseh mogočih kombinacijah vklopa LED trakov.
Ko imamo v pomnilniku mikrokontrolerja izdelano tabelo napetosti LED osvetlitve glede na vse mogoče kombinacije vklopa LED trakov, natančno vemo, katera nastavitev D/A pretvornika pri izbrani kombinaciji vklopa LED trakov zagotovi želeno raven njihove svetilnosti. Slednja je določena z napajalno napetostjo vklopljenih LED trakov, ki jo lahko preberemo iz tabele.
Kaj pa, ko LED krmilnik izklopimo iz električnega napajanja? Če tabele ne shranimo v trajni pomnilnik (flash RAM, SD kartico, ipd.) mikrokontrolerja, bo ob vsakem vklopu potrebna ponovna kalibracija. Izognemo se ji lahko tudi tako, da je LED krmilnik ves čas vklopljen (celo noč in ves dan – tudi ko ne potrebujemo luči), LED trakove pa upravljamo samo z daljincem. Obenem lahko zidna stikala predelamo tako, da z njimi ne vklapljamo luči, temveč delujejo na nizko napetost in z njimi zgolj posredujemo zahteve LED krmilniku.
Druga možnost, je shranjevanje tabele izmerjenih vrednosti v trajni pomnilniki po vsaki kalibraciji, obenem lahko ob vsakokratni spremembi shranimo tudi trenutne nastavitve: podatke o tem, kateri LED trakovi so vklopljeni in nastavitev zatemnilnika. Tako bo lahko LED krmilnik po ponovnem priklopu napajanja vzpostavil stanje pred izklopom, pri čemer bomo počakali le toliko, da se zažene in prebere program in podatke iz trajnega pomnilnika. Slednje je lahko neopazno, ali pa vzame kako sekundo ali dve, odvisno od kompleksnosti programske opreme.
Prav pri slednjem se 8-bitni PIC in AVR mikrontrolerji navadno dobro izkažejo, saj lahko do podatkov v Flash RAM-u dostopajo tudi neposredno, zato jih ob njihovem zagonu ni treba kopirati, kot na primer pri ESP8266 in ESP32 modulih z mikrokontrolerji brez vgrajenega Flash RAM-a in ugnezdeno programsko opremo na zunanjem čipu. A pozor! Za shranjevanje podatkov neposredno v trajni pomnilnik mikrokontrolerja in branje iz njega, potrebujemo kar precej programskega pomnilnika in nam ga tako manj ostane za programsko kodo. Pri prej omenjenih modulih z zajetnimi pomnilniki nekaj kB za kalibracijsko tabeli ni problem, pri enostavnih mikrokontrolerjih pa to lahko predstavlja zajeten del pomnilnika. K sreči za upravljanje LED in zajem kode z IR sprejemnika ne potrebujemo zelo veliko programske kode.
Shraniti v datoteko ali neposredno v pomnilnik?
Ne moremo trditi, da ima trajno shranjevanje kalibracijskih podatkov in nastavitev LED krmilnika v datoteko na SD kartici kakšne prednosti, prej slabosti, razen morda v Arduino razvojnem okolju, ki je omogoča hitrejše protipiranje. Saj se tudi v Arduinu lahko shrani nastavitev v Flash RAM čipa, a zagon nalagalnika programske kode in glavnega programa vseeno zahtevata svoj čas. Branje z SD kartice je nato sorazmerno zelo hitro. Kakorkoli, pri ESP32 je pač zakasnitev okoli 2 sekundi pa naj se zdi to malo ali veliko. Stari dobri 8-bitni mikrokontrolerji zaženejo ugnezdeno programsko kodo veliko hitreje. Enako velja tudi za 16-bitne in 32-bitne, ko je njihova ugnezdena programska koda enostavna, brez velikih programskih knjižnic in operacijskih sistemov. Vendar to pomeni veliko zahtevnejše programersko delo in veliko posvečanja detajlom.
Denimo, ob zagonu mikrokontrolerja v LED krmilniku ni pomembno, da najprej zaženemo vso vgrajeno periferijo, ki jo bomo kasneje seveda potrebovali, kot so moduli: ADC, SPI, USB, serijski vmesnik ali celo zunanji WINC1510 Wi-Fi vmesnik. V prvem koraku moramo le na hitro usposobiti DAC, prebrati shranjene nastavitve, pripraviti ustrezne V/I priključke za delovanje in nato implementirati shranjene nastavitve s pomočjo kalibracijske tabele v Flash RAM-u. Pri PIC-ih je branje iz Flash RAM-a neposredno, prek notranjega vzporednega vodila v mikrokontrolerju, zato ni potrebno ničesar kopirati. Ko vse omenjeno naredimo, imamo kako sekundo časa, da za delovanja usposobimo tudi ostale potrebne funkcijske enote in omogočimo daljinsko upravljanje. Dodajmo še, da se uporaba SD kartice pri 8-bitnikih skoraj ne izplača, razen če želimo, da LED krmilnik opravlja še kako drugo funkcijo, kot je denimo vremenska postaja z Wi-Fi vmesnikom…
Načrtovanje hlajenja
Microchip Mindi 8.5 je odlično simulacijsko orodje, pri katerem si lahko pomagamo pri načrtovanju analognega dela digitalno krmiljenih vezij. Preden za to ali ono funkcijo uporabimo določen tranzistor, operacijski ojačevalnik, napetostni regulator ali drug element, je pomembno da vsaj približno predvidimo njegovo segrevanje pri različnih režimih delovanja in mu po potrebi zagotovimo ustrezno hlajenje.
Mindi omogoča ne le risanje analognih elektronskih vezij, temveč tudi njihovo virtualno testiranje in izris prenosnih karakteristik. Denimo, če poznamo razpon krmilnih vrednosti DAC, lahko te simuliramo na vhodu ojačevalnega vezja in nato na prenosni karakteristiki iz padca napetosti in na posameznem elementu in toka, ki teče skozenj, izračunamo njegovo segrevanje. Gotovo ne moremo uporabiti LM317 regulatorja brez hladilnika, če je tok skozenj 500 mA in ima padec napetosti 6 V, saj to pomeni 3 W izgubne moči, ki je njegovo ohišje (npr. TO-220) brez pritrditve na bakren ali aluminijast hladilnik ne more dovolj hitro odvajati.
Ker sem imel pri roki star pokvarjen napajalnik za PC, z vgrajenima aluminijastima hladilnima rebroma za kopico preklopnih elementov, ki ju je hladil ventilator, mi ju je bilo najenostavneje in najhitreje izkopati in vgraditi v moje vezje. Naj dodam, da je prav prišlo tudi nekaj izolacijskih elementov, s pomočjo katerih preprečimo električni stik, hkrati pa ohranimo toplotno prevodnost. Zato lahko na isto hladilno rebro »obesimo« več elementov. No, sam sem na isto hladilno rebro vgradil zgolj dva LM317T regulatorja, enega za 3,3 V, drugega pa za 5,3 V.
Regulacija napetosti iz 12,5 V na 3,3 V ni kar tako, saj je potrebno napajati tako mikrokontroler kot tudi BD243C tranzistor, ki odpira močnostni 2N3055 tranzistor. Če bi BD243C prek upora vezal na 12 V, bi bil padec na njem pri odprtem tranzistorju in okoli 200 mA toka, s katerimi odpremo 2N3055 okoli 9 V, kar je skoraj 1,8 W. Zato je enostavneje uporabiti kar napetost 3,3 V iz LM317T, ki že tako ali tako ima hladilno rebro. Skratka, vsi močnostni elementi so dobili hladilna rebra, čeprav morda nekoliko predimenzionirana.
Barvni LED trakovi
Krmiljenje barvnih LED trakov je podobno krmiljenju belih, le da lahko s pomočjo uravnavanja svetlosti rdečih (R), zelenih (G) in modrih (B) kanalov skoraj poljubno izberemo tudi barvo svetlobe. Zato ima barvni LED trak navadno 4 priključke, v mojem primeru za +12 V ter po enega za vsak kanal (R, G in B).
Barvo svetlobe in njeno svetlost določamo z uravnavanjem toka skozi LED kanale. Če napajamo samo en kanal, je svetloba rdeče, zelene ali modre barve, sicer pa je njena barva odvisna od izbire razmerja napetosti na kanalih. Intenziteto svetlobe določimo z množenjem vrednosti napetosti na kanalih z enakim faktorjem, dokler eden od kanalov ne doseže minimalne ali maksimalne vrednosti.
Denimo, če kanale R, G in B vežemo na maso, priključek za napajanje pa na 12 V, LED trak sveti z največjo intenzivnostjo. Barve in barvne nianse dobimo tako, da tok skozi vsakega od kanalov reguliramo z NPN ali n-MOSFET tranzistorjem. Splača se uporabiti nekoliko natančnejše DAC kot pri belih LED (npr. 12-bitne) – po enega za vsak kanal, pri katerih uravnavamo zgolj svetlost. Namesto tega lahko uporabimo tudi PWM, le da moramo izbrati dovolj visoko osnovno frekvenco in dodati kondenzatorje za glajenje napetosti na LED.
A takoj dodajmo, da so v praksi barvni LED trakovi pri največji napajalni napetosti (12 V) na vseh treh kanalih (R, G in B) nekoliko manj svetli od belih in imajo obenem tudi nekoliko slabši izkoristek električne energije.
Prihodnjič
Novi 8-bitni mikrokontrolerji imajo poleg naprednih ADC in DAC še veliko drugih novosti, kot sta CWG modul, ki omogoča ustvarjanje komplementarnih krmilnih signalov, in ZCD modul, ki samodejno zazna prehod signala čez vrednost napetosti 0 V, kar pride še posebej prav pri natančnem merjenju signalov. O teh in drugih novostih več prihodnjič.
Več lahko preberete na spletni strani PC USB Projects:
https://sites.google.com/site/pcusbprojects