Programska knjižnica “Multi Adcx.inc” se od predhodno opisane programske knjižnice “Adcx.inc” razlikuje v tem, da odvisno od vrste mikrokontrolerja omogoča avtokalibracijo do maksimalno 8 ADC vhodov mikrokontrolerja. Vendar je za njeno delo potrebnega tudi več programskega spomina in se lahko uporablja pri mikrokontrolerjih, ki imajo minimalno 8KB Flash spomina. Za delo te programske knjižnice sta potrebni dve tipki (Calibration_key in Select_key), vezani na dva, po želji izbrana digitalna vhoda mikrokontrolerja. Glede na malo število priključkov ne priporočam uporabo te programske knjižnice pri mikrokontrolerjih ATtiny85. Kot tudi predhodno opisana programska knjižnica “Adcx.inc”, tudi “Multi Adcx.inc” ne uporablja timerjev mikrokontrolerja niti prekinitev, delovni takt pa je lahko kateri koli skladen z uporabljenim mikrokontrolerjem. LCD alfanumerični zaslon je prav tako nujen, izpisi te programske knjižnice so prilagojeni na LCD 1602, lahko pa se uporabi tudi večji LCD z več kot 16 znaki v vrsti ali več od 2 vrstic npr. LCD 2004. Uporabljeni LCD, odvisno od postavk v uporabniškem programu, se lahko veže paralelno npr. 4 bitno ali serijsko preko I2C LCD modula.
V uporabniškem programu je potrebno napraviti konfiguracijo AD pretvornika mikrokontrolerja z Bascom ukazom Config Adc :
Če je Reference enako Aref ali Off, je v tem primeru potrebno na pin AREF mikrokontrolerja priključiti zunanjo stabilizirano referenčno napetost, ki ne sme biti večja od napetosti VCC, in keramični kondenzator 100nF med AREF in GND.
Ta vsebina je samo za naročnike
Če želite odkleniti to vsebino, se naročite.
Za Reference napetost se razen Aref lahko izbere Avcc ali interna napetost Internal, ki znaša 2,56V ali 1,1V, odvisno od vrste mikrokontrolerja.
Za napajanje AD pretvornika mikrokontrolerja je potrebno na pin AVCC priključiti napetost VCC preko dušilke od 10µH, med AVCC in GND pa je potrebno vezati keramični kondenzator 100nF. Mikrokontroler ATtiny84 nima tega priključka, saj je napajanje AD pretvornika izvedeno interno.
Za pretvorbo napetosti z npr. analognega vhoda ADC0 je potrebno napisati:
Adc_input(adc0) = Getadc(0)
Napetostni signal z analognega vhoda ADC0 se pretvori in rezultat AD pretvorbe se vpisuje v Word spremenljivko Adc_input(adc0), ki je dimenzionirana v programski knjižnici “Multi Adcx.inc”. Vrednost v Adc_input(adc0) ni korigirana vrednost skladno z avtokalibracijskimi parametri. Za korekcijo te vrednosti skladno s kalibracijskimi parametri se uporabi ukaz:
Adc_correction Adc0
Ta ukaz se nahaja za ukazom Getadc(0) in odvisno od kalibracijskih parametrov, (ki so s procesom avtokalibracije shranjeni v interni EEPROM mikrokontrolerja za ADC0 vhod), izvršuje kalibracijsko korekcijo in rezultat vpisuje v Single spremenljivko Adcx(adc0). Vrednost spremenljivke Adcx(adc0) se uporablja za izračun izmerjene vrednosti merjene veličine, ki se meri s pomočjo merilnega vezja, kjer je napetostni izhod priključen na analogni vhod ADC0. Če je napetostni signal doveden na vhod ADC0 znotraj merilnega obsega določenega z avtokalibracijo, takrat imata bajtni spremenljivki Under_min(adc0) in Over_max(acd0) vrednost 0, Single spremenljivka Adcx(adc0) ima vrednost v obsegu od 0 do 1023 skladno z napetostnim signalom dovedenim na ADC0 vhod in s kalibracijskimi parametri za vhod ADC0. Če je ta napetostni signal manjši od minimuma določenega z avtokalibracijo vhoda ADC0, sta takrat Under_min(adc0) = 1 in Over_max(acd0) = 0 ter Adcx(adc0) = 0. Če je ta napetostni signal nad kalibracijskim maksimumom, je Under_min(adc0) = 0 in Over_max(acd0) = 1, Adcx(adc0) = 1023. Bajtne spremenljivke Under_min(adc0) in Over_max(adc0) ter Single spremenljivka Adcx(adc0) so dimenzionirane znotraj programske knjižnice “Multi Adcx.inc”. Razen za predhodno opisan ADC0 vhod, za so ostale ADC vhode na razpolago spremenljivke z indeksi adc1 do adc5 in tudi do adc7 odvisno od vrste mikrokontrolerja. Te spremenljivke so prav tako dimenzionirane znotraj programske knjižnice “Multi Adcx.inc”.
Tako npr. za vhod ADC1 pišemo:
Adc_input(adc1) = Getadc(1)
Adc_correction Adc1
Rezultati ukaza Adc_correction Adc1 se vpisujejo v spremenljivke Adcx(adc1), Under_min(adc1) in Over_max(adc1).
Pri izboru napetosti za avtokalibracijski maksimum predlagam, da je vrednost nekaj manjša od referenčne napetosti ADC-ja (to je vrednost Maximum v procesu avtokalibracije, ki je nekaj manjša od 1023), da bi se v primeru prekoračitve te vrednosti nad vrednostjo avtokalibracijskega maksimuma pripadajoča spremenljivka Over_max postavila na vrednost 1.
Izračun vrednosti merjene veličine za n-ti ADC vhod s pomočjo podatka v Single spremenljivki Adcx(adcn)
Če je:
- X1(n) – vrednost merjene veličine merjene z n-tim ADC vhodom mikrokontrolerja pri kateri smo potrdili avtokalibracijski minimum
- X2 (n) – vrednost merjene veličine merjene n-tim ADC vhodom mikrokontrolerja pri kateri smo potrdili avtokalibracijski maksimum, X2(n) > X1(n)
- X(n) – vrednost merjene veličine ki jo moramo določiti iz vrednosti v Single spremenljivki Adcx(adcn) za n-ti ADC vhod mikrokontrolerja
- Merilni obseg avtokalibracije n-tega ADC vhoda: M.O.K.(n) = X2(n) – X1(n) ; X2(n) > X1(n)
Če so po izvedbi ukaza Adc_correction Adcn spremenljivke za n-ti ADC vhod Under_min(adcn)=0 in Over_max(adcn)=0 , je merjena veličina na tem n-tem ADC vhodu znotraj merilnega obsega avtokalibracije M.O.K.(n) in takrat je:
X(n) = Adcx(adcn)*(M.O.K.(n) / 1023) + X1(n)
X(n) = Adcx(adcn) * ((X2(n) – X1(n)) /
1023) + X1(n)
n = 0 do 5 ali do 7 odvisno od vrste mikrokontrolerja
adcn = adc0 do adc5 ali do adc7, odvisno od vrste mikrokontrolerja
Proces avtokalibracije mikrokontrolerja z uporabo programske knjižnice „Multi Adcx.inc“
Programska knjižnica „Multi Adcx.inc“ služi za avtokalibracijo večjega števila ADC vhodov mikrokontrolerja. Čeprav ta programska knjižnica dovoljuje avtokalibracijo tudi samo enega ADC vhoda, se njena uporaba za takšen primer ne priporoča. Če se avtokalibrira samo en ADC vhod, je takrat potrebno uporabiti programsko knjižnico „Adcx.inc“, ki zavzema manj programa in uporablja samo eno tipko (Calibration_key).
Pred vključitvijo programske knjižnice „Multi Adcx.inc“ v uporabniški program je potrebno izbrati in konfigurirati dva vhodna priključka mikrokontrolerja, katerima je treba z ukazom Alias poimenovati Calibration_key in Select_key, na katera sta vezani istoimenski tipki. Prav tako je pred vklopom te programske knjižnice potrebno definirati tudi s katerimi ADC vhodi se omogoča avtokalibracija. To se dela z združevanjem bitov s stanjem 1 v definiranju vsebine
Channel_enable Alias &Bxxxxxxxx
Če je npr.
Channel_enable Alias &B10100010
se omogoča avtokalibracija na ADC vhodih ADC1, ADC5 in ADC7. Programska knjižnica „Multi Adcx.inc“, odvisno od uporabljenega čipa, avtomatsko definira maksimalno možno število ADC vhodov za avtokalibracijo, ki npr. pri ATmega8/328P znaša 6 (ADC0 do ADC5). Mikrokontroler ATmega328 (v SMD ohišju) ima 8 ADC vhodov, vendar je avtokalibracija podprta za maksimalno 6 vhodov (ADC0 do ADC5), enako kot pri ATmega328P. Pri ostalih ATmega čipih, in tudi pri ATtiny84, število ADC vhodov za možno avtokalibracijo znaša 8 (ADC0 do ADC7). To ne pomeni, da se vsem tem ADC vhodom mora omogočiti avtokalibracijo, pač pa se z ukazom
Channel_enable Alias &Bxxxxxxxx
za avtokalibracijo izberejo samo tisti ADC vhodi, ki jih moramo v uporabniškem programu kalibrirati.
Če je v uporabniškem programu postavljeno
Channel_enable Alias &B00000000
takrat niti en ADC vhod ni omogočen za avtokalibracijo, zato se izpiše sporočilo LCD1:
Čaka se reset. Takrat je treba v uporabniškem programu omogočiti avtokalibracijo minimalno enega ali več ADC vhodov npr.
Channel_enable Alias &B00100011
‘ omogočeno za ADC vhode ADC5, ADC1 in ADC0
V kolikor niti en omogočen ADC vhod ni kalibriran (npr. po programiranju čipa in z brisanjem internega EEPROM-a), takrat se po resetu avtomatsko zažene proces selekcije vhoda za avtokalibracijo. Po zaključku avtokalibracije, in pred ponovnim programiranjem Flash spomina, je potrebno zaščititi EEPROM pred ponovnim brisanjem s Fuse biti. Tako bodo kalibracijski parametri ostali shranjeni.
Če so nekateri od omogočenih ADC vhodov že bili kalibrirani, ali pa želimo izvesti avtokalibracijo ostalih omogočenih ADC vhodov (pri zaščitenem EEPROM-u pred brisanjem), je za njihovo ponovno avtokalibracijo pri resetu potrebno držati pritisnjeno kalibracijsko tipko Calibration_key in izpiše se sporočilo LCD2:
Za vhod v proces avtokalibracije je kalibracijsko tipko po resetu potrebno držati pritisnjeno minimalno 5s. V kolikor je vsaj en vhod bil predhodno kalibriran in kalibracijska tipka ob resetu ni bila pritisnjena najmanj 5s, se izstopi iz knjižnice „Multi Adcx.inc“ in nadaljuje se delo uporabniškega programa.
Pri vhodu v proces avtokalibracije se izpisuje sporočilo LCD3:
Po tem sporočilu sledi izbor ADC vhoda za avtokalibracijo, ki se prične s sporočilom LCD4:
LCD 4: Italic/Bold znake
Na začetku se ponudi izbira ADC0 vhoda. S tipko Select_key inkrementiramo zaporedno številko ADC vhoda od ADC0 do maksimalno možnega, odvisno od vrste mikrokontrolerja (do ADC5 ali ADC7). Nato se ponovno prične od vhoda ADC0. Izbiro ADC vhoda za avtokalibracijo potrjujemo s tipko Calibration_key. Če avtokalibracija izbranega ADC vhoda ni omogočena z njegovim pripadajočim bitom v Channel_enable, se izpiše sporočilo LCD5:
V tem sporočilu je n zaporedna številka ADC vhoda in program se vrne na predhodni zaslon.
Če je n-ti izbrani ADC vhod omogočen za avtokalibracijo in je že bil kalibriran, se izpiše sporočilo LCD6:
Če je n-ti izbrani ADC vhod omogočen za kalibracijo in ni bil kalibriran se izpiše LCD7 sporočilo:
Sledi izbira s sporočilom LCD8:
S pritiskom na tipko Calibration_key se prične proces kalibracije izbranega n-tega ADC vhoda. Če pritisnemo tipko Select_key, in niti en omogočen ADC vhod ni bil kalibriran, se takrat odpre izbira s sporočilom LCD9:
ali če je vsaj en omogočen ADC vhod bil kalibriran, se odpre izbira s sporočilom LCD10.
S tipko Select_key (opcija NEXT) se premaknemo na izbiro za ponovno selekcijo ADC vhoda, katerega bomo kalibrirali, s tipko Calibration_key (opcija EXIT) gremo ven iz programske knjižnice „Multi Adcx.inc“ v uporabniški program. V tem primeru se avtokalibracija predhodno izbranega ADC vhoda ni niti začela, tako da se kalibracijski status tega vhoda ni spremenil. V kolikor ta vhod ni bil predhodno kalibriran, je vrednost pripadajoče Single spremenljivke Adcx(adcn) enaka 0, ne glede na ADC vrednost, ki se v uporabniškem programu z ukazom Getadc(n) vpisuje v Word spremenljivko Adc_input(adcn), to je brez obzira na vrednost napetostnega signala na tem ADC vhodu.
Opomba: Indeks adcn določa zaporedno število ADC vhoda in je lahko od adc0 do adc5 ali adc7 odvisno od vrste mikrokontrolerja.
Na začetku avtokalibracije izbranega ADC vhoda se izpiše sporočilo LCD11.
Ta sporočilo prikazuje, kateri n-ti ADC vhod je izbran za avtokalibracijo. Sporočilo„Calib.key for OK“ pomeni, da se v procesu avtokalibracije ADC vrednost za Minimum in nato ADC vrednost za Maximum potrdijo s pritiskom na tipko Calibration key. Sporočilo „Calib.key for OK“ ostane izpisano tudi v procesu avtokalibracije pri prikazu vrednosti Minimum in Maximum.
Avtokalibracija se izvaja v dveh kalibracijskih točkah kot tudi v programski knjižnici „Adcx.inc“. Po zaključeni avtokalibraciji izbranega n-tega ADC vhoda se izpiše sporočilo LCD12:
S tem sporočilom potrjuje, da je zaključena avtokalibracija n-tega izbranega ADC vhoda mikrokontrolerja, pri čemer se v ustrezni RAM spremenljivki za določanje statusa kalibracije ADC vhoda s stanjem pripadajočega bita za ta n-ti ADC vhod označuje, da je ta ADC vhod kalibriran. Kalibracijska parametra Offset in Gain za kalibrirani n-ti ADC vhod se shranita v interni EEPROM mikrokontrolerja.
Nato sledi izbira s sporočilom LCD10:
S tipko Select_key se premakne na izbiro za ponovno selekcijo ADC vhoda, ki ga želimo kalibrirati (istega ali nekega drugega), s tipko Calibration_key pa gre ven iz avtokalibracije in iz knjižnice „Multi Adcx.inc“ v uporabniški program ob predhodnem shranjevanju RAM spremenljivke za kalibracijski status vseh omogočenih ADC vhodov v interni EEPROM.
Shranitev vseh kalibracijskih podatkov v internem EEPROM-u za vse ADC vhode, vključno s podatki za kalibracijski status vseh omogočenih ADC vhodov, pri mikrokontrolerju z 8 ADC vhodi zavzema 50 bajtov, pri mikrokontrolerjih s 6 ADC vhodi 38 bajtov, začenši od naslova 1 internega EEPROM-a (EEPROM naslov 0 se ne uporablja, ker ni zanesljiv).
Opis priloženih primerov programov za avtokalibracijo več vhodov mikrokontrolerja z uporabo programske knjižnice „Multi Adcx.inc“
Za boljše razumevanje uporabe programske knjižnice “Multi Adcx.inc” sta priložena dva testna programa. Prvi je “ATmega Multichannel Adcx calibration.bas” za ATmega mikrokontrolerje. V tem programu za kalibracijo sta izbrana ADC vhoda ADC0 in ADC1. Po programiranju čipa se avtomatsko zažene kalibracijski proces, v katerem moramo izbrati kalibracijo vhoda ADC0 in kalibracijo vhoda ADC1. Predlagam, da se po zaključeni kalibraciji izbranih vhodov spremeni Fuse bit, s katerim se onemogoči brisanje internega EEPROM-a. Tako se pri naslednjem eventualnem programiranju čipa ne bi zbrisali kalibracijski parametri, ki se nahajajo v internem EEPROM-u. Pri kalibracije izbranih ADC vhodov predlagam, da se na njih priključijo potenciometri vezani med VCC in GND. Ti potenciometri simulirajo merilne pretvornike temperature z napetostnimi izhodi. Pri kalibracije vhoda ADC0 namestimo za prvo točko kalibracije napetost 1V, kar bi za simulirani pretvornik temperature na tem vhodu ustrezalo temperaturi 0°C, za drugo točko kalibracije namestimo napetost 3V, kar bi ustrezalo temperaturi 100°C za ta simulirani pretvornik. Pri kalibraciji vhoda ADC1 namestimo za prvo točko kalibracije napetost 0,5V kar bi za simulirani pretvornik temperature na tem vhodu ustrezalo temperaturi -20°C, za drugo točko kalibracije namestimo napetost 4,5V, kar bi ustrezalo temperaturi 50°C. Po zaključeni avtokalibraciji ADC0 vhoda za vse napetosti manjše od 1V in priključene na vhod ADC0, po ADC pretvorbi napetosti in ukaza Adc_correction Adc0, bo Single spremenljivka Adcx(adc0)=0, bajt spremenljivka Under_min(adc0)=1, bajt spremenljivka Over_max(adc0)=0 in izpisalo se bo sporočilo Temp1 < 0°C. Za vse napetosti na vhodu ADC0, ki so večje od 3V, bo Adcx(adc0)=1023, Under_min(adc0)=0, Over_max(adc0)=1 in izpisalo se bo sporočilo Temp1 > 100°C. Znotraj kalibracijskega obsega od 1V do 3V Adcx(adc0) se bo vrednost menjala od 0 do 1023, Under_min(adc0)=0, Over_max(adc0)=0 in izpisovala se bo temperatura Temp1 v kalibriranem merilnem obsegu od 0°C do 100°C skladno z izmerjeno napetostjo na ADC0 vhodu in kalibracijskimi parametri za ta vhod. Po zaključeni avtokalibraciji ADC1 vhoda za vse napetosti manjše od 0,5V priključene na vhod ADC1, po ADC pretvorbi napetosti z ADC1 vhoda in ukaza Adc_correction Adc1 bo Adcx(adc1) = 0, Under_min(adc1)=1, Over_max(adc1)=0 in izpisalo se bo sporočilo Temp2 < -20°C. Za vse napetosti večje od 4,5V bo Adcx(adc1)=1023, Under_min(adc1)=0, Over_max(adc1)=1 in izpisalo se bo sporočilo Temp2 > 50°C. Znotraj kalibracijskega obsega od 0,5V do 4,5V Adcx(adc1) se bo vrednost menjala od 0 do 1023, Under_min(adc1)=0, Over_max(adc1)=0 in izpisovala se bo temperatura Temp2 v kalibriranem merilnem obsegu od -20°C do 50°C skladno z izmerjeno napetostjo na vhodu ADC1 in njegovimi kalibracijskimi parametri.
Drugi preizkusni program je “ATtiny84 Multichannel Adcx calibration.bas” za ATtiny84 mikrokontroler. V tem primeru se za avtokalibracijo prav tako uporabljata ADC vhoda ADC0 in ADC1 na enak način, kot tudi v primeru za ATmega mikrokontrolerje. Čip ATtiny44 s programsko knjižnico “Multi Adcx.inc” se ne more uporabiti, ker nima dovolj programskega spomina. Lahko se ga uporabi s knjižnico “Adcx.inc” za avtokalibracijo enega ADC vhoda.
Upam, da vam bo programska knjižnica “Multi Adcx.inc” koristila v vaših bodočih uporabniških programih.
_
_
https://svet-el.si