====== Analog-Digital-Wandler====== 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. ===== Datentypen ===== * **//adc_reference//** \\ ADC Vergleichsspannung, Aufzählungsdatentyp. Möglichkeiten: * //ADC_REF_AREF// - Vergleichsspannung vom AREF Pin. * //ADC_REF_AVCC// - Vergleichsspannung vom AVCC Pin. * //ADC_REF_2V56// - Interne 2,56 V Vergleichsspannung. * **//adc_prescale//** \\ ADC Takt-Vorteiler, Aufzählungsdatentyp. Der Vorteiler gibt den Divisionsfaktor für den Systemtakt an. Möglichkeiten: * //ADC_PRESCALE_2// - Divisionsfaktor 2. * //ADC_PRESCALE_4// - Divisionsfaktor 4. * //ADC_PRESCALE_8// - Divisionsfaktor 8. * //ADC_PRESCALE_16// - Divisionsfaktor 16. * //ADC_PRESCALE_32// - Divisionsfaktor 32. * //ADC_PRESCALE_64// - Divisionsfaktor 64. * //ADC_PRESCALE_128// - Divisionsfaktor 128. ===== Funktionen ===== * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ Initialisiert ADC. Parameter: * //reference// - Auswahl der Vergleichsspannung. * //prescale// - Auswahl des Takt-Vorteilers. * **//unsigned short adc_get_value(unsigned char channel)//** \\ Konvertiert bestimmte analoge ADC Kanalwerte in digitale. Die Funktion blockiert. Parameter: * //channel// - ADC Kanalnummer (0 bis 7). * Liefert einen digitalen 10-bit Wert. * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ Konvertiert eine gewünschte Anzahl analoger Werte eines bestimmten ADC Kanals zur digitalen Werten und berechnet den Mittelwert. Die Funktion blockiert. * //channel// - ADC Kanalnummer (0 bis 7). * //num_samples// - Anzahl der Werte für die Berechnung (1 bis 64). * Liefert einen digitalen 10-bit Wert. ===== Beispiel ===== 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//. #include int main(void) { unsigned short x, y; // Initialisierung ADC. Vergleichsspannung von AVCC. // Takt ist 8 mal langsamer als der Systemtakt. adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Konvertierung des Wertes von Kanal 0. x = adc_get_value(0); // Konvertieren des Wertes von Kanal 1 und Errechnung des Durchschnitts. y = adc_get_average_value(1, 10); }