Moin, Aus der nicht enden wollenden Reihe "DSP mit AVR", hier nun Folge 2206: Ein Sinusgenerator, dessen Frequenz per Steuerspannung eingestellt werden kann mit folgenden Features: * Frequenzbereich 10 Oktaven; ca. 16Hz..16kHz. * Steuercharakteristik ca. 0.11V / Octave. * Voellig Gluehlampen oder PTC freier Aufbau * DDS * 4bit SigmaDelta DAC * haarstraeubende Echtzeitprogrammierung * lustiges und hurtiges exponenzieren in Assembler Gruss WK
:-) du bist ein echter ATtiny13 Fan ! Natürlich habe ich das jetzt mal auf die Schnelle aufgebaut und bin erstaunt dass das relativ gut funktioniert (auch wenn mein Nutzen hierfür begrenzt ist). Aber ich mag solche Spielereien sehr. Leider wird der ATtiny13 gemessen an seinen Leistungsdaten immer teurer im Vergleich zur Tiny AVRseries0 und 1 und ich befürchte, dass der Preis da noch steigen wird (ich verwende den Tiny13 als Reset-Controller in eigenen STM32-Boards und ersetze diesen gerade durch ATtiny402 und ATtiny212). Aber, Hut ab, schönes kleines Projekt. Vllt. sollte man etwas Zeit investieren um den Tiefpassfilter um eine AGC zu erweitern, damit die Ausgangsamplitude halbwegs konstant bleibt. Daumen nach oben.
Der 14-Pin AVR16DD14 hat einen 10-Bit-DAC. Vielleicht könnte man damit auch irgendwas Analoges erzeugen.
Ralph S. schrieb: > damit die Ausgangsamplitude halbwegs konstant bleibt. Kurzfristig könnte man R1 auch noch ad-hoc durch einen 500R Trimmer, oder durch ein Poti ersetzen.
Moin, Danke fuers Feedback. Hier noch jeweils ein (schlechtes) Foddo vom real existierenden Aufbau und vom Sinus, wenn der ganze Tiefpasskrempel weg ist. Anundpfirsich sollte die Amplitude ueber die Frequenz eigentlich recht konstant bleiben. Hab' grad nochmal geguckt, bei mir ist die bei tiefen Frequenzen ca. 2.3Vss und bei max. Frequenz 2.5Vss. Da wird man sicher am Filter noch entsprechen drehen koennen, ums noch glatter zu kriegen. Den Fusspunkt des DACs koennte man auch auf +5V legen, dann den Vorspannungswiderstand R11 hochohmiger und damit den Pegel groesser machen zu koennen. Die Wahl der Bauteile ist sicher auch nicht optimal fuer ein Produkt in Serienfertigung. Das ist halt alles "Zeugs was grad da rumliegt". z.B war da noch ein Abschnitt mit 10x 3.3kOhm Widerstaenden mutmasslich aus irgendeinem Pollin-Widerstandssortiment aus dem letzten Jahrtausend :-) Gruss WK
Ich freue mich sehr, dass deinen Aufbau gezeigt hast. Vor allen Dingen deshalb, weil ich immer wieder für mir unterstellte schlechte Aufbauten xyz werde. Der Aufbau hier ist so herrlich (im positiven Sinne) quick and dirty und funktioniert dennoch. Vielen Dank
Herrlicher Aufbau, ist das noch die alte Gummimatte die man vor 40Jahren bei Arlt kaufen konnte? Davon hab ich auch noch 2 Stück
Moin, Th S. schrieb: > ist das noch die alte Gummimatte die man vor 40Jahren bei Arlt kaufen > konnte? Davon hab ich auch noch 2 Stück Kann gut sein. Es ist dieses Ding, da bin ich nach wie vor ein grosser Fan davon: Beitrag "Re: Gutes Steckboard?" Ralph S. schrieb: > Der Aufbau hier ist so herrlich (im positiven Sinne) quick and dirty und > funktioniert dennoch. Klar, der Dreh- und Angelpunkt ist halt das funktionieren... Waere anders, wenn ich jetzt jammern wuerde, dass da "ueberhauptnix funzt". > Vor allen Dingen > deshalb, weil ich immer wieder für mir unterstellte schlechte Aufbauten > xyz werde. Was kratzt es eine Eiche, wenn sich die Wildsaeue an ihr reiben? Und wenn man genau hinschaut, der ockergelbe Klecks oberhalb von Pin1 und Pin8 des AVR ist z.b. natuerlich ein 100n. Und auch die 1000µF (duerften aehnlich alt sein, wie die Gummimatte) sind da nicht so ganz zufaellig, denn die Billig-Krokoklemmenkabel wirken durch ihre Hochohmigkeit im Zweifelsfall kurzschlussstrombegrenzend, erhoehen aber doch den Innenwiderstand der Spannungsquelle ;-) Gruss WK
lach, der große Elko ist mir gar nicht erst aufgefallen. Solche habe ich 1000 Jahre lang nicht gesehen.
Der echte 2206 kann aber auch Dreieck und Rechteck, wenn ich mich recht erinnere. Gibt es diese Gummimatten noch irgendwo zu kaufen? Ich habe auch noch eine und erinnere mich mit Freuden an all die Wackelkontakte.
Dergute W. schrieb: > Ein Sinusgenerator, dessen Frequenz per Steuerspannung eingestellt > werden kann Nett. Als Ersatz für Phasenschieber und was man sonst so an schnell mal hingezimmerten Signalgeneratoren gebaut hat oder XR2206. Das stufige Ausgangssignal erinnert an https://www.ebay.de/itm/156405001101 die nutzen ein FPGA mit 8 bit Widerstands-DAC. Damit es piept, reicht das.
Zino schrieb: > Der echte 2206 kann aber auch Dreieck und Rechteck, wenn ich mich recht > erinnere. Aber der Sinus war beim XR2206 nicht "schön", entweder hat er am positiven Spitzenwert gepasst oder am negativen. An beiden nie !
Ralph S. schrieb: > Aber der Sinus war beim XR2206 nicht "schön", entweder hat er am > positiven Spitzenwert gepasst oder am negativen. An beiden nie ! Der wurde aus dem Dreieck berechnet. Neulich stolperte ich über eine angeblich verbesserte Methode dafür: https://till.com/articles/sineshaper/index.html
Moin, gefällt mir sehr gut. Bringt es was, das R2R auf 6 oder 8 Bit mit einem z.B. ATtiny84 zu erweitern? Der hätte dann auch einen 16 Bit Timer für die Frequenz. Tolles Projekt. Gruß Carsten
Moin, Zino schrieb: > Der echte 2206 kann aber auch Dreieck und Rechteck, wenn ich mich recht > erinnere. Ist nicht verboten, die 256 Byte mit Sinussamples in dem Flashimage durch 256 Bytes mit Samples einer anderen Kurvenform zu ersetzen. Ist auch nicht verboten, µCs mit mehr Flash und mehr Pins zu nehmen, und das umschaltbar zu machen :-) > Gibt es diese Gummimatten noch irgendwo zu kaufen? Wenn die noch hergestellt werden wuerden, wuerd ich mir glatt auch noch eine zulegen. Aber wahrscheinlich ist das Gummizeugs stark krebserregend oder klimaschaedlich, ich hab die Dinger schon seit zig Jahren nirgends mehr gesehen. Immer nur die ollen weissen mit den eingebauten Kontakten. Carsten-Peter C. schrieb: > Bringt es was, das R2R auf 6 oder 8 Bit mit > einem z.B. ATtiny84 zu erweitern? Naja schaden wuerde es wohl nicht - aber ob mehr als 6bit bei so einem roh zusammengezimmerten R2R an µC-IOs noch wirklich was bringen, da hab' ich so meine ganz starken Zweifel. > Der hätte dann auch einen 16 Bit Timer > für die Frequenz. Kannste auch machen und so ggf. die CPU entlasten - aber ob dir dann die Granularitaet der Frequenzvariation noch ausreicht ist die Frage. (Achtung, komisches Denglisch:)Hat in meiner Software schon einen Grund, warum ich den Interrupthandler in die main-loop geinlined habe. Aber ja: Da gibts zigtausend Moeglichkeiten so'n Ding besser zu bauen. :-) Gruss WK
:-) :-) :-) habe ich mir gerade den Quellcode näher angesehen und ich hatte zuerst einen Kommentar nicht verstanden:
1 | ; equal goes it loose |
... bis ich es verstanden habe ! Das wird fälschlicherweise ja Heinrich Lübke zugesprochen (Erfindung der Spiegel-Redaktion). Ein weiteres wäre: "that makes me nobody so quickly after" --------------------------------------- Hm, vllt. solltest du noch darauf hinweisen, dass die Fuses des Tiny auf 9,6 MHz zu setzen sind ?!? Auch überrascht bin ich, dass du zum Flashen einen usbtiny verwendest. --------------------------------------- Verrückt ist: Um meine schon Urzeiten im Schrank liegenden ATtiny2313 zu "verballern" ist gerade eine PCB bei jlcpcb von mir in Auftrag (von daher beschäftige ich mich auch gerade damit) ... und noch etwas verrückter: Auch ich bin gerade dabei, einen sehr einfachen Sinusgenerator zu basteln, der aber mit einem PFS154 oder PFS122 werkeln soll. Bisher hatte ich meine Versuche für einen Sinusgenerator darauf abgestellt gehabt, das über Schiebebefehle zu realisieren. Um ehrlich zu sein: Habe ich mir überlegt, bei dir abzukupfern und das auf Padauk umzusetzen.
Moin, der 2313 hat leider keinen ADC. Ich hätte da eine andere Idee: Mit einem ATtiny 84 könnte man mit dem Timer 0 im Fast PWM Mode3 ein PWM Signal auf PB2 ausgeben und mit einem TP glätten. Das würde das R2R ersetzen. Mit einem 16Mhz Takt hätte man 62,5 KHz. Der Wert im Register OCR0A würde die Ausgangsspannung bestimmen. Mit dem 16 Bit Timer1 im CTC Mode4 würde man einen Timer/Counter1 Compare Match A Interrupt erzeugen. Frequenzbestimmend ist das OCR1A und der Prescaler, das vom Wert des ADC in der ISR gesetzt wird. Ich habe nichts getestet, es ist nur ein Gedankenspiel. Gruß Carsten
Carsten-Peter C. schrieb: > Mit einem > ATtiny 84 könnte man mit dem Timer 0 im Fast PWM Mode3 ein PWM Signal > auf PB2 ausgeben und mit einem TP glätten. Erstens wäre es dann kein ATtiny13 mehr und zweitens stellt ein mit PWM erstellte Sinusschwingung deutlich größere Anforderungen an das TP als es ein R2R Netzwerk erfordert. Noch "einfacher" wäre es, einen ATtiny Series 1 zu nehmen (bspw. ATtiny816) und dort den DAC zu nutzen... aaaaaber: dann wäre es ja keine Herausforderung mehr an den Minimalismus.
Carsten-Peter C. schrieb: > Ich habe nichts getestet, es ist nur ein > Gedankenspiel. Das hat hier jemand umgesetzt (1 Hz bis 5 kHz): http://www.technoblogy.com/show?20W6 Aber das Prinzip des voltage-controlled-DDS von Weka lässt sich leichter auf andere Plattformen portieren. Ralph S. schrieb: > Hm, vllt. solltest du noch darauf hinweisen, dass die Fuses des Tiny auf > 9,6 MHz zu setzen sind ? Das macht schon der ASM-Code (0x26 = CLKPR):
1 | ldi r22,0x80 |
2 | out 0x26,r22 |
3 | out 0x26,r0 ; switch to 9.6MHz clk |
Ergänzung: Ralph S. schrieb: > und zweitens stellt ein mit PWM > erstellte Sinusschwingung deutlich größere Anforderungen an das TP als > es ein R2R Netzwerk erfordert. Ein paar Tinys haben eine high-speed-PWM, die mit 64 MHz arbeitet. Diese hohe Frequenz läßt sich gut wegfiltern. Anders wäre es mit der 'normalen' PWM, wo man nur um die 20 bis 30 kHz Samplerate hat.
:
Bearbeitet durch User
Ralph S. schrieb: > keine Herausforderung mehr an den Minimalismus Minimalismus bedeutet so wenig Bauteile wie möglich. Naja, wer gerne lötet, kann natürlich seine eigenen Vorstellungen haben.
Georg M. schrieb: > Minimalismus bedeutet so wenig Bauteile wie möglich. Für dich, es mag aber auch andere Schwerpunkte des Minimalismus geben. Bei dir sind die Bauteile halt im AVR16DD14 versteckt. Und es mit einem integrierten DAC zu machen ist für mich auch kein Minimalismus.
:
Bearbeitet durch User
Moin, Ralph S. schrieb: > Hm, vllt. solltest du noch darauf hinweisen, dass die Fuses des Tiny auf > 9,6 MHz zu setzen sind ?!? Ja, wie schon von rick ausgefuehrt: Die Software schaltet sich schon selber auf 9.6MHz. Die Fuses hab' ich bei den Bausteinen nicht angefasst, d.h. die sollten so sein, wie sie bei Auslieferung sind. > Auch überrascht bin ich, dass du zum Flashen einen usbtiny verwendest. Ich hab's auch schon mit einem Hammer versucht, aber die Erfolgsrate ist mit dem usbtiny ungleich hoeher :-) Was stimmt nicht mit dem usbtiny? Nachdem sich die libusb-0.firlefanz hat bauen lassen (siehe Nachbarthread), ist hier wieder alles im Lot... Ralph S. schrieb: > Um ehrlich zu sein: Habe ich mir überlegt, bei dir abzukupfern und das > auf Padauk umzusetzen. Nur zu, ich hab' weder DDS noch R2R/SD-Wandler noch sonst irgendwas selbst erfunden und mit Patent versehen. Also: Happy coppering, wie Herr Luebke gesagt haben haette koennen. Gruss WK
Dergute W. schrieb: > Was stimmt nicht mit dem usbtiny? Nachdem sich die libusb-0.firlefanz > hat bauen lassen (siehe Nachbarthread), ist hier wieder alles im Lot... :-) :-) alles grün !! Ich war nur etwas "verwundert". Gute Leute (und da zähle ich dich dazu) schreien doch sonst immer (und da zähle ich dich nicht dazu) Igitt, VUSB, kein Debug blablabla. Ich habe selbst usbtiny, usbasp und ein Eigenbau stk500v2 (via Uart2Usb-Bridge) und meistens Bootloader (was beim ATtiny13 nun wirklich schwierig ist). Ich finds gut, dass da "jemand" ist, der das ähnlich sieht wie ich: genommen wird, was funktioniert.
Moin, Ralph S. schrieb: > Ich war nur etwas "verwundert". Gute Leute (und da zähle ich dich dazu) > schreien doch sonst immer (und da zähle ich dich nicht dazu) Igitt, > VUSB, kein Debug blablabla. Dangedange. Ich sag' ja immer: Wenn man keine Fehler reinbaut, muss man auch nicht debuggen ;-) Tatsaechlich hatte ich Massel und das Dingens hier lief ziemlich auf Anhieb. Da war ein Oopsie im SigmaDelta-Bereich (davon ist noch das nop uebrig) und eines mit der "Umschaltung" der beiden Lookuptables. Konnte man per Scope debuggen. Die Exponenziererei lief lustigerweise ootb. Fuer diese Schnapsidee: Beitrag "Schnapsidee: MoppedLichtmaschinenRegler" fuerchte ich, waere eine Debugmoeglichkeit vielleicht nicht schlecht. Hat aber wie ueblich keine Eile, mir fehlt eh noch die (rechtzeitig Thyristoren-)zuendende Idee fuer's Timing. > Ich habe selbst usbtiny, usbasp und ein Eigenbau stk500v2 (via > Uart2Usb-Bridge) und meistens Bootloader (was beim ATtiny13 nun wirklich > schwierig ist). Das sieht hier schon ein paar Nummern kleiner aus: Einmal fliegt hier noch so'n ziemlich altes AVR-Evalboard vom Pollin rum, da braucht's aber eine "richtige" Serielle zum programmieren und dann halt der auf Lochraster zusammengedengelte usbtiny, dessen AVR damals mit dem Evalboard programmiert wurde. Aber ich mach' auch nicht soviel mit dem Zeugs, als dass sich da Vornehmeres lohnen wuerde. Gruss WK
Eine Frage zum R2R DAC: Laut dieser Seite lässt man den letzten 2R Widerstand weg: https://praktische-elektronik.dr-k.de/Praktikum/Digital/Le-R2R-Wandler-Details.html Um es zu testen habe ich einen R2R DAC aufgebaut (nicht mit dem Attiny und ohne Transistorverstärker) und tatsächlich beim Weglassen des 2R gegen +5V die volle Amplitude erhalten.
Moin, Christoph M. schrieb: > Laut dieser Seite lässt man den letzten 2R Widerstand weg: Ich glaube nicht, dass die da was weglassen. Die beweisen "nur" dass beliebig "breite" R2R Wandler prinzipiell funktionieren. Gruss WK
>Ich glaube nicht, dass die da was weglassen. Die beweisen "nur" dass >beliebig "breite" R2R Wandler prinzipiell funktionieren. In dem Bild ist Ua ohne 2R. Deine Schaltung wird die 2R wohl brauchen, weil der Transistor einen Offset braucht. Du kannst die Ausgangsspannung an R10 messen, die bleibt weit von 0V weg.
:
Bearbeitet durch User
Moin, Ah, axo, so ist's gemeint. Der R11 in meinem Schaltbild gehoert nicht zu dem R2R Wandler, der ist tatsaechlich dazu da, um den Arbeitspunkt des Transistors "einzustellen". Wie ich schon weiter oben schrub, koennte man auch den R7 nach +5V statt nach GND verschalten, dann koennte man den R11 hochohmiger machen und haette beim selben Arbeitspunkt mehr "Wumms". Es war halt schon auf dem Gummibrettchen so verdrahtet... Gruss WK
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.