| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| de:software:homelab:library:adc [2010/11/07 21:16] – Wember | de:software:homelab:library:adc [2020/07/20 12:00] (current) – external edit 127.0.0.1 |
|---|
| ====== Analog zu Digital Konverter ====== | ====== Analog-Digital-Wandler====== |
| |
| Diese Bibliothek enthält Funktionen die mit dem AVR Analog zu Digital Konverter genutzt werden. Alle Konversions-Funktionen in der Bibliothek blocken, d.h. der Prozessor wartet so lange, bis die Ergebnisse da sind. Die Zeit für die Konvertierung hängt von der ADC-Taktung ab. | Diese Bibliothek enthält Funktionen um den AVR Analog-Digital-Wandler zu nutzen. Sämtliche Funktionen dieser Bibliothek sind blockierend, d.h. der Prozessor wartet so lange, bis die Ergebnisse da sind. Die Zeit für die Konvertierung hängt von der ADC-Taktung ab. |
| |
| ===== Data types ===== | ===== Datentypen ===== |
| |
| * **//adc_reference//** \\ ADC reference voltage enumeration data type. Options: | * **//adc_reference//** \\ ADC Vergleichsspannung, Aufzählungsdatentyp. Möglichkeiten: |
| * //ADC_REF_AREF// - Vergleichsspannung vom AREF pin. | * //ADC_REF_AREF// - Vergleichsspannung vom AREF Pin. |
| * //ADC_REF_AVCC// - Vergleichsspannung vom AVCC pin. | * //ADC_REF_AVCC// - Vergleichsspannung vom AVCC Pin. |
| * //ADC_REF_2V56// - Interne 2,56 V Vergleichsspannung. | * //ADC_REF_2V56// - Interne 2,56 V Vergleichsspannung. |
| |
| * **//adc_prescale//** \\ ADC clock prescaler enumration data type. It determines the division factor of system clock. Options: | * **//adc_prescale//** \\ ADC Takt-Vorteiler, Aufzählungsdatentyp. Der Vorteiler gibt den Divisionsfaktor für den Systemtakt an. Möglichkeiten: |
| * //ADC_PRESCALE_2// - Division factor 2. | * //ADC_PRESCALE_2// - Divisionsfaktor 2. |
| * //ADC_PRESCALE_4// - Division factor 4. | * //ADC_PRESCALE_4// - Divisionsfaktor 4. |
| * //ADC_PRESCALE_8// - Division factor 8. | * //ADC_PRESCALE_8// - Divisionsfaktor 8. |
| * //ADC_PRESCALE_16// - Division factor 16. | * //ADC_PRESCALE_16// - Divisionsfaktor 16. |
| * //ADC_PRESCALE_32// - Division factor 32. | * //ADC_PRESCALE_32// - Divisionsfaktor 32. |
| * //ADC_PRESCALE_64// - Division factor 64. | * //ADC_PRESCALE_64// - Divisionsfaktor 64. |
| * //ADC_PRESCALE_128// - Division factor 128. | * //ADC_PRESCALE_128// - Divisionsfaktor 128. |
| |
| ===== Funktionen ===== | ===== Funktionen ===== |
| * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ | * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ |
| Initialisiert ADC. Parameter: | Initialisiert ADC. Parameter: |
| * //reference// - Vergleichsspannungsauswahl. | * //reference// - Auswahl der Vergleichsspannung. |
| * //prescale// - Clock prescaler selection. | * //prescale// - Auswahl des Takt-Vorteilers. |
| |
| * **//unsigned short adc_get_value(unsigned char channel)//** \\ | * **//unsigned short adc_get_value(unsigned char channel)//** \\ |
| Konvertiert spezifische ADC Kanal Analogwerte ins Digitale. Die Funktion blockt. Parameter: | Konvertiert bestimmte analoge ADC Kanalwerte in digitale. Die Funktion blockiert. Parameter: |
| * //channel// - ADC channel number (0 to 7). | * //channel// - ADC Kanalnummer (0 bis 7). |
| * Return 10-bit digital value. | * Liefert einen digitalen 10-bit Wert. |
| |
| * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ | * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ |
| Konvertiert spezifische ADC Kanal Analogwerte zu Digitalen //desired number of times and calculates the average.// Die Funktion blockiert. Parameter: | Konvertiert eine gewünschte Anzahl analoger Werte eines bestimmten ADC Kanals zur digitalen Werten und berechnet den Mittelwert. Die Funktion blockiert. |
| * //channel// - ADC channel number (0 to 7). | * //channel// - ADC Kanalnummer (0 bis 7). |
| * //num_samples// - Number of samples for calculation (1 to 64). | * //num_samples// - Anzahl der Werte für die Berechnung (1 bis 64). |
| * Return 10-bit digital value. | * Liefert einen digitalen 10-bit Wert. |
| |
| ===== Beispiel ===== | ===== Beispiel ===== |
| |
| Als Beispiel der ADC ist initialisiert und zwei Analogkanal-Werte werden zu digitalen konvertiert. Der Wert von Kanal 0 wird der Variable //x// zugewiesen und der durchschnittliche Wert von Kanal 1 der Variable //y//. | Der ADC sei initialisiert und zwei analoge Kanalwerte zu digitalen konvertiert. Der Wert von Kanal 0 wird der Variable //x// zugewiesen und der durchschnittliche Wert von Kanal 1 der Variable //y//. |
| |
| |
| unsigned short x, y; | unsigned short x, y; |
| |
| // Initializing ADC. Reference voltage from AVCC. | // Initialisierung ADC. Vergleichsspannung von AVCC. |
| // Clock is 8 times slower than system clock. | // Takt ist 8 mal langsamer als der Systemtakt. |
| adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); | adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); |
| |
| // Converting channel 0 value. | // Konvertierung des Wertes von Kanal 0. |
| x = adc_get_value(0); | x = adc_get_value(0); |
| |
| // Converting and averaging channel 1 value. | // Konvertieren des Wertes von Kanal 1 und Errechnung des Durchschnitts. |
| y = adc_get_average_value(1, 10); | y = adc_get_average_value(1, 10); |
| } | } |