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 <homelab/adc.h>
 
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);
}
de/software/homelab/library/adc.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0