noch dazu: Dir Frequenz am Eingang ist einstellbar, d.h. der Ausgang(Spannung) abhängig vom Eingang sein soll.
Hallo Jungs,
ich möchte ein Frequenz/Spannung Wandler mit einem Microcontroller programmieren. Am Eingang ist ein Rechtecksignal (Frequenz) und am Ausgang soll eine Konstante Spannung sein (0.....10V).
Problem: ich weiß nicht, wie ich anfangen soll. Es wäre nett, wenn mir jemanden die Grundidee oder Vorgehensweise mitteilt.
Danke
noch dazu: Dir Frequenz am Eingang ist einstellbar, d.h. der Ausgang(Spannung) abhängig vom Eingang sein soll.
Hi,
da musst du dich durchs Datenblatt von deinem Atmega wälzen!
Brauchst einen Eingang als Counter, der die die Anzahl der Empfangenen Signale pro Zeit zählt, und als Ausgang nimmst du einen deiner ADC, oder in dem Fall Digital-Analog converter.
Dann musst du in deinem Prog nur festlegen welche Frequenz welcher Spannung entspricht und gut ist!!
Viel Erfolg
Ich bin keine Signatur ich mach hier nur sauber
vielen dank für die Antwort.
Ehrlich gesagt, ich bin anfänger beim Programmieren von Microcontroller. ich hab schon ein Paar kleine Aufgaben an der FH gemacht. aber wie soll ich den counter programmieren???. Wie kann er steigende Flange von fallende Flange unterscheiden??????
Hi,
des kann man dem alles sagen, Kannst glaub ich auch auf Pegel einstellen!
Um zu wissen wie du des deinem Controller sagst, wirst du nicht darum herumkommen ins Datenblatt zu schauen!
Ich weiß ja nichtmal welchen Controller du verwendest!!
Schau mal hier im Wiki da ist des meiste erklärt!!
Ich bin keine Signatur ich mach hier nur sauber
ich verwende ATmega8535
In welchem Frequenzbereich bewegt sich das ganz denn?
Als kurze Idee (nur jetzt mal so aus dem Ärmel kann also locker Denkfehler enthalten) würde ich sagen wenn die Ausgangsspannung proportional zur Frequnz sein soll, dann ist die Periodendauer umgekehrt proportional zur Ausgangssapannung.
Ich würde dann zB mit dem ICP0 Pin die Periodendauer messen. Den Timer möglichst so einstellen, dass er bei der kleinsten Frequenz die vorkommen kann gerade noch nicht überläuft aber trotzdem noch ein wenig was bei der größten Frequenz zu zählen hat.
Auf dem gleichen Timer (kenne den meg8535 nicht, benutze immer den mega würde ich dann die gemessene Zeit in das Compare Register schreiben. Jetzt brauchst Du nur noch im Compare IRQ einen Pin einschalten und bei Overflow wieder aus. Dann hast du schonmal eine PWM die proportional zur Frequenz ist. Das ganze noch durch einen Tiefpass und dann sollte es das gewesen sein.
Gruß Philipp
PS: Das neue setzen des Compare Wertes vielleicht erst nach einem Timeroverflow wieder freigeben, damit da nix durcheinander geht. Sollten in C nicht viel mehr als 10 Zeilen Code werden.
PPS: Diese Variante misst die gesamte Periodendauer, also von steigender zu steigender oder fallender zu fallender Flanke (was IMHO auch sinn macht, wenn man eine Frequenzabhängigkeit haben möchte). Wenn du mit der Capture Funktion nur die Hightime zB messen möchtest, dann kannst du die Triggerung in der ISR umschalten musst, dann aber das IRQ Bit löschen, weil das sonst sofort wieder einen IRQ Triggern würde. Steht aber auch im Datenblatt ganz gut beschrieben
Danke Philipp für deine Antwort.
ich gehe davon aus, dass es zwischen ATmega8535 und ATmega8 keinen großen Unterschied gibt.
Der frequenzbereich ist 0....3,636 kHz.
hallo,
ich hab schon den Datenblatt von ATmega8535 durchgelesen, aber ich weiß nicht wie ich den ICP verwenden soll. Ich bin ein anfänger im Microcontroller-Programmierung. Kann mir jemanden bitte helfen und ein Beispiel ausführlich erklären???????? Der Ausgang muss mittel PWM ermittelt werden.
Eigentlich ganz einfach, wenn Du den ICP Pin richtig konfiguriert hast, dann wird beim erscheinen der von Dir eingestellten Flanke der aktuelle Timerstand in das ICP Register kopiert und danach der ICP IRQ ausgelöst in dem kannst Du dann den Wert verarbeiten.
Gruß Philipp
Lesezeichen