Forum: Mikrocontroller und Digitale Elektronik Analoge ADSR Hüllkurve mit microcontroller state machine


von lois (Gast)


Lesenswert?

Vielleicht ist die Idee völliger Blödsinn und ich kann deshalb nichts 
dazu finden, aber ich frag mich, ob sich nicht ein relativ simpler 
ADSR-Generator realisieren ließe, bei dem die einzelnen Phasen durch 
Laden und Entladen mit Potis und einem Kondensator stattfinden, aber ein 
Controller sozusagen eine State Machine darstellt, die zwischen den 
Phasen umschaltet.

Was ich finde, sind entweder rein analoge Schaltungen, die einigermaßen 
aufwändig sind, meist auf 7555er Basis oder rein digitale mit 
DA-Wandler.

Hab noch keine präzise Vorstellung, aber ich dachte grob, ein attiny 85 
oder sowas müsste gehen, bei dem der ADC das Spannungslevel auf dem 
Kondensator misst und entprechend auf die anderen Potis umschaltet um 
die Spannungzu halten bzw. auf Entladung umzuschalten.

Meine Befürchtung ist, dass ich soviel Puffern muss um die IO-Pins zu 
schützen und jede Menge Dioden brauche, dass es am Ende genauso 
aufwändig wird wie die rein analogen Schaltungen.

von ... (Gast)


Lesenswert?

Fuer einen simplen ADSR braucht es ein paar 4000er
und eben ein wenig *analoge" Schaltungstechnik.
Mehr nicht.

von lois (Gast)


Lesenswert?

Ok...vielleicht besser als Frage formuliert :)

Ist es total abwegig so etwas zu bauen? Falls nicht, gibt es irgendwo 
vergleichbare Schaltungen, an denen man sich orientieren könnte?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

lois schrieb:
> Was ich finde, sind entweder rein analoge Schaltungen, die einigermaßen
> aufwändig sind, meist auf 7555er Basis oder rein digitale mit DA-Wandler.
Und was ist jetzt dein Plan? Warum meinst du, dass etwas, was mit einem 
555 nach deinem Gefühl schon kompliziert ist, dann mit einem µC 
einfacher sein könnte?
Und wenn schon ein µC in der Schaltung drin ist, dann ist der 
eigentliche Witz, dass man mit diesem beliebige zeitliche Abläufe 
generieren, speichern und auf Knopfdruck exakt gleich wieder abrufen 
kann.
So einen ADSR-Generator hätte sich Robert Moog gewünscht...

> Hab noch keine präzise Vorstellung
> ...
> Meine Befürchtung ist
Ich würde mal sagen, du solltest deine Vorstellung konkretisieren und 
dann können wir auf mögliche Probleme eingehen.
Aber derzeit ist es, wie wenn du befüchtest überfahren zu werden, obwohl 
dein Plan eigenlich nur ist, beim Bäcker gegenüber Brötchen zu holen.

von lois (Gast)


Lesenswert?

mir ist schon klar, dass ich mit dem Ansatz nicht wirklich die Vorteile 
eines µC ausnutze und "sooooo kompliziert" finde ich die 
555er-Schaltungen jetzt auch nicht. Ich will auch nicht irgendwas 
überlegenes bauen. Es ist nur so ein Gedanke der mir kam (unausgereift 
und naiv) und ich hab noch nix dazu gefunden.

von Peter D. (peda)


Lesenswert?

lois schrieb:
> bei dem die einzelnen Phasen durch
> Laden und Entladen mit Potis und einem Kondensator stattfinden, aber ein
> Controller sozusagen eine State Machine darstellt, die zwischen den
> Phasen umschaltet.

Was soll denn dann der MC machen, wenn doch alles wieder analog sein 
soll?
Wie willst Du den MC steuern, d.h. die einzelnen Zeiten eingeben?

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Da fällt mir mein altes Elektor-Piano ein. Der Hüllkurvengenerator war 
ein spezieller Chip für je eine Oktave.
https://datasheetspdf.com/pdf-file/547503/GeneralSemiconductor/AY11320/1
https://www.elektormagazine.de/magazine/elektor-197809/56522
von 1978. Anschlagdynamik rein analog mit Kondensator-Entladekurve.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

