Hallo,
Ich arbeite an einem Projekt, indem ich mit Hilfe eines Radarmoduls die
Geschwindigkeit an einem LCD Display ausgeben möchte.
Das Radarmodul gibt 44 Hz pro km/h aus. Dabei arbeite ich mit einem AT
MEGA 16 und einem 8MHz Quarz.
Die für mich sinnvollste Lösung wäre die Periodendauer zwischen jeweils
einer steigenden Flanke zu messen, in die Frequenz und dann in die
Geschwindigkeit umrechnen und am Display ausgeben.
Ich habe zwar schon gelsen, dass man dies mit zwei Timer realisieren
könnte aba trotzdem hab ich noch Probleme das Ganze im AVR Studio zu
programmieren.
Übrigens verwende ich den Int0 als Signaleingang.
Hätte jemand Vorschläge, wie das Programm ungefähr aufgebaut sein
könnte?
LG philipp
Philipp schrieb:
> aba für eine Interrupt Service Routine müsste der int0 ja reichen oda?
Aber der Input Capture macht dir schon fast alles von alleine. Du
brauchst nur noch die Werte abholen und geeignet umrechnen (jetzt ein
klein wenig vereinfacht ausgedrückt).
Du bist allerdings nicht der erste, der einen Frequenzmesser bauen will.
Die Suchfunktion hier im Forum und auch in der Codesammlung wird sich
auf das Stichwort 'Frequenz messen' oder Abwandlungen davon, mit
Ergebnissen nur so überschlagen.
Auch hier
http://www.mikrocontroller.net/articles/AVR_Softwarepool
findet sich unter Messgeräte / Frequenzmesser sicherlich der eine oder
andere brauchbare Ansatz.
wenn ich mir jedoch im Datenblatt das Blockschaltbild des AT MEGA 16
ansehe, kann ich zwischen int0 (PD2) und ICP (PD6) keinen Unterschied
feststellen.
Also vielleicht klingt die Frage blöd aber warum übernimmt der ICP dann
so viel mehr arbeit?
Philipp schrieb:
> wenn ich mir jedoch im Datenblatt das Blockschaltbild des AT MEGA 16> ansehe, kann ich zwischen int0 (PD2) und ICP (PD6) keinen Unterschied> feststellen.> Also vielleicht klingt die Frage blöd aber warum übernimmt der ICP dann> so viel mehr arbeit?
Dann solltest mal nachlesen, was die Input Capture Einheit überhaupt
macht.
Grob gesagt: Bei Auftreten eines Flanke, speichert sie den aktuellen
Zählerstand in einem extra Register und löst einen Interrupt aus.
Vorteil: Da die Hardware das Wegspeichern des Zählerstandes erledigt,
ist der Zeitverzug vom Auftreten der Flanke bis zum Wegspeichern
konstant und minimal kurz. Du hast dann in der ISR alle Zeit der Welt,
den weggespeicherten Zählerstand auszuwerten während der Timer im
Hintergrund weiterläuft und auf die nächste Flanke lauert.
Philipp schrieb:> ok vielen dank, ungefähr kann ich mir jez vorstellen worum es geht.> ich werde mal mein glück im avr studio versuchen
Funktioniert deine Messung mittlerweile?
Hallo,
ich bin auch an dem ziemlich gleichen Projekt am werkeln.
Angefangen hatte ich mit nem Arduino zu programmieren.
Ich muss dazu sagen, dass ich mich mit dem Programmieren sehr schwer
tue.
Ich hatte begonnen eine einfache Frequenzmessung zu programmieren.
Das stellte sich auch als nicht sehr schwierig dar. Die Visualisierung
erfolgte bei mit auf einem LCD 16x2 Standartdisplay - dies war auch
nicht die Hürde gewesen.
Das Problem bei dem Radarmodul bzw. bei dem zumessenden Signal ist, dass
man aus dem auftretenden Signal die maximalste Frequenz bestimmen muss.
Wenn ich das richtig aufgenommen habe, dann ändert sich die
Periodendauer bei der Frquenzerfassung eines Objekts.
Genau bei der Erfassung/Auswertung dieser max. Frequenz, welche dann ja
nur noch in die Geschwindgkeit umgerechnet werden muss, hänge ich seit
geraumer Zeit fest.
Ich bin gerade auf das MyAVR EinsteigerSet umgestiegen, weil ich mit dem
Arduinoboard irgentwie nicht weiter gekommen bin. Mit dem will ich nach
dem Abschluss meines Studiums weiter beschäftigen... :)
Hat jemand eine Idee wie man aus einem sich änderden Signal die max.
Frequenz bestimmen kann, eine Herangehensweisen o.Ä....
Der Analogteil sprich Vorverstärker ist bei mir durch einem normalen opv
realisiert worden, da das Signal vom Radar zu klein(~300µV) ist. Mit
einem nachgeschalteten Komparator kann ich festlegen ab wann ein Signal
ausgewertet werden soll und somit Störsignale unterdrücken.
mfg schulle
Spielt doch keine Rolle wann der threat gestartet wurde. Da ich mit der
gleichen Schaltung Probleme habe, Brauch ich doch nicht extra einen
extra threat aufmachen. Sonst hätte ich alles nochmal erklären müssen.
Bin vor 2 Tagen erst auf Myavr umgestiegen und habe deshalb noch keinen
Code.
Dachte nur es kann mir schon mal jemand einen Rat geben wie ich das
signal auswerten kann. Will im laufe der woche beginnen mit der
Programmierung.
MfG
D. S. schrieb:> Ich hatte begonnen eine einfache Frequenzmessung zu programmieren.> Das stellte sich auch als nicht sehr schwierig dar.
Wie sieht der Code dazu aus?
D. S. schrieb:> Hat jemand eine Idee wie man aus einem sich änderden Signal die max.> Frequenz bestimmen kann, eine Herangehensweisen o.Ä....
Miss erstmal überhaupt eine Frequenz bzw. Periodendauer.
D. S. schrieb:> Der Analogteil sprich Vorverstärker ist bei mir durch einem normalen opv> realisiert worden, da das Signal vom Radar zu klein(~300µV) ist. Mit> einem nachgeschalteten Komparator kann ich festlegen ab wann ein Signal> ausgewertet werden soll und somit Störsignale unterdrücken.
Du kannst auch einfach den OPV so vertärken lassen, dass er ein Rechteck
ausgibt.
spess53 schrieb:> Hi>> Nachfrage: Hast du dir das Ausgangssignal schon mal mit einem Oszi> angesehen?>> MfG Spess
Ja habe ich und es ist bei mir ein sauberes Rechtecksignal, welches sich
in der Frequenz verändert je nach dem wie schnell der Gegenstand ist.
Ich weiss auch schon, dass es hier mit dem Timer/Counter nicht ganz
funktioniert wie ich das eigentlich brauche. So wie in dem Code kann man
es ganz gut zum Messen von Frequenzen benutzen, die länger bzw.
dauerhaft anliegen.
mfg schulle
Die Lösung wird sicher im Bereich INTERRUPT, für eine positive und der
nächsten negativen Flanke, liegen. Ich habe davon leider noch nicht
soviel
"Peilung" :/
mfg schulle
D. S. schrieb:> Habe mal versucht den Code den Code zuveröffentlichen..
Der sieht aus, wie eine abgewickelte Klopapierrolle.
Was sind denn "mHz" oder "gHz"?
Schon mal was vom Wertebereich einer long Variable gehört?
Moin,
ich habe jetzt mal meinen Code in ein Textdatei gepackt, sodass ihn
jetzt auch lesen können. da ich aber die Platform von Arduino auf MyAVR
MK2 gewechselt habe, werden mir Ratschläge zu diesem Code erstmal nix
helfen. Im großen und ganzen funktioniert, der Quellcode als reiner
Frequenzzähler für ein ständig anliegendes Signal sehr gut. Er hat auch
eine hohe Genauigkeit.
Für meine Anwendung hier aber unbrauchbar.
Ich werde mich jetzt der Programmierung widmen, wo ich ein Interrupt
ausgelöst wird, wenn eine positive Flanke kommt. Und dann gleich die
nächste negative auch einen Interrupt auslöst. In der ISR (positive
Flanke) wird der Zählerstand von Timer0 abgefragt, und in der ISR
(negative Flanke) wird der gleiche Zählerstand noch mal ausgelesen. Aus
den beiden Zählerständen ermittle ich dann die Periodendauer des
Signals.
Und wenn ich bis dahin gekommen bin..., bin ich auch erstmal ein ganzes
Stück weiter. Theoretisch ist es auch nich das Problem nur dies in die
Praksis umzusetzen ist für mich nicht ganz leicht, weil Anfänger in
µC-Programmer...
mfg schulle