Torej v svojem projektu altimetra sem se srečal z AD pretvornikom procesorja Attiny26, zelo podobno pa se uporablja tudi ADC-je AtMega in ostalih Attiny.
V samem projektu je uporabljen senzor pritiska (MP3H6115), ki ima analogni izhod, ki je premosorazmeren pritisku. (VCC:3V izhod:2.8V@115kPa)
Datašit
Pri branju lahko uporabljamo referenčno vrednost, to je vrednost, ki da na izhodu ADC pretvornika maksimalno število (v tem primeru 1023). Za referenčno vrednost lahko uporabimo zunanjo napetost, napetost napajanja ali notranjo 2,5V referenco. Če uporabljamo notranjo napetost, je ta stabilizirana (lahko dodamo še zunanji kondenzator) neodvisna od napajalne napetosti. Napajalna napetost pa se lahko, odvisno od regulatorja nekoliko spreminja, prav tako se lahko spreminja zunanja referenca z napajalno napetostjo, če uporabljamo za določitev preprost napetostni delilnik. Moramo pa paziti na to, da ima ADC konverter neko minimalno in maksimalno vrednost referenčne napetosti in da od tam naprej ne bo deloval.
To da se referenčna napetost spreminja ni nujno vedno slabo, v mojem primeru naprimer je samo napajalno vezje nekoliko eksotično in je napetost rahlo odvisna od napetosti baterije, izhod iz senzorja pritiska pa je prav tako odvisen od napetosti napajanja. Z priklopom reference na VCC ali zun. napetostni delilnik tako dosežem enako prebano vrednost pri različnih napajanjih. Ker je doseg izhodne napetosti iz senzorja nekoliko nižji od napajalnika, lahko z napetostnim delilnikom (potenciometer) na AREF še povečamo občutljivost vezja.
Zanimiva je tudi uporaba diferencialnih ADC kanalov in kanalov z večjo ločljivostjo (gain = 20). Pri diferencialnih kanalih merimo razliko med dvema kanaloma, torej če na + vhod pripeljemo 2.8V in na – vhod napetost z senzorja pritiska, nam bo prebrana vrednost rastla z višino.
Pri direktnem priklopu na adc je vrednost (Vvhodna*1023)/Vref, če je torej Vref 3V in Vvhodna 2,8V je maksimalna ločljivost 954 različnih stanj. Tu lahko napišem še da se pritisk za 10% spremeni šele do tisoč metrov, torej je maksimalna natančnost določitve višine okoli 10m. Če Vref zmanjšamo do maksimalne Vvhodne dobimo 1023 različnih stanj. Na zemlji h=0 P=105kPa kaže maksimalno vrednost, z višino pada.
Pri priklopu na diferencialni kanal je prebrana vrednost (Vplus -Vminus)*1023/Vref , oz. v našem primeru (2.8V-Vvhodna)*1023/2.8V. Tako je na zemlji h=0 vrednost najnižja, oz. na morski gladini enaka nič in se z višino veča. Če imamo vklopljeno ojačenje (gain), je vrednost 20x večja, vendar le do 1023.
Če želimo bolj natančno določiti našo višino lahko z diferencialnim vhodom z ojačenjem (gain) veliko bolj natančno določimo točno vrednost kanala. Tu pa moramo paziti, ker z povečanjem natančnosti x20 izgubimo x20 na dosegu, torej lahko z natančnostjo 0,5m merimo le razliko 500m nad nastavljeno vrednostjo (-) oz. lahko merimo le napetostne razlike do Vref/20.
Še ena opomba za uporabnike MSC Bascom-a. Bascomov ukaz getadc avtomatsko nastavi Admux.5 = 1 za kanale nad 7, to je pri nekaterih novejših procesorjih prav, pri tiny26 pa dobimo vrednost kanala ravno v obratnem vrstnem redu (byte-a v word-u sta zamenjana). Ukaz po izvedbi tega bita ne izbriše in so torej vse nalednje meritve zamenjane, razen če ta bi ročno postavimo na 0.
Za branje pravilne vrednosti lahko uporabimo naslednje zaporedje ukazov:
W=getadc(18) ‘ preberemo vrednost, npr. kanal 18, vrednost ni prava, zamenjati bi morali byte-a
reset admux.5 ‘ odstranimo ADLAR zastavico, sprememba se takoj odrazi v registru z podatki iz adc
W=adcd ‘ preberemo pravo vrednost