Dialogi DA14531 – ADC

(Gowtham TS)

A nalog – D igital C -muunnin muuntaa analogisen signaalin digitaaliseksi muodoksi, jota mikä tahansa laskentaelementti voi käyttää / käyttää. Analogisesta signaalista otetaan säännöllisesti näytteet, jotta se voidaan luoda uudelleen digitaalisesti.

DA14531: ssä on 10-bittinen ADC, jossa on 4-tuloiset yksipäiset kanavat (tai 2 differentiaalikanavaa). 4 tulokanavaa voidaan valita 4 GPIO: sta, lämpötila-anturista, VBAT_HIGH-kiskosta, VBAT_LOW-kiskosta ja VDD: stä. Siinä on myös konfiguroitava vaimennin, jossa on neljä vaihtoehtoa: 1x, 2x, 3x ja 4x. Vaimentimen ollessa 4x, se voi ottaa näytteen maksimijännitealueesta -3,45 V – + 3,45 V.

Projektin määritys

Tämän opetusohjelman koodilla varustettu projekti on saatavilla Githubissa osoitteessa https : //github.com/vicara-hq/da14531-tutorials

Lataa projekti ja kopioi se. Projekti on sijoitettava Dialog SDK6 -kansioon. Siirry kohtaan / projects / target_apps / template ja liitä se tähän kansioon. Projekti on muokattu versio empty_peripheral_template -projektista, jonka tarjoaa Dialog. Mutta jotta tämä opetusohjelma pysyisi mahdollisimman avoimen lähdekoodin muodossa, kaikki seuraavat vaiheet käyttävät SmartSnippets Studiota.

Laitteiston yleiskatsaus

Käytämme DA145xx Pro -emolevyä DA14531 Tiny -moduulin kanssa. tytärlauta, muutama hyppääjä ja leipälauta. Tarvitset myös 2 samanarvoista vastusta tai voit käyttää myös potentiometriä (tarvitset yleismittarin lähdön vahvistamiseksi).

Käytin 2 4,7 kOhm vastusta ja 3 V kiskoa DA14531-emolevyllä VCC: nä.

Koodin yleiskatsaus

Tämän opetusohjelman tarkoituksena on ottaa jännite ja näyttää ADC: n peruskäyttö DA14531: ssä.

Ensinnäkin meidän on määritettävä P0_7 ADC-nastaksi. Tämä tehdään user_periph_setup.c-tiedostossa.

void GPIO_reservations(void) {
RESERVE_GPIO(BUTTON, GPIO_PORT_0, GPIO_PIN_7, PID_ADC);
}void set_pad_functions(void) {
GPIO_ConfigurePin(GPIO_PORT_0, GPIO_PIN_7, INPUT, PID_ADC, false);
}

Alla oleva koodilohko määrittää ADC: n.

adc_config_t adc_cfg = {
.input_mode = ADC_INPUT_MODE_SINGLE_ENDED,
.input = ADC_INPUT_SE_P0_7,
.smpl_time_mult = 2,
.continuous = false,
.interval_mult = 0,
.input_attenuator = ADC_INPUT_ATTN_2X,
.chopping = false,
.oversampling = 0
};adc_offset_calibrate(ADC_INPUT_MODE_SINGLE_ENDED);adc_init( &adc_cfg);

Konfigurointirakenteessa asetamme tilan yksipäiseksi ja vaimennukseksi 2x, koska odotettu jännite on noin 1,5 V. Toiminto, jolla kalibroidaan myös ADC, kutsutaan ennen sen alustamista.

Kutsumme toimintoa ottaaksemme jännitteen mukautetussa app_on_init -soittopyynnössä. Lisätietoja mukautetusta soittopyynnöstä saat oppaastani (GPIO: t, painikkeet ja LEDit).

uint16_t adc_sample;void user_app_on_init(void) {
adc_sample = adc_get_sample();
adc_sample = adc_correct_sample(adc_sample); default_app_on_init();
}

Testaus

Helpoin tapa testata tämä on suorittaa virheenkorjaus ja lisätä muuttuja adc_sample lausekkeiden katseluikkunaan. Muuttujan lisääminen lausekkeiden katseluikkunaan ja sen arvon tarkistaminen:

  • Valitse muuttuja
  • Napsauta sitä hiiren kakkospainikkeella ja valitse Lisää katselulauseke. >
  • Napsauta avautuvassa ikkunassa OK.
  • Keskeytä virheenkorjain muutaman sekunnin kuluttua ja tarkista muuttujan arvo.

Sain arvon 0x3A0. ADC: n referenssijännite on 0,9 V ja koska se on 10-bittinen ADC, arvo vastaa:

0x3A0 = 928 (in decimal)2 * 928 * (0.9/1024) = 1.63V 

Saamani arvo on vähän suurempi kuin odotettavissa. Tätä virhettä voidaan vähentää käyttämällä ylinäytteenottomenetelmiä, mutta se on edistynyt aihe toiselle opetusohjelmalle.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *