====== Pulsilaiuse modulatsioon ====== Analoog-digitaalmuunduri teek on AVR ADC mooduli kasutamise lihtsustamiseks. Teegi muundamise funktsioonid on blokeeruvad ehk nende väljakutsumisel jääb protsessor muundamise lõppu ootama. Muundamise aeg sõltub ADC taktijagurist. ===== Andmetüübid ===== * **//adc_reference//** \\ Analoog-digitaalmuunduri võrdluspinge valiku tüüp. Väärtuste variandid ja tähendused: * //ADC_REF_AREF// - Võrdluspinge saadakse AREF viigult. * //ADC_REF_AVCC// - Võrdluspinge saadakse AVCC viigult. * //ADC_REF_2V56// - Võrdluspinge on sisemine 2,56 V. * **//adc_prescale//** \\ Analoog-digitaalmuunduri taktijaguri valiku tüüp. Väärtuste variandid: * //ADC_PRESCALE_2// - Jagamistegur 2. * //ADC_PRESCALE_4// - Jagamistegur 4. * //ADC_PRESCALE_8// - Jagamistegur 8. * //ADC_PRESCALE_16// - Jagamistegur 16. * //ADC_PRESCALE_32// - Jagamistegur 32. * //ADC_PRESCALE_64// - Jagamistegur 64. * //ADC_PRESCALE_128// - Jagamistegur 128. ===== Funktsioonid ===== * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ ADC tööks ettevalmistamine. Parameetrid: * //reference// - Võrdluspinge valik. * //prescale// - Taktijaguri valik. Mida suurem on jaguri tegur, seda rohkem võtab muundamine aega, kuid seda mürakindlam see on. * **//unsigned short adc_get_value(unsigned char channel)//** \\ Soovitud ADC sisendkanali väärtuse muundamine. Funktsioon on blokeeruv. Parameetrid: * //channel// - ADC kanali number (0 kuni 7). * Tagastab 10-bitise väärtuse. * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ Soovitud ADC sisendkanali väärtuse mitmekordne muundamine ja keskmise võtmine. Funktsioon on blokeeruv. Parameetrid: * //channel// - ADC kanali number (0 kuni 7). * //num_samples// - Keskmistamiste arv. Lubatud arv on 1 kuni 64. * Tagastab 10-bitise keskmistatud väärtuse. ===== Näide ===== Näites seatakse analoog-digitaalmuundur töövalmis ja loetakse kahelt sisendkanalilt pinge. Kanali 0 pingemuundamise väärtus loetakse muutujasse //x// ja kanali 1 väärtus kümnekordse ümardamise tulemusena muutujasse //y//. #include int main(void) { unsigned short x, y; // Analoog-digitaalmuunduri seadistamine // Võrdluspinge tuleb AVCC viigult. Muunduri töötakt // on 8 korda madalam kontrolleri taktist. adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Kanali 0 muundatud väärtuse lugemine muutujasse x x = adc_get_value(0); // Kanali 1 muundatud ja keskmistatud väärtuse lugemine muutujasse y y = adc_get_average_value(1, 10); }