Forum: Projekte & Code Sehr einfacher Sinusgenerator, Digitalelektronik Projekt


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.
von Dergute W. (derguteweka)


Angehängte Dateien:

Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

:-) 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.

von Georg M. (g_m)


Lesenswert?

Der 14-Pin AVR16DD14 hat einen 10-Bit-DAC. Vielleicht könnte man damit 
auch irgendwas Analoges erzeugen.

von 900ss (900ss)


Lesenswert?

Georg M. schrieb:
> hat einen 10-Bit-DAC

Er hat Jehova gesagt ;)

von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

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.

von Dergute W. (derguteweka)


Angehängte Dateien:

Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

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

von Th S. (osszilierer)


Lesenswert?

Herrlicher Aufbau,

ist das noch die alte Gummimatte die man vor 40Jahren bei Arlt kaufen 
konnte? Davon hab ich auch noch 2 Stück

von Dergute W. (derguteweka)


Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

lach, der große Elko ist mir gar nicht erst aufgefallen. Solche habe ich 
1000 Jahre lang nicht gesehen.

von Zino (zinn)


Lesenswert?

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.

von Michael B. (laberkopp)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

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 !

von Zino (zinn)


Lesenswert?

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

von Carsten-Peter C. (carsten-p)


Lesenswert?

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

von Dergute W. (derguteweka)


Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

:-) :-) :-) 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.

von Carsten-Peter C. (carsten-p)


Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

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.

von Rick (rick)


Lesenswert?

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
von Georg M. (g_m)


Lesenswert?

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.

von 900ss (900ss)


Lesenswert?

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
von Dergute W. (derguteweka)


Lesenswert?

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

von Ralph S. (jjflash)


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von Christoph M. (mchris)


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von Christoph M. (mchris)


Angehängte Dateien:

Lesenswert?

>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
von Dergute W. (derguteweka)


Lesenswert?

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
Noch kein Account? Hier anmelden.