So ausm Bauch raus wuerd' ich mal mutmassen, dass es mittels eines 
Attiny, oder vergleichbarem, locker moeglich sein sollte, den kompletten 
Huellkurvengenerator nachzubilden. Ausgang halt ueber was PWM artiges, 
mit noch 1-2 RCs als Tiefpassfilter. Einstellen der Parameter z.b. ueber 
seriell oder i2c-artig oder spi-artig.
Also:
 1 Pin Eingang; Taste gedrueckt oder nicht
 2 Pins I/O: Config interface
 1 Pin PWM Ausgang
Fertsch.

Gruss
WK

von lois (Gast)


Lesenswert?

Peter D. schrieb:
> lois schrieb:
>> bei dem die einzelnen Phasen durch
>> Laden und Entladen mit Potis und einem Kondensator stattfinden, aber ein
>> Controller sozusagen eine State Machine darstellt, die zwischen den
>> Phasen umschaltet.
>
> Was soll denn dann der MC machen, wenn doch alles wieder analog sein
> soll?
> Wie willst Du den MC steuern, d.h. die einzelnen Zeiten eingeben?

die Zeiten werden schon analog durch 4 Potis gesetzt, die den Ladestrom 
des Kondensators steuern. Der Controller soll zwischen verschiedenen 
Lade-/Enladekreisen hin und her schalten. Und an seinem ADC soll er die 
Spannungen messen um zu wissen, wann er umschaltet. Außerdem geht das 
Gatesignal an den Controller um ihn entsprechend anzuweisen, wann attack 
beginnt und sustain endet.

von lois (Gast)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> So ausm Bauch raus wuerd' ich mal mutmassen, dass es mittels eines
> Attiny, oder vergleichbarem, locker moeglich sein sollte, den kompletten
> Huellkurvengenerator nachzubilden. Ausgang halt ueber was PWM artiges,
> mit noch 1-2 RCs als Tiefpassfilter. Einstellen der Parameter z.b. ueber
> seriell oder i2c-artig oder spi-artig.
> Also:
>  1 Pin Eingang; Taste gedrueckt oder nicht
>  2 Pins I/O: Config interface
>  1 Pin PWM Ausgang
> Fertsch.
>
> Gruss
> WK

ok, wenn das geht. Hat immerhin genug ADC-Ports um 4 Potis zu messen. 
Ich war davon ausgegangen, dass ich schon mindestens einen DAC-IC 
gebraucht hätte und auch einen Quarz.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

lois schrieb:
> Hat immerhin genug ADC-Ports um 4 Potis zu messen.
Das hatte ich jetzt nicht mal aufm Schirm, ich ging davon aus, die Werte 
ueber das Config interface in den Baustein zu schreiben. Dann wuerde das 
mit so'nem 8-Fuessler gehen. Wenn du wirklich 4 Potis anschliessen 
willst, muss es wahrscheinlich ein Baustein mit mehr als 8 Beinchen 
sein.

> Ich war davon ausgegangen, dass ich schon mindestens einen DAC-IC
> gebraucht hätte und auch einen Quarz.
Quarz nur, wenn die Zeiten wirklich quarzstabil sein muessen. Und DAC - 
naja, klar kann man machen, ich wuerd' davon ausgehen, dass es per 
SigmaDelta oder von mir aus auch PWM ausreichend gut werden koennte. 
Also ohne extra DAC.

Aber ich schwaetz grad nur dumm daher, hab sowas noch nicht tatsaechlich 
gebaut.

Gruss
WK

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

lois schrieb:
> dass ich schon mindestens einen DAC-IC gebraucht hätte
Ja, so einer mit 6 Pins für nen Euro vom Schlage eines MCP4726 reicht da 
locker aus. Mit PWM würde ich das nicht machen, weil die unnötig 
hochfrequent sein muss, damit nicht irgendwelche Modulationseffekte 
auftreten.

> und auch einen Quarz.
Wozu? Das Timing wird ja eh "nach Gehör" eingestellt.

von lois (Gast)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> lois schrieb:
>> Hat immerhin genug ADC-Ports um 4 Potis zu messen.
> Das hatte ich jetzt nicht mal aufm Schirm, ich ging davon aus, die Werte
> ueber das Config interface in den Baustein zu schreiben. Dann wuerde das
> mit so'nem 8-Fuessler gehen. Wenn du wirklich 4 Potis anschliessen
> willst, muss es wahrscheinlich ein Baustein mit mehr als 8 Beinchen
> sein.

