Gast
#2661217
Hallo zusammen!
Ich noch ein ziemlicher Neuling.
Ich habe die Aufgabe bekommen, ein Analogsignal einzulesen und mit einem
Min/Max zu vergleichen. Dies konnte ich auch umsetzen. Leider handelt es
sich in Wirklichkeit bei dem Signal um ein Rechtecksignal.
Für Analogsignale habe ich im Forum eine Funktion gefunden. Kann man
diese umschreiben, so dass diese das Rechecksignal auswertet? Das ganze
sollte nach Möglichkeit ohne externen Quarz funktionieren.
Die Information wird durch die Pulsbreite bestimmt, also die Frequenz.
Der Frequenzbereich liegt zwischen 30Hz und 90Hz
Bin für jede Hilfe dankbar.
Viele Grüße
Oliver
PS: Die Funktion zur Analogwertausgabe:
uint16_t readADC(uint8_t channel) {
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // Den ADC aktivieren
und Teilungsfaktor auf 64 stellen
ADMUX = channel | (1<<REFS0); // Kanal des Multiplexers
waehlen; AVCC mit externen Kondensator am AREF Pin
ADCSRA |= (1<<ADSC); // Den ADC initialisieren und
einen sog. Dummyreadout machen
while(ADCSRA & (1<<ADSC));
for(i=0; i<3; i++) { // Jetzt 3x die analoge Spannung
and Kanal auslesen und dann Durchschnittswert ausrechnen.
ADCSRA |= (1<<ADSC); // Eine Wandlung
while(ADCSRA & (1<<ADSC)); // Auf Ergebnis warten...
result += ADCW;
}
ADCSRA &= ~(1<<ADEN); // ADC wieder deaktivieren
result /= 3;
return result;
}