Hier kann ein Taschenrechner äußerst wertvolle Dienste leisten! Wenn man damit Deine angegebenen Werte mal so verrechnet wie es der Mega328P tun soll, kommt man zu überraschend ähnlichen Ergebnissen. Rechenfehler seitens des Controllers sind es also schon mal nicht (und wären auch absolut nicht zu erwarten).kann es sein, das der 328p mir da irgendwie rechenfehler reinbaut ? o.O
Erstmal zwei "Schönheitsfragen":
Was ist der Sinn der For-Next-Schleife?
Wieso fragst Du nach dem Befehl "Loop Until Messung_beendet = 1" nochmal "If Messung_beendet = 1" ab?
Das erklärt die seltsamen Werte aber zugegebenermaßen nicht. Was mir insgesamt auffällt ist die extrem hohe Anzahl an Timer-Überläufen ( > 5000...).
Bei einer Taktfrequenz von 8 MHz und einem Prescaler von 1 läuft der 8-Bit-Timer alle 32µS über. 5000 Überläufe während des auszumessenden Impulses würden also bedeuten, dass der Impuls eine Größenordnung von ca. 160mS hat - und das ist zu viel. Der SRF04 soll einen Impuls von maximal 32ms erzeugen (wenn kein reflektiertes Echo erkannt wurde), und ansonsten zwischen 100µs und 18mS. Mit dieser Größenordnung ist also schon mal was faul.
Den Timer ohne jeden Prescaler zu betreiben, ist möglicherweise auch etwas problematisch: Nach dem Auslösen einer ISR braucht der Controller schon mal weit mehr als 50 Takte um alle Register zu "retten" - und nach dem Return nochmal so viele, um die Registerinhalte alle wieder zurückzuschreiben. Wenn also alle 256 Takte in eine Timer-ISR gesprungen wird, ist der Controller schon mal mindestens die Hälfte der Zeit mit nix anderem beschäftigt, als Registerinhalte hin- und herzuschieben. Und dabei könnte vielleicht einiges auf der Strecke bleiben.
Wenn Du den Timer mit einem Prescaler von 64 betreibst, ist die Auflösung jedes Zählschrittes immer noch 8µs, d.h. die relevante Pulsbreite von 100µs bis 16ms könnte damit in knapp 2000 Stufen aufgelöst werden. Bei einer maximaler Impulslänge von 32 ms (d.h. kein Echoreflex) würde es übersichtliche 15 Timer-Überläufe geben, d.h. man könnte das Ganze auch mit Word-Variablen berechnen.
Die konkrete Berechnung müsste dann natürlich mit etwas anderen Zahlen ausgeführt werden, was ja aber kein Problem sein sollte wenn man weiß, wie der Zusammenhang zwischen Pulsdauer und Entfernung ist.
Lesezeichen