ADC0-ADC3 für die Potis und PB0 und PB1 für Gate-Input und PWM-output. 
Oder was überseh ich? Klar, einen DAC krieg ich dann mit dem 8-Beiner 
natürlich nicht mehr angesteuert.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

lois schrieb:
> ADC0-ADC3 für die Potis und PB0 und PB1 für Gate-Input und PWM-output.
> Oder was überseh ich? Klar, einen DAC krieg ich dann mit dem 8-Beiner
> natürlich nicht mehr angesteuert.
Wo war jetzt die Anforderung, dass das mit einem 8-beinigen µC gehen 
muss.

Oder andersrum: wer Platz für 4 Potis hat, der hat auch Platz für z.B. 
einen Tiny84 im 14er-SO Gehäuse. Das ist kleiner als ein alter 555 im 
DIL-Gehäuse. Und die "ich hab zu wenig Ports" Diskussion ist unnötig.

von lois (Gast)


Lesenswert?

Lothar M. schrieb:
> lois schrieb:
>> ADC0-ADC3 für die Potis und PB0 und PB1 für Gate-Input und PWM-output.
>> Oder was überseh ich? Klar, einen DAC krieg ich dann mit dem 8-Beiner
>> natürlich nicht mehr angesteuert.
> Wo war jetzt die Anforderung, dass das mit einem 8-beinigen µC gehen
> muss.

hatte eingangs den Attiny 85 erwähnt. Harte Anforderung ist das nicht, 
aber ich hab davon ein paar rumliegen.

von Axel S. (a-za-z0-9)


Lesenswert?

lois schrieb:
> mir ist schon klar, dass ich mit dem Ansatz nicht wirklich die
> Vorteile eines µC ausnutze und "sooooo kompliziert" finde ich die
> 555er-Schaltungen jetzt auch nicht. Ich will auch nicht irgendwas
> überlegenes bauen. Es ist nur so ein Gedanke der mir kam (unausgereift
> und naiv) und ich hab noch nix dazu gefunden.

Ah ja. Dir war also langweilig und du dachtest dir, uns wäre auch allen 
langweilig und hast deswegen deine unausgegorene Idee ins Forum gerotzt.

Habe ich das so richtig verstanden?

lois schrieb:
> hatte eingangs den Attiny 85 erwähnt. Harte Anforderung ist das nicht,
> aber ich hab davon ein paar rumliegen.

Ja, das paßt ins Bild.

von lois (Gast)


Lesenswert?

Axel S. schrieb:
> lois schrieb:
>> mir ist schon klar, dass ich mit dem Ansatz nicht wirklich die
>> Vorteile eines µC ausnutze und "sooooo kompliziert" finde ich die
>> 555er-Schaltungen jetzt auch nicht. Ich will auch nicht irgendwas
>> überlegenes bauen. Es ist nur so ein Gedanke der mir kam (unausgereift
>> und naiv) und ich hab noch nix dazu gefunden.
>
> Ah ja. Dir war also langweilig und du dachtest dir, uns wäre auch allen
> langweilig und hast deswegen deine unausgegorene Idee ins Forum gerotzt.
>
> Habe ich das so richtig verstanden?

Ganz genau! Und du bestätigst die Annahme vollkommen, wie man sieht.

von ... (Gast)


Lesenswert?

Er koennte ja einen Z80 nehmen. Da kann er dann mit einer CTC
einen Systimer laufen lassen, und mit einigen PIOs und DACs
die ADSR-Werte ausgeben.

So hat das z.B. Korg in seinen fruehen polyphonen Synthies auch
gemacht. Kann also nicht ganz verkehrt sein.

von Dergute W. (derguteweka)


Lesenswert?

... schrieb:
> Er koennte ja einen Z80 nehmen. Da kann er dann mit einer CTC
> einen Systimer laufen lassen, und mit einigen PIOs und DACs
> die ADSR-Werte ausgeben.

Und waehrend Villabajo noch Busse routet und loetet, dudelt Villariba 
schon ein Liedchen...

SCNR,
WK

von ... (Gast)


