Bei der Verwendung der US-Einheit wird ja folgende Version verwendet:
Hierbei ergibt sich:Code:ISR(TIMER2_COMP_vect) { //TCNT2 += 0x25; count36kHz++; if(!count36kHz) timebase++; } /** * initialises the Ultrasonic module * this function is automaticly called by Chirp */ void InitUltrasonics(void) { // Change Oscillator-frequency of Timer 2 // to 40kHz, no toggling of IO-pin: TCCR2 = (1 << WGM21) | (1 << CS20); OCR2 = 100; // 40kHz @8MHz crystal TIMSK |= (1 << OCIE2); // OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable ADCSRA = (0 << ADEN); // deactivate ADC ACSR |= (1 << ACIS1); // Comparator Interrupt on Falling Output Edge ADMUX = 0x03; // connect ADC3-input with comparator SFIOR |= (1 << ACME); // connect ADC multiplexer to comparator DDRD &= ~(1 << 6); // use Port D Pin 6 as input (AIN0) }
4000 kHz / 100 (OCR2) = 40 kHz (Warum 4 MHz anstelle 8 MHz? Wo spielt der Faktor 2 hinein?)
Das mit den Timern wird nirgends sauber erklärt. Robin Gruber verweist auch nur auf das Datenblatt. Auch im wiki-Artikel Timer gibt es keine klare Erklärung. Teilweise sind sogar Fehler enthalten.







Zitieren

Lesezeichen