
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Michael, > das assemblerprog habe ich nun abgeändert, jetzt läuft es ca. 25mal schneller. das ist gut. Aber hast Du auch bedacht, daß nun, da das Assemblerprogramm 25mal schneller läuft, auch nur noch 25mal höhere Geschwindigkeiten gemessen werden können? Der Wert 12000 wird nun bei einer Geschwindigkeit von 250,8 km/h zurückgeliefert, nicht mehr bei 10 km/h. Ein möglicher Lösungsweg ist, die Auflösung des Counters um ein Byte zu erhöhen, aber dann mußt Du natürlich die Berechnung umständlich anpassen: inc $a4 bne loop inc $a5 bne loop inc $a6 bra loop Grundsätzlich solltest Du Dir selbst die Frage beantworten, in welchem Wertebereich und mit welcher Auflösung Du die Geschwindigkeit messen willst/mußt. Im ersten Beitrag in diesem Forum hast Du geschrieben, Du willst Geschwindigkeiten um die 90 km/h auf zwei Dezimalstellen genau messen. Mittlerweile erreichst Du sogar über 2,5 Dezimalstellen Genauigkeit. Das bisherige Ergebnis war also schon sehr gut. Wenn Du in diesem Bereich eine gute Werteauflösung erreichen willst, geht das bei gegebener Darstellungs- und Rechengenauigkeit immer auf Kosten des meßbaren Geschwindigkeitsbereichs. Eine Ungenauigkeit entsteht übrigens auch dadurch, daß die C-Control im Hintergrund, also während der normalen Programmausführung, einige Interrupts abarbeitet. Wenn Du auf eine hohe Meßgenauigkeit Wert legst, kannst Du diese Interrupts für die Dauer der Messung deaktivieren. Das geht in Assembler: sei ... ;restliches Programm cli rts Wenn ich das richtig sehe, wartest Du in BASIC so lange, bis der Start des Impulses kommt und rufst dann Assembler auf? Ich würde auch diese Abfrage schon in Assembler bei deaktivierten Interrupts mittels BRCLR oder BRSET durchführen. Gruß, Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |