Hallo Thegon,
leider noch eine nicht so gute Nachricht.
Hab meinen Testaufbau fertig und das Meßprogramm ist in etwa so wie bei Dir aufgebaut:
Systemtakt ist bei mir 8Mhz interner Oszillator; Timer0 läuft mit 1MHz (Prescaler = 8 ). Der schnellere Systemtakt soll vor allem die ISRs schneller machen.
Gestartet wird über ein Taster
Nach Senden des Bursts, den ich nach Deiner Methode erzeuge (mit waitus 11 komme ich auf 41kHz), wird mit dem Timer die Zeitmessung gestartet. Bursts sind bei mir eigentlich egal, da der Tiny25 Simulator einfach nur auf ein low wartet und dann sofort einen Pin als Echo für 3ms nach low zieht. Hoffe, hab das richtig simuliert. Soll eine Distanz von ca 50cm darstellen.
Overflows werden im Timer0 OVF-Interrupt gezählt.
Trifft das Meßende nach ca 3000µs (mit Oszi kontrolliert) ein, wird in der INT0 ISR die Zeit gesichert und später im Hauptprogramm ausgegeben.
Bei meinem Glück/Pech trifft das Meßende in der Nähe eines Timer0 Überlaufs ein und damit geht ab und zu ein Überlauf verloren. Bedeutet eine Ungenauigkeit/Abweichúng von mindestens 256µs. Sieht aus, als wenn der Timerüberlauf gerade kommt, wenn der INT0 abgearbeitet wird.
Ansonsten ist die Abweichung der einzelnen Meßwerte untereinander zwischen 0 und 25µs.
Werde noch ein bißchen probieren, denke aber, das man da anders rangehen muß.
Besser wäre auf jeden Fall ein 16 Bit Timer. Du müßtest doch auf dem ATMega48 noch einen frei haben? Ohne die Overflow ISR sind die Abweichungen nur noch sehr gering.
Viel Glück bei der HW. Es kann nur noch bessser werdenDer Oszi geht ja schon wieder.
Gruß
Searcher
Lesezeichen