Hi,
so etwas hatte ich auch mal vor, doch leider wieder verworfen. Wie hast Du das Signal denn an den atmega angeschlossen ? Wie sieht dein Code aus ?
Gruß BlaueLed
Tag zusammen,
Ich hab folgendes Problem. Ich möchte ein Signal einer Tachowelle auswerten. Der Verlauf des Signals ist zwar etwas komisch, aber das sollte nicht das Problem sein.
Ich bekomme bei ca. 70cm Laufstrecke eines Reifens eine Pegeländerung von HIGH auf LOW. Wobei LOW nur kurz ansteht und der Pegel dann wieder HIGH ist...quasi ein Kurzer Impuls alle 70cm.
Das Problem ist dass ich im Maximalfall alle 8,3ms einen Impuls bekommen (entspricht ca. 300km/h) und im Minimalfall alle 2,52s einen Impuls bekomme (entspricht 1km/h.
Das ganze soll ausgewertet werden und 3-stellig auf einen 128x64 LCD ausgegeben werden (also wenn die Geschwindigkeit 47km/h beträgt soll 047 km/h ausgegeben werden). Das Display soll ca. alle 500ms aktualisiert werden.
Jetzt ist mein erstes Problem die Signalerfassung ohne dass mein Signal prellt.
Das zweite Problem ist dass sich mein ATMEGA32 bei höheren Geschwindkigkeiten (ca. 120km/h) aufhängt, bzw sich wieder neu startet. Ich weis nicht ob das was mit der Impulsdauer und der Ausgabezeit zu tun hat. Im Moment lasse ich einen Timer laufen, der pro 1s 10000 Überläufe liefert (ist etwas übertrieben glaub ich....aber in der Overflowroutine frage ich auch den Zustand des Eingangspins für die Pegeländerung ab und da muss die Abtastrate bei hohen Geschwindigkeiten auch so hoch sein).
Gibt es da nicht eine bessere Lösung? Bin um jeden Beitrag und Kritik dankbar.
Mfg Mel
Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.
Hi,
so etwas hatte ich auch mal vor, doch leider wieder verworfen. Wie hast Du das Signal denn an den atmega angeschlossen ? Wie sieht dein Code aus ?
Gruß BlaueLed
Ich bastel im Moment noch wie ich das beste Signal bekomme. Im Moment hab ich die Tachowelle über einen Spannungsteiler einfach an nen Pin gehängt. Wenn ich es schaffe stell ich nachher mal das oszilloskopierte Signal und Code rein.
Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.
Hallo
Löse bei einer Zustandsänderung einen Interrupt aus, dann brauchst Du nicht ständig zu "lauschen" oder leg das Signal gleich auf einen Counter.
Mit freundlichen Grüßen
Benno
Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde
Hi!
Ich denke, dass Du bei hohen Geschwindigkeiten einen Stack-Überlauf produzierst und der AVR dadurch vermeintlich neu gestartet wird. Nimm lieber den den Timer/Counter und zähl die Impulse, die anliegen. IMHO kann der mit maximal fosz / 4 getaktet werden.
Du must nur in regelmäßigen Abständen den Zählerstand auslesen und auf 0 setzen.
MfG
Markus
@ cipher
wie möchtest du mit dem timer die impulse "zählen"?
du hängst das sginal an den ICP und bekommst dann nur timerwerte und nen interrupt geliefert, ob man die zeit jetzt aus dem ICR nimmt oder in der ISR aus dem CNT register nimmt, macht jetzt nicht so unbändig viel unterschied, wenn die frequenz zu hoch wird läufst du auch da in einen stacküberlauf ....
das einzige was man noch probieren könnte, wäre einen mux vor das signal zu hängen, sodass er nur alle 8 impulse einen impuls zum controller sendet ..
udn wenn der mux hops geht wegen ner spannungsspitze, kann man den immernoch besser tauschen als den controller (wo man ein neues programm aufspielen müsste ...
am besten vor dem mux noch einen auf GND und VCC versorgten OPAMP in komparatorschaltung als level-converter einsetzen, so bleibt die elektronik länger heile)
Selbst wenn alle 8 ms ein Siganl kommt, ist das für den Controller noch eine recht lange Zeit, es sei denn man arbeitet mit weniger 32 kHz Takt.
Wenn das Signal sauber ist, also kein Prellen oder so, könnte man den externen Zähler Eingagn nutzen. Der externe Counter Eingang ist aber bei schlechtem Signal schnell unbrauchbar, denn da kann man wenige fasche Pulse nicht mal erkennen.
Der ICP Eingang bietet da deutliche Vorteile. Man mißt die Zeit für eine Umdrehung. Und kreigt dadurch besonders auch bei niedrieger Geschwindigkeit ein sehr gute Auflösung. Einige fasche Impulse kann man, wenn es sein muß, auch noch per Software aussortieren.
Eine Impulszählung in einem Timer ist bei so wenigen Impulsen nicht sinnvoll. Andererseits ist auch die maximale Impulsrate nicht sonderlich hoch.
Der Weg von Besserwessi mit der Periodendauermessung ist, auch meiner Meinung nach, der Goldene.
Wenn dein Sensor für eine Umdrehung 2,5 sek braucht, kannst Du nach 0,5sek keinen neuen Wert im Display haben.
Das geht im Idealfall bei einer Geschwindigkeit von 5km/h.
Denn erst ab da kommt auch alle 0,5sek ein Impuls vom Geber.
Eventuell kannst Du das auch so lösen, das die Displayrefreshrate zuerst vom Impuls des Gebers abhängt und dann bei höheren Geschwindigkeiten mit einem Timer auf 0,5 sek eingestellt wird.
Das kann man ja sehr schön über die Werte des Zählers, der für die Periodendauermessung zuständig ist erkennen.
Bei Zeiten über 2,5 sek sollte aber dann eine Overflow Routine zuschlagen, die dann die Geschwindigkeit auf 0 setzt.
Ich lass für solche Zwecke den Timer frei laufen und ziehe den vorherigen Zählerstand vom aktuellen ab.
Da für die Aktion mit ziemlicher Sicherheit ein Überlaufzähler verwendet wird, der in der Timer Overflow Routine hochzählt wird, ist die Benutzung des Input Capture Registers im dazugehörigen Interrupt sinnvoll.
Das hochgezählte Register des Timer Overflow Interrupts wird natürlich in die Berechnung mit einbezogen.
Ja bis jetzt hab ich die Zeit zwischen zwei Impulsen gemessen und ausgewertet. Dabei hab ich den alten Wert mit dem aktuellen verglichen und sobald der aktuelle größer ist wird das neue ergebnis mit dem aktuellen Wert verrechnet. Werde es mal mit dem ICP versuchen. Vielen Dank für eure Antworten
Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.
ich dachte es ging hier darum, dass die impulse so schnell sind dass der controller NICHT hinterherkommt ?!
aber wo ich den o-topic lese seh ich es auch grad
hab mich mehr an den folgenden antworten orientiert XD
Lesezeichen