Lesenswert?

> SCNR

Immerhin hatte ich schon ganz am Anfang auf ein paar
gut ausgewaehlte 4000er verwiesen.
Damit waere das, inklusive Schaltungsentwurf, bereits
fertig gewesen.
Aber das scheint ja heute wohl zu einfach zu sein.

von lois (Gast)


Lesenswert?

mannmannmann, diese Engstirnigkeit immer hier. Ist das 'ne Kirche? 
Katechismus? Da wundert ihr euch, dass ihr eine Zielscheibe für Trolle 
bietet

von M.A. S. (mse2)


Lesenswert?

lois schrieb:
> Hab noch keine präzise Vorstellung, aber ich dachte grob, ein attiny 85
> oder sowas müsste gehen, bei dem der ADC das Spannungslevel auf dem
> Kondensator misst und entprechend auf die anderen Potis umschaltet um
> die Spannungzu halten bzw. auf Entladung umzuschalten.

Klar geht das irgendwie. Man könnte alle digitalen Komponenten sowie die 
Komparatoren (einen uC vorausgesetzt, der welche hat - den ADC würde ich 
dazu nicht bemühen) könnten vom uC erschlagen werden. Man bräuchte 
ausserdem immer noch einen OP und drei Analogschalter.

von Sven D. (sven_la)


Lesenswert?

Hallo TO
hast du dir schon https://github.com/m0xpd/ADSRduino angeschaut?

von M.A. S. (mse2)


Lesenswert?

Ergänzung zu meinem Beitrag:
nach kurzem Blick ins Datenblatt hätte mir der attiny85 genau einen 
IO-Pin zu wenig. Schade, einen Komparator hat er, bei dem man den 
N-Eingang muxen kann, daran wäre es nicht gescheitert.

von lois (Gast)


Lesenswert?

Sven D. schrieb:
> Hallo TO
> hast du dir schon https://github.com/m0xpd/ADSRduino angeschaut?

das genau nicht, aber was ähnliches. Mit dem MCP 4822 hab ich mal einen 
LFO gebaut, mit so 'ner Art wavetable. Das Prinzip ließe sich vmtl. auch 
auf einen ADSR übertragen. Aber ich wollte eigentlich ohne DAC-Chip 
auskommen. Aber vielleicht lass ich's mit meiner Schnappsidee lieber und 
bleib konventionell unterwegs.

von Axel R. (axlr)


Lesenswert?

http://m0xpd.blogspot.com/2017/02/signal-processing-on-arduino.html
Bau das doch. Ist total einfach und funktioniert. Erfüllt alles, was du 
wolltest, wenn auch anders, als du es bauen wolltest.

von xyz (Gast)


Lesenswert?

> signal-processing-on-arduino

Die besten ADSRs lassen sich mit FPGAs bauen.
Wenn es sein muss, auch einige hundert davon (oder noch ein paar mehr).
Und präzise bis auf die Nanosekunde und das letzte Bit!

Warum sollte man sich mit weniger zufriedengeben.

von lois (Gast)


Lesenswert?

Axel R. schrieb:
> http://m0xpd.blogspot.com/2017/02/signal-processing-on-arduino.html
> Bau das doch. Ist total einfach und funktioniert. Erfüllt alles, was du
> wolltest, wenn auch anders, als du es bauen wolltest.

ist ähnlich wie von Sven vorgeschlagen. Das Prinzip hatte ich aber auch 
schon selbst auf dem Schirm. Wird wohl auch drauf hinauslaufen. Nur mit 
dem 8-Beinigen AVR wird es dann leider nix mit DAC ansteuern und 
gleichzeitig die Potis auslesen.

von middag (Gast)


Lesenswert?

Lothar M. schrieb:
> lois schrieb:
>> dass ich schon mindestens einen DAC-IC gebraucht hätte
> Ja, so einer mit 6 Pins für nen Euro vom Schlage eines MCP4726 reicht da
> locker aus. Mit PWM würde ich das nicht machen, weil die unnötig
> hochfrequent sein muss, damit nicht irgendwelche Modulationseffekte
> auftreten.

wenn's nötig ist um Modulationseffekte zu vermeiden ist es ja nicht 
unnötig :-D. Ist das denn so ein Problem hier?

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.