www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzgenerator


Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
möchte mir einen Rechteck Frequenzgenerator in Stiftform bauen.
Die Frequenz von 1Hz bis 500kHz soll mit nur einem Bedienelement, einem 
Poti einstellbar sein. Da man einen analogen VCO mit so einem weiten 
Bereich gar nicht so einfach bauen kann, überlege ich einen AVR Tiny im 
Dil-8 Gehäuse zu nehmen, SMD kann ich nicht löten.

Im Hauptprogramm würde ich mit dem ADC die Spannung am Poti messen.
Dies habe ich schon mal hingekriegt :-)
Eine kleine Routine berechnet dann den Timer-Reload Wert.
Über Timerinterrupt würde ich dann einen Port toggeln lassen.

Meine Frage an die Leute mit mehr Erfahrung als ich  /  Also an alle ;-)
wie komme ich mit der Frequenz so tief (1Hz)?
wie komme ich mit der Frequenz so hoch (500kHz)?
welchen Tiny nehmen?
In Assembler oder in C programmieren?
wie am schnellsten Port toggeln?

Mal sehen ob ihr helfen könnt ;-)

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinerle schrieb:
> Meine Frage an die Leute mit mehr Erfahrung als ich  /  Also an alle ;-)
> wie komme ich mit der Frequenz so tief (1Hz)?

Hohen Prescaler setzen: Manche AVRs haben einen von 16384, dann noch die 
256 vom 8bit Timer und man kommt bei 8MHz bis auf <1Hz runter.

> wie komme ich mit der Frequenz so hoch (500kHz)?

Kleinsten Prescaler einstellen, kleinsten Reloadwert einstellen, dann 
ist der Teilerfaktor 2. Macht also 4MHz, bzw. wenn man die PLL aktiviert 
sollten sogar 32MHz möglich sein.

> welchen Tiny nehmen?

ATtiny25

> In Assembler oder in C programmieren?

C

> wie am schnellsten Port toggeln?

Per Output Compare.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dir ist aber bewusst, das der ADC nur 1024 verschiedene Ausgangswerte 
haben kann. Damit lassen sich innerhalb deines Bereiches auch nur 1024 
verschiedene Frequenzen (im Idealfall) auflösen.

MfG Spess

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATTiny 13, ASM -> 8Pinner

Gruß Z8

Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ spess53 (Gast)

>Dir ist aber bewusst, das der ADC nur 1024 verschiedene Ausgangswerte
>haben kann. Damit lassen sich innerhalb deines Bereiches auch nur 1024
>verschiedene Frequenzen (im Idealfall) auflösen.

ja, ich habe überlegt, wenn jede Freuenz um den Faktor 1.0129 höher als 
die vorhergehende Frequenz ist, dann kann ich einen Frequenzbereich von
1.013^1023 = 547598Hz überstreichen. Oder habe ich da jetzt einen 
Denkfehler drin?

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum nicht einfach einen bistabilen Generator mit 2 Transen bauen ?
Oder auch mit nem 4093 ein R und ein C ?

Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Benedikt K. (benedikt) (Moderator)

>> wie am schnellsten Port toggeln?
>Per Output Compare.

Brauche ich da keinen Timerinterrupt?
Wie sieht das in C aus? Bin nicht so gut in C, übe noch :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinerle schrieb:
> @ spess53 (Gast)
>
>>Dir ist aber bewusst, das der ADC nur 1024 verschiedene Ausgangswerte
>>haben kann. Damit lassen sich innerhalb deines Bereiches auch nur 1024
>>verschiedene Frequenzen (im Idealfall) auflösen.
>
> ja, ich habe überlegt, wenn jede Freuenz um den Faktor 1.0129 höher als
> die vorhergehende Frequenz ist, dann kann ich einen Frequenzbereich von
> 1.013^1023 = 547598Hz überstreichen. Oder habe ich da jetzt einen
> Denkfehler drin?

Im Prinzip nicht, wie ein kurzer Gegentest mit Excel zeigt.

Aber der Gegentest mit Excel zeigt auch, dass du gerade im unteren 
Bereich eine Menge 'ADC-Weg' verschenkst, bis sich deine Frequenz von 1 
Hz auf 2 Hz erhöht hat. Dafür springt sie dann im oberen Bereich bei 
einer Änderung des ADC Wertes um 1 umso heftiger.

Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stephan Henning (stephan-)

>warum nicht einfach einen bistabilen Generator mit 2 Transen bauen ?
>Oder auch mit nem 4093 ein R und ein C ?

