| Next revision | Previous revision |
| en:software:homelab:library:adc [2010/02/08 14:34] – Page moved from en:software:library:adc to en:software:homelab:library:adc mikk.leini | en:software:homelab:library:adc [2020/07/20 12:00] (current) – external edit 127.0.0.1 |
|---|
| ====== Analoog-digitaalmuundur ====== | ====== Analog to Digital Converter ====== |
| |
| 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. | This library provides functions to use AVR analog to digital converter. All the conversion functions in library are blocking, which means the processor waits as long as it takes to get the results. The conversion time depends on the ADC clock. |
| |
| ===== Andmetüübid ===== | ===== Data Types ===== |
| |
| * **//adc_reference//** \\ Analoog-digitaalmuunduri võrdluspinge valiku tüüp. Väärtuste variandid ja tähendused: | * **//adc_reference//** \\ ADC reference voltage enumeration data type. Options: |
| * //ADC_REF_AREF// - Võrdluspinge saadakse AREF viigult. | * //ADC_REF_AREF// - Reference voltage from the AREF pin. |
| * //ADC_REF_AVCC// - Võrdluspinge saadakse AVCC viigult. | * //ADC_REF_AVCC// - Reference voltage from the AVCC pin. |
| * //ADC_REF_2V56// - Võrdluspinge on sisemine 2,56 V. | * //ADC_REF_2V56// - Internal 2,56 V reference voltage. |
| |
| * **//adc_prescale//** \\ Analoog-digitaalmuunduri taktijaguri valiku tüüp. Väärtuste variandid: | * **//adc_prescale//** \\ ADC clock prescaler enumration data type. It determines the division factor of system clock. Options: |
| * //ADC_PRESCALE_2// - Jagamistegur 2. | * //ADC_PRESCALE_2// - Division factor 2. |
| * //ADC_PRESCALE_4// - Jagamistegur 4. | * //ADC_PRESCALE_4// - Division factor 4. |
| * //ADC_PRESCALE_8// - Jagamistegur 8. | * //ADC_PRESCALE_8// - Division factor 8. |
| * //ADC_PRESCALE_16// - Jagamistegur 16. | * //ADC_PRESCALE_16// - Division factor 16. |
| * //ADC_PRESCALE_32// - Jagamistegur 32. | * //ADC_PRESCALE_32// - Division factor 32. |
| * //ADC_PRESCALE_64// - Jagamistegur 64. | * //ADC_PRESCALE_64// - Division factor 64. |
| * //ADC_PRESCALE_128// - Jagamistegur 128. | * //ADC_PRESCALE_128// - Division factor 128. |
| |
| ===== Funktsioonid ===== | ===== Functions ===== |
| |
| * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ ADC tööks ettevalmistamine. Parameetrid: | * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ |
| * //reference// - Võrdluspinge valik. | Initializes ADC. Parameters: |
| * //prescale// - Taktijaguri valik. Mida suurem on jaguri tegur, seda rohkem võtab muundamine aega, kuid seda mürakindlam see on. | * //reference// - Reference voltage selection. |
| | * //prescale// - Clock prescaler selection. |
| |
| * **//unsigned short adc_get_value(unsigned char channel)//** \\ Soovitud ADC sisendkanali väärtuse muundamine. Funktsioon on blokeeruv. Parameetrid: | * **//unsigned short adc_get_value(unsigned char channel)//** \\ |
| * //channel// - ADC kanali number (0 kuni 7). | Converts specified ADC channel analog value to digital. Function is blocking. Parameter: |
| * Tagastab 10-bitise väärtuse. | * //channel// - ADC channel number (0 to 7). |
| | * Return 10-bit digital value. |
| |
| * **//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: | * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ |
| * //channel// - ADC kanali number (0 kuni 7). | Converts specified ADC channel analog value to digital desired number of times and calculates the average. Function is blocking. Parameters: |
| * //num_samples// - Keskmistamiste arv. Lubatud arv on 1 kuni 64. | * //channel// - ADC channel number (0 to 7). |
| * Tagastab 10-bitise keskmistatud väärtuse. | * //num_samples// - Number of samples for calculation (1 to 64). |
| | * Return 10-bit digital value. |
| |
| ===== Näide ===== | ===== Example ===== |
| |
| 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//. | For example ADC is initialized and two analog channel values are converted to digital. Value of channel 0 is assigned to variable //x// and averaged value of channel 1 to variable //y//. |
| |
| <code c> | <code c> |
| unsigned short x, y; | unsigned short x, y; |
| |
| // Analoog-digitaalmuunduri seadistamine | // Initializing ADC. Reference voltage from AVCC. |
| // Võrdluspinge tuleb AVCC viigult. Muunduri töötakt | // Clock is 8 times slower than system clock. |
| // on 8 korda madalam kontrolleri taktist. | |
| adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); | adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); |
| |
| // Kanali 0 muundatud väärtuse lugemine muutujasse x | // Converting channel 0 value. |
| x = adc_get_value(0); | x = adc_get_value(0); |
| |
| // Kanali 1 muundatud ja keskmistatud väärtuse lugemine muutujasse y | // Converting and averaging channel 1 value. |
| y = adc_get_average_value(1, 10); | y = adc_get_average_value(1, 10); |
| } | } |