Hallo zusammen.

Da bin ich aber etwas spät aufgewacht. Ist ja schon Samstag.
M1.R hat also wieder ganze Arbeit mit ihrem Programm geleistet.

Nun habe ich auch mal in das Mini-Programm von robo.fr geschaut, und ich glaube es verstanden zu haben, trotz des irreführenden Kommentars mit 0,992 ms. Böser robo.fr

- Timer 1 auf 8-Bit Fast PWM (steht ja im Kommentar.)
- Takt für den Timer auf 8Mhz (im Asuro) steht auch im Kommentar.
-- Somit alle 1 / 8Mhz * 256 = 32 uSec den Interrupt SIG_OVERFLOW1 ausführen.
-- Darin dann je nach Vorzeichen des Tonsignals den Motor FWD oder RWD setzen.
-- Der Absolutwert des Tonsignals setzt über die PWM die Lautstärke.
-- Und dann noch eine Zeit zum Warten im Hauptprogramm bilden. Faktor 6

Die Wartezeit ist somit im Main-Programm auf 6 * 32 uSec = 0,192 mSec eingestellt. Das ist also eine Tonsignalabtastrate von ca. 5200 Hz. Hey, ist ja schon fast HiFi-Qualität.

Wenn man nun mal die Zeiten addiert, die im Main für eine Schleife zusammenkommen, dann sind dies also 2500 Datenpunkte + 2 * 8000 Einheiten Wartezeit = 18500 Zeiteinheiten die jeweils 0,192 mSec lang sind.
Also 3,552 Sekunden bis der Asuro seine Message wiederholt. Da die Stopuhr genau dieses anzeigt, scheine ich also mit meinem Verständnis hier richtig zu liegen.

Was ich allerdings nicht verstehe, dass im Interrupt je nach Vorzeichen das Register OCR1A noch mal mit dem Tonwert (mal mit +, mal mit - justiert) noch mal gefüllt wird. Ich glaube diese beiden Registerzuweisungen sind überflüssig, da ja schon vor dem if das Register gesetzt wird. Und dem ist es egal ob da ein Vorzeichen ist, da es das gar nicht bearbeiten kann.

Sonst aber mal wieder: nur genial!

Gruß Sternthaler.