Damit kann ich ohne Umschalten, (was ich nicht will) nicht so einen 
breiten Frequenzbereich von 1Hz bis 500kHz abdecken.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Aber der Gegentest mit Excel zeigt auch, dass du gerade im unteren
> Bereich eine Menge 'ADC-Weg' verschenkst, bis sich deine Frequenz von 1
> Hz auf 2 Hz erhöht hat. Dafür springt sie dann im oberen Bereich bei
> einer Änderung des ADC Wertes um 1 umso heftiger.

Nur mal ein paar Rechenbeispiele

ADC Wert             Frequenz

   1                    1
  55                    2
 180                   10
 358                  100
 512                  735
 536                 1000
 715                10000
 840                50000
 893               100000
...
1000               401000
1005               428000
1010               457000
1015               487000
1020               520000

Du musst also das regelnde Poti schon etwas über die Hälft aufdrehen um 
1kHz zu erreichen. Aber dann gehts schnell: Nicht ganz eine 
Vierteldrehung weiter bist du schon bei 10kH. Noch ein kleiner Tick mehr 
und du hast 100kHz etc.
Dafür hast du am anderen Ende des Potis den umgekehrten Effekt: So ruhig 
kannst du das Poti gar nicht verdrehen um da irgendeine sinnvolle 
Frequenz einstellen zu können. Davon dass man beim ADC mit einem Jitter 
von +/-1 eigentlich immer rechnen sollte, red ich mal gar nicht (ok, 
kann man durch heftiges Mittelwertbilden ev. wegkriegen)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich habe das jetzt nicht nach gerechnet, aber so könnte es gehen.

Achte aber auf ein vernünftiges Poti. Bei preiswerten habe ich gerade im 
Bereich der Anschläge ganz lustige Sachen erlebt. Evtl. solltest du eine 
'Hold'-Taste vorsehen, damit der eingestellte Wert stabil bleibt.

MfG Spess

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinerle schrieb:

>>> wie am schnellsten Port toggeln?
>>Per Output Compare.
>
> Brauche ich da keinen Timerinterrupt?
> Wie sieht das in C aus? Bin nicht so gut in C, übe noch :-)

Das geht in C genauso wie in Asm:
CTC Mode beim Timer aktivieren, und das passende OCRxx Bit setzen: Dann 
wird jedesmal wann ein Interrupt auftritt (egal davon ob dieser 
aktiviert ist oder nicht), der Zustand des ausgangspins geändert.

PS: Ich würde eine quadratische Kennlinie nehmen:
Frequenz=ADCwert²
So hat man bei kleinen Frequenzen eine gute Auflösung, und kann auch bei 
großen Frequenzen den Wert noch gut einstellen.

Karl heinz Buchegger schrieb:

> Dafür hast du am anderen Ende des Potis den umgekehrten Effekt: So ruhig
> kannst du das Poti gar nicht verdrehen um da irgendeine sinnvolle
> Frequenz einstellen zu können. Davon dass man beim ADC mit einem Jitter
> von +/-1 eigentlich immer rechnen sollte, red ich mal gar nicht (ok,
> kann man durch heftiges Mittelwertbilden ev. wegkriegen)

Das geht schon:
Ich habe mir vor längerer Zeit mal einen Funktionsgenerator mit einem 
tiny26 gebaut, bei dem man die Frequenz zwischen 50Hz und 1MHz 
einstellen kann. Dabei werden immer die vordersten beiden Stelle 
verstellt, also so:
50Hz, 51Hz, 52Hz, ... 99Hz, 100Hz, 110Hz, 120Hz, 130Hz, ... 970kHz, 
980kHz, 990kHz, 1MHz

Das ergibt ziemlich genau irgendwas um die 1024 Schritte.
Die kann ich reproduzierbar einzelne Frequenzen einstellen die über 
längere Zeit (ein paar Stunden) maximal um eine Stufe wegdriften.
Ok, da habe ich allerdings auch ordentlich gefiltert, Hysterese 
eingebaut usw.
Wichtig ist dabei auch ein großer Potiknopf und ein leichtgängiges Poti.

Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Benedikt K. (benedikt) (Moderator)

>Ich habe mir vor längerer Zeit mal einen Funktionsgenerator mit einem
>tiny26 gebaut, bei dem man die Frequenz zwischen 50Hz und 1MHz
>einstellen kann.

1.  ob man mal einen Blick auf deinen Code werfen könnte ;-)
2.  mir würde von der Frequenzauflösung vieleicht auch reichen, nur  die 
erste Stelle zu verändern, das währen dann
54 Werte
    von 1Hz bis 500kHz
3.  Kann man zwei verschiedene Frequenzen gleichzeitig erzeugen?

Autor: Heinerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ist das Feuerwerk schon abgebrannt?

Ich meine in den ersten halben Stunde 10 Antworten und jetzt nix mehr

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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.