Hallo! Ich brauche dringend Hilfe. Ich möchte mit einem ATmega8 die zeit zwischen zwei Pulsen messen. Ich habe eine rotierende geschlitzte Scheibe mit einem Schlitz. Jetzt möchte ich irgendwie messen, wie lange die Scheibe für eine Umdrehung benötigt. Anschließend will ich das Messergebnis per UART versenden. Das ganze muss ich in Assembler umsetzen. Ich habe keine Idee wie ich das realisieren soll. Das versenden ist kein Problem, allerdings kann ich die Zeit nicht messen... bzw. habe keine idee wie ich die Zeit messen soll. ich hatte erst gedacht ein Register immer weiter hoch zu zählen, was aber nicht sehr genau ist. Ich bräuchte eine Lösung, mit der ich: 1. Bei einem Startsignal einen Timer starte 2. Bei einem Stopsignal den Timer stoppe und zurücksetze 3. Die gemessene Zeit über den UART ausgebe Ich verwende einen 4MhZ Quartz und die Umdrehung der scheibe kann bis zu 5 Sekunden dauern. Gibt es da ein gutes Modell was ich verwenden könnte? Oder habt ihr hilfreiche tipps und tricks? Ich habe schon eine Menge gelesen, allerdings treffen die ganzen Googlefunde nicht auf mein Problem zu :( MfG KPMan
Den Timer einfach durchlaufen lassen. Bei Start den Timer auslesen. Bei Stop den Timer auslesen. Differenz bilden. Wenn Differenz < 0 dann Maximalwert des Timers addieren. Dann den Differenzwert in Sekunden umrechnen. joe
Danke für die fixe antwort! Hast du eventuell ein Code Beispiel parat, dass mir das auslesen des Timers zeigt? Bzw. in welchem register wird der Timer count gespeichert?
Hi >Bzw. in welchem register wird der Timer count gespeichert? Schon mal etwas von einem Datenblatt gehört? http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf MfG Spess
Joe schrieb: > Differenz bilden. > > Wenn Differenz < 0 dann Maximalwert des Timers addieren. > > Dann den Differenzwert in Sekunden umrechnen. Bei 5 Sekunden wird es mit Sicherheit ein paar Timer-Überläufe geben. Die kann man aber problemlos mitzählen. Mache sprechen dabei von der Uhrenfunktion: Die Uhr läuft konstant durch. Sobald das entsprechende Ereignis eintritt liest man die Uhrzeit ab und wartet auf das nächste relevante Ereignis (in deinem Fall die zweite Flanke). Dann liest man wieder die Uhr ab ud bildet die Differenz aus den beiden Zeiten. Wenn dein Timer mit 4 MHz läuft, dann gibt es bei einem 16Bit-Timer ca. alle 16 MIllisekunden einen Überlauf. Wenn du dann noch die Überläufe in zwei Bytes speicherst, bist du auf der sicheren Seite. Wenn man den Timer nicht anderweitig benötigt, kann man ihn auch (ähnlich wie bei einer Stoppuhr) bei der ersten Flanke zurücksetzen (oder vorher zurücksetzen und bei der Flanke dann starten). Bei der zweiten Flanke kann man ihn dann anhalten und auslesen. Wenn man die InputCapture-Funktion benutzt, dann lässt man den Timer durchlaufen...
Hi
>Bei 5 Sekunden wird es mit Sicherheit ein paar Timer-Überläufe geben.
Nö. Ein 16Bit-Timer läuft bei 4MHz und Prescaler 1024 alle 16,xxx s
über.
MfG Spess
STK500-Besitzer schrieb: > Wenn dein Timer mit 4 MHz läuft, dann gibt es bei einem 16Bit-Timer ca. > alle 16 MIllisekunden einen Überlauf. Dazu wird niemand gezwungen. Wozu gibt es einen Prescaler. Die Erweiterung durch einen Softwarezähler ist sinnvoll, wenn die Zeitauflösung sonst nicht reicht. Für eine entsprechende Genauigkeit kommt man dann allerdings nicht um einen Abgleich des Quarzes drumrum.
Timer schrieb: > Für eine entsprechende Genauigkeit > kommt man dann allerdings nicht um einen Abgleich des Quarzes drumrum. Es geht nicht um Genauigkeit, sondern um eine Hausaufgabe... kpman schrieb: > Das ganze muss ich in Assembler > umsetzen. ...
Hi Hannes Lux schrieb: > Es geht nicht um Genauigkeit, sondern um eine Hausaufgabe... Genau der Satz mit > Das ganze muss ich in Assembler > umsetzen ist mir auch aufgefallen. Mittlerweile sind scheinbar einige nachwachsende "Ingenieure" selbst zum "Verpacken" ihrer Hilfesuche zu dumm. Entschuldigt, aber mir geht dabei auch der Hut hoch. >Gibt es da ein gutes Modell was ich verwenden könnte? Oder habt ihr >hilfreiche tipps und tricks? Ich habe schon eine Menge gelesen, >allerdings treffen die ganzen Googlefunde nicht auf mein Problem zu :( Nun, viel gelesen zu haben scheinst du nicht. Da gibt es hier Tutorials, auch über die Verwendung von Timern. Und auch in Assembler und... sogar für Atmega8. Aber das findet man nicht, wenn man in der Suche sich auf fertige Lösungen stürzt.... Aber auch da hättest du fündig werden können, wenn dun nach "Drehzahlmesser" geschaut hättest. Da gibt es schon ein paar Veröffentlichungen und: Drehzahl (Frequenz) und Zeit (Periode) sind da sehr anhänglich. Na ja, du bist ja noch Schüler und woher soll man sowas auch wissen. Daher jetzt ein wirklich nützlicher Tip: Im Unterricht aufpassen und geistig mitarbeiten. Wenn etwas nicht verstanden wird, keine Frage, werden wir helfen, aber sowas >Hast du eventuell ein Code Beispiel parat, >dass mir das auslesen des Timers zeigt? geht nicht.... Daher schau ins Tutorial. Dort hab ich auch die Basis gelernt, mit Timer umzugehen. Gruß oldmax
oldmax schrieb: > Daher schau ins Tutorial. Dort hab ich auch die Basis gelernt, mit Timer > umzugehen. Ich nicht, ich hatte zu der Zeit keinen Zugang zum Netz und daher auch nicht zu Tutorials und Suchmaschinen, ich nutzte die Infos der Datasheets der Atmel-CD, die mir mal Jemand kopierte. ...
Hannes Lux schrieb: > oldmax schrieb: >> Daher schau ins Tutorial. Dort hab ich auch die Basis gelernt, mit Timer >> umzugehen. > > Ich nicht, ich hatte zu der Zeit keinen Zugang zum Netz und daher auch > nicht zu Tutorials und Suchmaschinen, ich nutzte die Infos der > Datasheets der Atmel-CD, die mir mal Jemand kopierte. > > ... Gaaanz früher gab es auch mal sowas wie Bücher.....
Andreas B. schrieb: > Gaaanz früher gab es auch mal sowas wie Bücher..... Und als die noch bezahlbar waren, habe ich mir etliche gekauft und auch gelesen. Ich habe mir sogar vor ein paar Jahren ein AVR-Buch gekauft, aber das war rausgeschmissenes Geld (voller sachlicher Fehler und recht lieblos gemacht). Aber die Generation Google will ja nicht mehr lernen, sondern sucht nur noch nach (fertigen) Lösungen. Weiter so, das ist super kreativ, das sind die In-Chin-Öre von morgen... ...
Ich hab Dir mal ein Beispiel gemacht. Bewußt hab ich diese nicht kommentiert, damit Du dich damit beschäftigst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.