Spannung - Frequenz - Umsetzung ( U - f - Umsetzung)

Gast #319443
Hallo,

ich brauche für ein Projekt eine Spannungs-Frequenzumsetzung. Ich will
eine analoge Spannung mit einem ATMega8 oder ATtiny26 am ADC einlesen,
und dann an einem Ausgang eine Frequenz ausgeben, die direkt
proportional zur eingelesenen Spannung ist: z.B. 0V entspricht 1000 Hz,
3V entspricht 2000Hz.
PWM scheidet aus technischen Gründen leider aus.

Nun meine Frage: Hat jemand so ein Problem in Assembler schon einmal
gelöst? Dabei geht es mir nicht um das einlesen (ist ja kein Problem),
sondern viel mehr darum, wie ich die U - f - Umsetzung Software-mäßig
realisiere.
Für ein Grundgerüst oder nützlichen Hinweisen wäre ich sehr dankbar.

Noch ein Hinweis: Die Pulsdauer der Frequenz sei konstant, nur eben der
Abstand der Pulse sei von der Spannung abhängig.

Vielen Dank für die Tipps.

Gruß
Jan Purrucker
Gast
Das mit dem 555 wird vermutlich wenig Linearität haben.
Es gibt auch spezielle ICs dafür.
Mit einem µC geht das ebenso gut.

Du kannst dafür einen PWM-Ausgang verwenden, nur dass Du statt des
Längen-registers das Modulo-Register veränderst, dann hast Du konstante
Ein-Dauer.
Formeln:
f= 1 / (highdauer + lowdauer)
lowdauer = 1/f - highdauer (brauchst Du nicht)

#define clock = 8000000L   //z.B. 8MHz  L:32-bit!
#define highdauer = 1234  //gewünschte High-Dauer
#define f_offset 1000
#define lin_faktor 1234  //in Promille, da hernach /1000
longint f;
f = f_offset + adc;   //oder f=f_offset+ (lin_faktor*adc/1000)
PWMmodulo  = clock / f;   //evtl. Prescaler beachten
PWMhigh = highdauer;

ungeprüft, ich kenne die PWM-unit des AVR nicht
Gast
Hallo Profi,

das ich die PWM des yC nehmen kann ist schon einmal ein guter Tipp.
Leider bräuchte ich die U - f - Umsetzung genauer. PWM hat beim ATMega8
und beim ATtiny ja nur 8bit (=256 Stufen). Ich bräuchte aber eine
Auflösung von etwa 1000 Schritten.
Vielleicht kann mir hier jemand mit einem Assembler-Code Vorschlag
weiterhelfen, da ich (bis jetzt) C nicht sehr verstehe.
Vielen Dank für weitere Anregungen.

MfG
Jan Purrucker
Gast
Hallo,

ich habe mich nun in meiner Schaltung auf den ATtiny26 festgelegt (aus
Platzgründen, und wegen der besseren Lötbarkeit in SMD)
Es müsste doch irgendwie eine Möglichkeit geben, mit diesen yC eine
deraritge Umsetzung mit 1000 Schritten zu erzielen.
Für Assemblercodes wäre ich sehr dankbar.

Jan
Gast
Könnte schon gehen: Du musst hat den PWM-Timer im laufenden Betrieb
progammieren. Wenn er also auf 900 zählen soll, dann lass ich 3x die
vollen 256 durchlaufen ohne PWM, und erst danach darf er nach den
abschliessenden 132 am Ausgang rütteln.
Gast
Nochmal, ohne Schreibfehler:

Könnte schon gehen: Du musst halt den PWM-Timer im laufenden Betrieb
progammieren. Wenn er also auf 900 zählen soll, dann lass ihn 3x die
vollen 256 durchlaufen ohne PWM, und erst danach darf er nach den
abschliessenden 132 am Ausgang rütteln.
Gast
>und dann an einem Ausgang eine Frequenz ausgeben

Bitte genauer: Sinus, Rechteck, Dreieck, Rampen, Strohhalme, Handtücher
? Wenn's was anderes ist wie Rechteck wird vermutlich DDS nicht
verkehrt sein.
Eine Lösung des Problems hängt sehr von der Vorgabe ab...

>PWM scheidet aus technischen Gründen leider aus.
Warum ? Schreib mal mehr dazu, vielleicht meinst du das nur...

Gruß
Stefan
Gast
Such mal nach dem Datenblatt vom XR-4151 (oder Abkömmlingen).
Das ist ein U/F-Wandler mit typ. 1kHz/V im Bereich 0-10kHz mit 0,05%
Linearität im 8-pol. DIL.
Oder aber auch irgendein spannungsgesteuerter Oszillator wie XR-2206.
Meines Erachtens die einfachste Lösung (ohne µP).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.