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 ;-)
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.
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
@ 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?
warum nicht einfach einen bistabilen Generator mit 2 Transen bauen ? Oder auch mit nem 4093 ein R und ein C ?
@ 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 :-)
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.
@ 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.
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)
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
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.
@ 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?
Hm, ist das Feuerwerk schon abgebrannt? Ich meine in den ersten halben Stunde 10 Antworten und jetzt nix mehr
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.