www.mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik Spannung - Frequenz - Umsetzung ( U - f - Umsetzung)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: .... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu brauch man keinen teuren µC. Mach das z.B mit einem NE555.

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Schau Mal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'''
ungeprüft, ich kenne die PWM-unit des AVR nicht
'''

das ist linear genug fuer den 1 April

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Schau Mal
???? Kannst Du Deine Äußerung etwas detaillieren?
Konstruktive Kritik ist stets willkommen.

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Tiny26 hast du recht, aber der Mega8 kann PWM wenn's sein muss bis
16-bit.

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Schau Mal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
....DDS ist auch eine Moeglichkeit

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Schau Mal

Kannst Du genauer beschreiben, was DDS ist?

Autor: Schau Mal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.