Speedking
29.06.2006, 20:43
Hallo Forum,
hier wieder ein Schnipsel für die Portabfrage (analog).
uint16_t RN_Control_Board::analog(uint8_t i)
{
uint8_t ad_wert = 0;
if ((i<0) || (i>7)) return -1; //falsche Eingabe
ADMUX=i; // Eingang wählen
cbi(ADCSRA, ADFR); // single-Wandlung einstellen
cbi(ADMUX, ADLAR); // left adjust ist nicht aktiv
sbi(ADCSRA, ADEN); // ADC enable
sbi(ADCSRA, ADSC); // A/D-Wanldung starten
while (ADCSRA & 64); // auf 0 warten, dann ist Wandlung beendet
ad_wert = ADCW; // Low- und High-Byte in einem Schritt kopieren.
// In ad_wert (16 Bit) steht jetzt der 10-Bit-A/D-Wert (0...1023)
return ad_wert;
}
In diesem Programm (eine c++ Funktion) wird der integer-wert des Einganges übergeben, der ausgewertet werden soll.
Danach erfolgt die Initioalisierung des A/D-Wandlers und die Wandlung selbst.
Ich denke, man kann das noch "schicker" machen, aber mir reichts.
Bis denn... Klaus 8-[
hier wieder ein Schnipsel für die Portabfrage (analog).
uint16_t RN_Control_Board::analog(uint8_t i)
{
uint8_t ad_wert = 0;
if ((i<0) || (i>7)) return -1; //falsche Eingabe
ADMUX=i; // Eingang wählen
cbi(ADCSRA, ADFR); // single-Wandlung einstellen
cbi(ADMUX, ADLAR); // left adjust ist nicht aktiv
sbi(ADCSRA, ADEN); // ADC enable
sbi(ADCSRA, ADSC); // A/D-Wanldung starten
while (ADCSRA & 64); // auf 0 warten, dann ist Wandlung beendet
ad_wert = ADCW; // Low- und High-Byte in einem Schritt kopieren.
// In ad_wert (16 Bit) steht jetzt der 10-Bit-A/D-Wert (0...1023)
return ad_wert;
}
In diesem Programm (eine c++ Funktion) wird der integer-wert des Einganges übergeben, der ausgewertet werden soll.
Danach erfolgt die Initioalisierung des A/D-Wandlers und die Wandlung selbst.
Ich denke, man kann das noch "schicker" machen, aber mir reichts.
Bis denn... Klaus 8-[