Forum: Mikrocontroller und Digitale Elektronik Programmable Waveform Generator


von Maxim B. (max182)


Lesenswert?

Guten Tag!
Ich habe eine Frage:
Es gibt heutzutage IC-Serie von AD, so wie AD9833. IC kann zwar Sinus 
ausgeben, dafür gibt es ROM mit Sinus und DAC, in IC integriert.
Leider ist Sinus in ROM fest programmiert.

Gibt es etwa ähnliche IC, wo auch die Möglichkeit besteht, Inhalt von 
Sinus-ROM genauso zu programmieren wie Frequenz? Z.B. per SPI.

Z.B. gängige LCD haben die Option, 8 Zeichen frei zu programmieren.
So etwas möchte ich gerne für Signalausgang bei AD9833: statt Sinus 
etwas anderes, nach Eigenbedarf

Danke für Antwort.

von Hp M. (nachtmix)


Lesenswert?


von Maxim B. (max182)


Lesenswert?

Danke. Ja, so etwas.
Aber diese kann ich nicht löten. Paßt leider nicht.
Alles anderes genau wie ich möchte :)

von ChrisMicro (Gast)


Lesenswert?

>Aber diese kann ich nicht löten.
Hier gibt es ein Evalutaion-Board:
http://de.farnell.com/analog-devices/ad9106-ebz/ad9106-dac-waveform-gen-eval-board/dp/2254961

von Maxim B. (max182)


Lesenswert?

499,59 €
Vielen Dank! Wenn ich 6 oder 8 brauche... Für Freizeit-Hobby etwas zu 
teuer...

Ich brauche etwas Einfacheres. Eine IC, die möglich ist, zu Hause zu 
löten. D.h. "e" nicht kleiner als 0,8 mm - das kann ich noch relativ 
problemlos löten. Notfalls 0,65 mm. Wenn DIP nicht vorhanden ist.

Da ich die Ausgangsfrequenzen nicht über 20 kHz brauche, kann ich 
notfalls ein paar ATMega benutzen. Aber ich hoffe, es gibt eine schönere 
Lösung.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

In welchem Frequenzbereich suchst du denn? Bzw was kann dir der AD9833 
(und Konsorten) nicht bieten, was du genau suchst? Geht es nur darum die 
Sinustabelle anpassbar zu machen? - das ginge ansonsten mit einem 
externen Speicher (z.B. Einem EEPROM und einem direkt abgekoppelten 
AD-Wandler, welche dann extern synchronisiert getaktet werden. So als 
grobe Idee.

Edit: bis 20kHz?! Und welche Auflösung? Aber das können eigentlich fast 
alle gängigen AD-Wandler. Viele gibt es auch im 
grobmotorikerfreundlichen DIP Package. Und dann eben per Timer-Interrupt 
die gewünschte Sinus-Tabelle abarbeiten.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

AD9833 ist gut. Aber außer Sinus (und Dreieck) kommt nichts raus. Wenn 
ich aber etwas Musikalisches brauche, ist Sinus keine Lösung. ich 
brauche z.B. für Gedackt 8' so etwa wie 15% Sinus 8' + 25% Sinus 2 2/3' 
(d.h. dreifache Frequenz) + 15% Sinus 1 3/5' (fünffach). Das für eine 
grobe Annäherung. Oder für Prinzipal 8' brauche ich auch eine Mischung, 
mit etwas mehr Obertönen. Aber weder Sinus noch Dreieck.

Falls AD9833 statt Sinus-ROM RAM hätte, könnte ich bei dem 
Registerwechsel einfach neu ausgerechnete Tabelle aufschreiben.

Mir geht es um eine mobile Lösung für ein Orgelpositiv. Leider gibt es 
keine fertige Instrumenten zu haben. Viscount braucht Strom, ist auch 15 
kG schwer. Ich möchte gerne so etwas wie billige Yamaha-Keyboard haben, 
3,5 kG mit Batterien zusammen, aber statt Pop-Rock-Mist-Klang etwas 
Brauchbares schaffen. Es reicht, wenn so eine Orgel eine kleine 
Disposition hätte, z.B. 16', 8', 4', 2 2/3' und 1 3'5' Flöten, 4' und 2' 
Oktave/Prinzipal und evtl eine Mixtur (falls nicht zu aufwendig). Nur 
für Begleitung und kleine Vorspiele.
Zwei Bedingungen, die in jedem Fall angehalten werden sollten, sind: 
sehr leicht und Arbeit ohne Stromnetz.

Leider bringt AD9833 in diesem Fall mehr Aufwand als Hilfe. Falls nichts 
mit programmierbarer Wave-Tabelle zu finden ist, stelle ich einfach ein 
paar (z.B. 6, = max. gleichzeitig klingende Töne, 6 reicht) ATmega, mit 
noch einer ATmega als System per SPI oder per USART verbunden.

Vor vielen Jahren habe ich schon so etwas gemacht, aber viel größer. 2 
man. + Pedal. Dabei ging es mir um eine Modernisierung einer 
elektrischen Orgel aus 60-gen. D.h. genug Strom und viel Platz. 89C2051 
bediente Tastaturen und war mit einer 89C52 per MIDI verbunden. Zweite 
Einheit hat als Tongeneratoren 5 St. 8253 benutzt, danach Modulator mit 
4009 und weiter analog wie in Vorgänger-Orgel (Ziel der Modernisierung 
war: eine angemessene Intonation zu erreichen und sichere 
Tastenfunktion. Vorgänger-Orgel hatte 6 Kontakte pro Taste, die 
Schallfrequenz unmittelbar schalteten. Das arbeitete nie gleichzeitig, 
immer oxidierte und machte auch Nebengeräusche beim Spiel). Das alles 
arbeitet immer noch.

Nun brauche ich aber eine mobile Lösung, auch Mikrocontroller sind heute 
anders. Ich möchte dabei die Teile benutzen, die ich schon kenne. Keine 
eingebauten großen Computer oder völlig für mich neuen Mikrocontroller.

: Bearbeitet durch User
von Mostpfeife (Gast)


Lesenswert?

Ich wuerde eine App wie zB Audulus 3 empfehlen. Die kann das alles schon 
plus vieles mehr. fuer Android, iPad, Mac & PC
https://www.youtube.com/watch?v=b_tVNZgWgDw

von Maxim B. (max182)


Lesenswert?

Bitte keine Apps, keine Smartphone! Ich möchte eine Orgel!!! Eine Orgel 
ist ein Musikinstrument. Man spielt zwar damit, aber Musik, keine 
Computerspiele.
Ich möchte kein Smartphone!!!

Ich möchte etwas, was mit ca. max. 100 mA leben kann (ohne Verstärker 
natürlich). Das muß vor allem gut spielbar sein. Keine Menu (sehr 
wichtig!). Eingeschaltet - und gespielt. Keine Startzeiten über eine 
Sekunde! Tasten, Registerwippen - wie bei einer Orgel.

Ich habe schon eine Yamaha ausprobiert: die Tasten sind besser, als ich 
dachte. Für so eine Lösung muß man sowieso mit Einbüßen rechnen. Ich 
möchte Gehäuse, Tasten, Batteriefach von dieser Yamaha benutzen, nur 
Elektronik (außer Verstärker) rausschmeißen (dort unter hundert Klängen 
gibt es nur 2 oder 3 ungefähr etwas brauchbaren).

"Mehr" brauche ich auch nicht. Instrument soll exakt das machen, was ich 
von ihm möchte. Nicht etwa wie bei Microsoft-Programm. Na ja, drei 
MIDI-Buchsen müssen auch sein (IN, OUT und THRU). Aber kein Smartphone, 
soweit ich weiß, hat noch MIDI-Eingänge in normaler Größe eingebaut.

: Bearbeitet durch User
von R. F. (rfr)


Lesenswert?

Ein EPROM, ein CMOS-Counter, der auf die Adessleitungen geschaltet ist, 
und ein DA-wandler, der das in analoge Signale umsetzt.

Das Eprom wird mit deiner Waveform programmiert und wenn der Zähler 
gestartet wird, spielt die ab. Am Ausgang des Wandlers erhält man die 
gewünschte Analogspannung.

Fertich.

Aufwand: einige Euro.

Gruss

Robert

von Maxim B. (max182)


Lesenswert?

Ja, das wäre eine Lösung.
Aber das Gleiche kann ich mit nur einem Mikrocontroller machen. So keine 
Notwendigkeit, komplizierte PCB zu ätzen. Und viel kleiner alles.
Ich brauche das ja mindestens sechsmal!

Ich habe einfach gedacht: so etwas in PDIP20 oder SOIC20. Und so eine 
Lösung mit mehreren IC braucht recht viel Platz und Aufwand. Zwischen 
SRAM (nicht EPROM natürlich!) und Summator mit Register (nicht 
CMOS-Counter natürlich: sonst muß man noch irgendwo genaue 
Schallfrequenz bekommen!), aus 4-bit-Summator-IC zusammengesetzt, muß 
noch ein Multiplexer stehen (sonst wie kann ein Controller SRAM bei 
Datentausch adressieren?). Das alles resultiert sich (bei 20 bit 
Counter, das ist min. notwendig für genaue Stimmung) in mindestens 20 IC 
pro Kanal. Kaum noch tragbar. In einem Musikinstrument hat Elektronik 
praktisch nur Restplatz: Unter Tastatur, oder sonst wo noch etwas Platz 
bleibt...
Ich habe darüber schon viel gedacht und diese Variante als nicht 
tauglich verworfen.

Eine Zwischevariante möglich: mit AD9833 Taktsignal von Schallfrequenz x 
256 gewinnen, danach 2x 4bit-Counter und SRAM...

Jetzt habe ich gleich gesehen: AT 90PWM3B SOIC. Wäre das vielleicht eine 
Lösung? Sogar DAC 10 bit vorhanden - für AT 8 bit wohl eine Ausnahme. 
Es sieht zwar so aus, daß diese Mikrocontroller schon aus Programm 
genommen wurden und nur unlötbare Varianten bleiben - schade! 6x SOIC32 
- dafür ist viel einfacher, Platz zu finden, als für 120 DIP16 oder 
SOIC16.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

Schön, dass wieder einmal die eigentlichen nach und nach herausgerückt 
werden.

Aber irgendwie verstehe ich fast NICHTS von dem, was du geschrieben 
hast.
Du willst quasi den Inhalt einer Yamaha-Orgel rauswerfen und deine 
eigene Orgel bauen?!
Okay, kein Smartphone.

Maxim B. schrieb:
> Falls nichts
> mit programmierbarer Wave-Tabelle zu finden ist,

Doch natürlich - das habe ich doch schon geschrieben. Ein AD-Wandler, 
welcher aus einem Mikrocontroller Werte bekommt. Die Werte können dort 
nach Belieben hinterlegt werden und können Timer-gesteuert abgerufen 
werden.
Es reicht eine Look-Up-Table mit der entsprechend gewünschten 
Genauigkeit und es werden dann Interrupt-gesteuert die Klänge 
entsprechend synthetisiert. Für einen Klang, der aus der Grundwelle, der 
3ten, 5ten und 7ten Oberwelle besteht bräuchte man in diesem Falle 
einfach 4 Phasenakkumulatoren, welche mit den entsprechenden Faktoren 
multipliziert(x1, x3, x5 und x7) inkrementiert werden.

Mit den Phasenakkumulatoren liest man dann die zugehörigen Werte aus der 
Sinus-Tabelle aus und addiert sie mit der entsprechenden Gewichtung und 
gibt das Ergebnis auf dem AD-Wandler (externer AD-Wandler oder per PWM, 
beides möglich) aus.


Maxim B. schrieb:
> völlig für mich neuen Mikrocontroller.

Ja mit welchen uC bist du denn vertraut? - Hier wäre wohl ein DSP gar 
nicht mal so falsch am Werke, wenn du eine komplexe Klangsynthese 
betreiben willt.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Stefan S. schrieb:
> Ja mit welchen uC bist du denn vertraut? - Hier wäre wohl ein DSP gar
> nicht mal so falsch am Werke, wenn du eine komplexe Klangsynthese
> betreiben willt.

Vielleicht einen dsPIC - AFAIK gibt es die auch gleich mit 
Audio-tauglichem 16-Bit DAC on Board und in 
Grobmotoriker-lötfreundlichen Gehäuseformen...

von 1N 4. (1n4148)


Lesenswert?

Billiges FPGA-Board, DAC dran, Tasten dran, orgeln...

von Maxim B. (max182)


Lesenswert?

Ich habe letzte Zeit ATmega programmiert. Und zuerst möchte ich dabei 
bleiben: statt neue Familie zu erlernen, möchte ich zuerst ATmega 
wirklich kennen.

Stefan S. schrieb:
> Du willst quasi den Inhalt einer Yamaha-Orgel rauswerfen und deine
> eigene Orgel bauen?!
Ja, das scheint mir am vernünftigsten. Ich bekomme eine gar nicht so 
schlechte (wenn auch ohne Druckpunkt) Tastatur, Gehäuse mit 
Batterienfach, eingebaute Lautsprecher. Und das alles für nur 100 €! Und 
was für Musik nicht taugt - das muß natürlich weg. Meine Vorstellungen 
über Orgelklang sind anders, als die von Japanern.


> Doch natürlich - das habe ich doch schon geschrieben. Ein AD-Wandler,
> welcher aus einem Mikrocontroller Werte bekommt. Die Werte können dort
> nach Belieben hinterlegt werden und können Timer-gesteuert abgerufen
> werden.
Ich habe gedacht, es reicht Abtasten so etwa 40 kHz. In dieser Zeit kann 
ich möglicherweise sogar 2 oder 3 Stimmen bearbeiten. Ich muß zuerst 
üben. Programmieren zur Probe und hören, ob Ergebnis noch in brauchbaren 
für mich Grenzen bleibt.

> Es reicht eine Look-Up-Table mit der entsprechend gewünschten
> Genauigkeit und es werden dann Interrupt-gesteuert die Klänge
> entsprechend synthetisiert. Für einen Klang, der aus der Grundwelle, der
> 3ten, 5ten und 7ten Oberwelle besteht bräuchte man in diesem Falle
> einfach 4 Phasenakkumulatoren, welche mit den entsprechenden Faktoren
> multipliziert(x1, x3, x5 und x7) inkrementiert werden.
Ja, so etwa denke ich auch. Nur daß ich für eine Stimme nur einmal 
Phasenakkumulator verwenden möchte, und volle Klangspektrum durch 
Veränderungen in der Look-Up-Table machen. Das kann in Hauptprogramm in 
Hintergrung laufen. So etwa: SPI bekommt etwas von Steuereinheit, in 
Hauptprogramm wird gelesen, analysiert und entsprechend die 
Toneinstellungen geändert. Das alles in PWM-Ausgang. Dafür brauche ich 
AVRs, wo 64 MHz-PLL für PWM zu haben ist.
Mit Interrupts von einem anderen Timer, der von externen Frequenz 
gesteuert wird (um die Tonhöhe homogen zu haben, da bei fast allen AVR 
PLL nur von RC-Oszillator arbeiten kann), wird Phasenakku betrieben. 
Addieren, aus der Tabelle lesen, auf Amplitudenwert multiplizieren, 
genauso Attack - Release machen, und zu PWM-Ausgang. Wenn 10 bit PWM mit 
64 MHz Takt, das muß reichen.

Es scheint übrigens sinnvoll, nicht die volle n * 8bit-Breite zu nutzen, 
sondern die Tabelle auf 240 statt 256 zu beschränken: so lassen sich 
natürliche Quinten und Terzen leichter realisieren.

Die Synthesizer bekommen von Steuereinheit nur endgültige Frequenzwort, 
Tabellen für Schallwellen und Hüllkurveninfo. Das alles wird in 
Steuereinheit errechnet. So kann ich alles mögliche machen: verschiedene 
Stimmungen, Tonhöne abstimmen usw. Möglicherweise lohnt es sich, die 
Synthes-Kontroller mit Assembler zu programmieren: in C gibt es leider 
kein Datentyp für 24 bit, so wird zu viel Rechenleistung verschwendet.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

1N 4. schrieb:
> Billiges FPGA-Board, DAC dran, Tasten dran, orgeln...

Das ist Zukunftsmusik. Board selbst, Werkzeuge für Programmieren kaufen, 
neue IDE erlernen... Zu viel Aufwand. Irgendwann später.

Das ist ja nur Hobby. Ich kann dafür nur meine Restzeit investieren. Ich 
möchte mindestens eine Microkontrollerfamilie gut kennen. Besser als 
mehrere ein bißchen kennen.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

Warum fragst du nicht die Taster einzeln ab, welcher gedrückt wurde und 
synthetisierst dann den Ton?

Und warum willst du unbedingt nur einen Phasen-Akku? Dein Konzept habe 
ich noch irgendwie nicht so ganz verstanden... auch wozu du unbedingt 
eine 64MHz-PLL brauchst erschließt sich mir noch nicht vollends...

von c-hater (Gast)


Lesenswert?

Maxim B. schrieb:

> Da ich die Ausgangsfrequenzen nicht über 20 kHz brauche, kann ich
> notfalls ein paar ATMega benutzen.

Wieso nur notfalls? Bei 20kHz langweilt sich ein ATMega ja schon 
ziemlich. Das ist also definitiv eine Anwendung, für die ein ATMega als 
Zielsystem völlig OK wäre.

von Maxim B. (max182)


Lesenswert?

Stefan S. schrieb:

> Und warum willst du unbedingt nur einen Phasen-Akku? Dein Konzept habe
> ich noch irgendwie nicht so ganz verstanden...
Weil ich die Genauigkeit der Stimmung nicht schlechter als 0,1 cent 
brauche.
> auch wozu du unbedingt
> eine 64MHz-PLL brauchst erschließt sich mir noch nicht vollends...
Wenn Abtastfrequenz so um 40 kHz liegt, dann muß PWM-Frequenz deutlich 
darüber sein, im Verzerrungen zu minimieren. bei 64 MHz-PLL und 8 bit 
PWM wird PWM-Frequenz um 125 kHz sein (Phase Correct PWM Mode), 
Dreifaches von Abtastfrequenz. Das muß in Toleranzgrenzen bleiben (unter 
Berücksichtigung, daß die hochfrequente Obertöne nicht so hohe Amplitude 
haben).

von Maxim B. (max182)


Lesenswert?

c-hater schrieb:

> Wieso nur notfalls? Bei 20kHz langweilt sich ein ATMega ja schon
> ziemlich. Das ist also definitiv eine Anwendung, für die ein ATMega als
> Zielsystem völlig OK wäre.

Danke für Unterstützung!
Ich versuche's. Das braucht aber Zeit.
Mein Problem: ich habe ganz bestimmte Vorstellung über Klang einer 
Orgel. Vieles, was für anderen nicht zu Disposition steht, ist für mich 
zweitrangig (z.B. ich brauche keine 100% Imitation einer Orgel). Anderes 
ist für mich aber wichtig, worüber man oft gar nicht denkt (z.B. 
Orgelintonation. Das bestimmt die Fähigkeit einer Orgel, Gemeindegesang 
zu stützen. Das ist entscheidend für Qualität eines Orgelpositives). 
D.h. ich kann keine Muster finden, die ich nachahmen könnte. Nur 
einzelne Elemente, so wie Tastaturabfrage, MIDI-Implementierung  u.Ä.

Als Muster könnte ich Cantorum VI von Viscount nennen, aber das ist eine 
andere Klasse. Relativ gute Klangimitation, gute Tastatur mit 
Druckpunkt, aber leider 15 kG und Strom nur aus einer Steckdose. Das 
Instrument habe ich übrigens. Ich brauche aber eine leichte und mobile 
Alternative, und sehe nichts fertiges, leider...

: Bearbeitet durch User
von Jörg (Gast)


Lesenswert?

Warum nicht sowas:

http://www.samplerbox.org/ (Raspi-Sampler)

+ MIDI-Keyboard (oder Doepfer CTM64)

Die Samples nimmst Du direkt von einer Orgel, oder, wenn es schön 
"cheesy" sein voll, berechnest Du Dir in Audacity!?

von Jörg (Gast)


Lesenswert?

... und warum geht nicht

https://www.hauptwerk.com/

mit einem MiniITX Mainboard oder (leistungsfähigem) Intel NUC? Ganz 
bestimmt unter 15kg ;-)

von Stefan S. (chiefeinherjar)


Lesenswert?

Warum reitest du so auf der PWM herum? Nimm doch einfach einen externen 
AD-Wandler, die meisten lassen sich auch mit >1MHz SPI ansteuern und 
haben mehr als 8 Bit Auflösung.

Dann reichen nämlich wirklich 40kHz als Abtastfrequenz und dein ATMEGA 
langweilig sich zu Tode. Und die Filterung wird auch deutlich einfacher 
bis obsolet, je nach gewünschter Reinheit des Signals.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Und sonst nimmt man eben einen parallelansteuerbaren DAC, und klemmt ihn 
an ein externes Memory Interface. Das laesst sich dann als 16 bit 
ansprechen und laesst keine Wuensche mehr offen. Allerdings denke ich 
ein ATMega ist etwas auf der mageren Seite. Ein DSP haemmert die Samples 
per DMA raus, ohne zusaetzliche Rechenleistung zu beanspruchen.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

Sapperlot W. schrieb:
> Und sonst nimmt man eben einen parallelansteuerbaren DAC, und klemmt ihn
> an ein externes Memory Interface. Das laesst sich dann als 16 bit
> ansprechen und laesst keine Wuensche mehr offen.

Genau das habe ich weiter oben auch schon angesprochen. Aber er will ja 
- so mein Eindruck - die Klänge einzeln synthetisieren.
Aber warum kein DA-Wandler ran darf, verstehe ich nicht.

Das vorgestellte Konzept mit EEPROM und DA-Wandler ist eigentlich genau 
das, was der TO ursprünglich wollte. Ein IC, welches eine vorgegebene 
Sequenz aus einem ROM abspielt.

Aber vielleicht gibt es ja neuerliche Aspekte, die doch dagegen 
sprechen.

Sapperlot W. schrieb:
> Ein DSP haemmert die Samples per DMA raus, ohne zusaetzliche
> Rechenleistung zu beanspruchen.

Er will nur Controller, die er schon kennt. Nichts neues.

von c-hater (Gast)


Lesenswert?

Maxim B. schrieb:

> in C gibt es leider
> kein Datentyp für 24 bit

Wenn man tatsächlich Assembler kann, kann man auch so einen Datentyp für 
geistig minderbemittelte C-Compiler auch recht leicht selber 
bereitstellen.

Aber ich gebe zu: Ich wäre auch zu faul dazu und würde statt dessen C in 
den Wind schiessen und alles in Assembler machen. Hat nämlich noch viele 
andere Vorteile bezüglich der Performance. Insbesondere sobald 
Interrupts wirklich genutzt werden sollen/müssen ist man mit Asm immer 
weit im Vorteil.

Hier rächt sich die Minimalintelligenz eines C-Compilers. Und ihm von 
Hand auf die Sprünge zu helfen, ist sehr viel aufwendiger als den Kram 
gleich selber in Asm zu programmieren. Zumal die Asm-Variante auch noch 
bei der nächsten Version des Assemblers mit hoher Wahrscheinlichkeit 
funktionieren wird, wovon man bei einem C-Compiler nicht wirklich 
ausgehen kann...

von c-hater (Gast)


Lesenswert?

Maxim B. schrieb:

> Wenn Abtastfrequenz so um 40 kHz liegt, dann muß PWM-Frequenz deutlich
> darüber sein, im Verzerrungen zu minimieren.

Das ist ein klassischer Denkfehler. Nö: man muß einfach nur dafür 
sorgen, dass PWM-Frequenz==Abtastfrequenz ist und das Problem löst sich 
in ein mathematisches Nichts auf. Bzw.: reduziert sich auf das übliche 
Abtasttheorem. In einer Instanz.

Und ja: lustigerweise funktioniert das praktisch genauso gut, wenn die 
PWM-Frequenz von der Abtastfrequenz abweicht, zumindest so lange sie 
höher ist als diese...

OMG, gibt es hier überhaupt keine mathematische Kompetenz mehr?

Übrigens: ein Umsetzung eines PWM-DDS-Out mit kleinem 
Performance-Footprint habe ich hier selber schonmal gepostet. Sozusagen 
ein Abfallprodukt der Spielerei mit WS28xx-LEDs...

von Maxim B. (max182)


Lesenswert?

Danke an Alle für Ideen!
Ja, es gibt noch etwas zu überlegen... Viele Varianten, wirklich...
Ich lerne erst Inline-Assembler. ich kapiere noch nicht alles, braucht 
Zeit...

c-hater schrieb:
> Maxim B. schrieb:
>
>> Wenn Abtastfrequenz so um 40 kHz liegt, dann muß PWM-Frequenz deutlich
>> darüber sein, im Verzerrungen zu minimieren.
>
> Das ist ein klassischer Denkfehler. Nö: man muß einfach nur dafür
> sorgen, dass PWM-Frequenz==Abtastfrequenz ist
Und hier liegt leider das Problem: fast alle AVRs, die PLL haben, 
benutzen als Referenz für PLL RC-Generator und können PLL nicht von 
Quarz stützen. Eine Ausnahme soll AT90PWM3B sein, aber solange ich mit 
allem fertig bin, wird es sicher nicht mehr zu finden (das bringt 
unwohles Gefühl, auf Details zu setzen, deren Produktion ausläuft)... 
Und Stimmgenauigkeit kann nur Quarz geben. Deshalb sehe ich mit PWM nur 
die Lösung: CPU und PWM von PLL getaktet, Abtastfrequenz von einem 
externen Referenzgenerator (für alle CPU) mit Timer0 bestimmt. Aber dann 
sind natürlich PWM und Abtastfrequenz asynchron.

Was externe DAC betrifft: das wäre auch eine Lösung. Noch mehr: um 
Bit-Auflösung nicht zu verschlechtern, könnte ich Hüllkurve (und auch 
Intonieren) analog schaffen, mit Vref. Dafür brauche ich aber mehr AVRs, 
aber das ist wohl auch aus anderen Gründen besser, für jede klingende 
Stimme separate Mikrocontroller zu benutzen: die können langsamer 
getaktet werden, dadurch einige Probleme könnten vermieden werden... Nun 
ist das so zu überlegen, daß auch die Platte machbar bleibt (ich mache 
die selber).

Als Beispiel: AD7524 an PORTD einer ATmega88PA, für Hüllkurve 6 bit-DAC 
mit Widerstandarray  R-2R an PORTC (oder auch PWM, dafür reicht auch 
"normale" Fast-PWM ohne PLL). Kommunikation mit Steuereinheit per SPI 
(PORTB).

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

NB. ein RC-Oszillator mit PLL kann auch auf einen Quarz gelockt werden.

von Maxim B. (max182)


Lesenswert?

Leider nicht immer.
Z.B. ATtiny261A - ich habe nicht gefunden, wie CKSEL eingestellt sein 
muß, um PLL und Quarz zu ermöglichen.
Auf der S. 25 vom Datenblatt, Tabelle 6-1 - so etwas nicht vorgesehen, 
auch Figure 6-3 zeigt eine solche Möglichkeit nicht.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Jetzt hoert doch mal mit diesen Tinys auf. Durch ein paar Cents sparen 
gewinnt man gar nichts.
Die Synchronisation eines RC zu einem Quarz geschieht zB mittels Timer2, 
an dem ein Uhrenquarz haengt ... dieser Timer2 mit low power clock ist 
glaub nur bei den Mega vorhanden. Naja. Also man laesst von diesem Clock 
N Zyklen vergehen, und vergleicht mit einem Timer vom RC gespiesen. zB 
Timer0, oder Timer1. Und regelt so den RC Oszillator nach.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

Maxim B. schrieb:
> um
> Bit-Auflösung nicht zu verschlechtern, könnte ich Hüllkurve (und auch
> Intonieren) analog schaffen, mit Vref. Dafür brauche ich aber mehr AVRs,

Was? Warum das? - Wenn du schon unbedingt die Auflösung beibehalten 
willst bzw. die Hüllkurve nicht in Software machen willst, so kannst du 
mit einem DAC die Referenzspannung des anderen DAC modulieren.

von Maxim B. (max182)


Lesenswert?

Sapperlot W. schrieb:
> Jetzt hoert doch mal mit diesen Tinys auf.
Welche Mega mit PLL könntest du mir empfehlen?

von m.n. (Gast)


Lesenswert?

Maxim B. schrieb:
> Weil ich die Genauigkeit der Stimmung nicht schlechter als 0,1 cent
> brauche.

Dann nimm einen 'Orgelratenquarz' und bleibe bei reiner Stimmung ;-)

Ohne Alles genau gelesen zu haben, wie wäre es, einen schnellen µC zu 
nehmen, der diverse Klangfarben als Tabellen im ROM gespeichert hat. Per 
DMA ausgegeben stimmt das Timing auch während der µC andere Aufgaben 
(Tastatur einlesen) erledigt.
Zur Hardware: Nucleo-Boards mit STM32F4xx.

von Maxim B. (max182)


Lesenswert?

Stefan S. schrieb:
> Maxim B. schrieb:
>> um
>> Bit-Auflösung nicht zu verschlechtern, könnte ich Hüllkurve (und auch
>> Intonieren) analog schaffen, mit Vref. Dafür brauche ich aber mehr AVRs,
>
> Was? Warum das? - Wenn du schon unbedingt die Auflösung beibehalten
> willst bzw. die Hüllkurve nicht in Software machen willst, so kannst du
> mit einem DAC die Referenzspannung des anderen DAC modulieren.
Ja, so denke ich auch. Und wie wird Hüllkurven-DAC realisiert, als 
IC-DAC oder als PWM, ist nicht so prinzipiell. Dort geht es um 
Millisekunden und nicht um Mikrosekunden wie bei Schall-DAC.

Ich gehe davon aus, daß einerseits die Verbindungen möglichst seriell 
sein müssen, um die Platte einfacher zu machen. Andererseits hat eine 
Mega auch mit einer Stimme genug zu tun, und das Wichtigste ist ja, 
immer und wieder rechtzeitig neue Byte auszugeben. AVR in DIP28 kostet 
so wenig, daß es sich lohnt, eher mehr AVR zu benutzen, als komplizierte 
8-bit-Bus auf einer Platte auf mehreren Verbraucher zu führen. D.h. 
einfach AVR-Port als Register für parallele DAC, statt mehrere DAC mit 
eingebauten Register mit einem AVR. Wenn DAC seriell ist, dann noch 
einfacher mit Platte. Dann aber wohl von USART in SPI-Mode, weil echte 
SPI für den Austausch zwuschen AVRs notwendig ist.

Das ist übrigens ein Problem bei billigen Synthesizer: je mehr 
Polyphonie, um so schlechter ist jede Stimme. Ich nehme an, das ist 
deshalb, weil alles mit einem CPU erzeugt wird. Mit mehreren Stimmen ist 
CPU gezwungen, jede Stimme weniger sauber zu behandeln. Für mich ist 
aber extrem wichtig, daß Polyphonie glasklar bleibt. Die Abhängigkeit 
zwischen Stimmen muß minimal sein. Ich denke, lieber AVR pro Stimme, als 
versuchen, alles mit einem Chip zu machen und am Ende nur Klangbrei 
statt Musik...

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

m.n. schrieb:

> Ohne Alles genau gelesen zu haben, wie wäre es, einen schnellen µC zu
> nehmen, der diverse Klangfarben als Tabellen im ROM gespeichert hat. Per
> DMA ausgegeben stimmt das Timing auch während der µC andere Aufgaben
> (Tastatur einlesen) erledigt.
> Zur Hardware: Nucleo-Boards mit STM32F4xx.
Und wie wäre es, einfach einem Orgelbauer die Aufträge zu geben, in 
jedem Raum, wo ich spiele, eine 3-man. Orgel für nur 1,5 Mio pro Stück € 
zu bauen? das wäre ja noch einfacher? :)

Also, ich bleibe zuerst bei AVR. Wenn ich vor 17 Jahren eine brauchbare 
und spielbare elektrische Orgel mit nur zwei 89C... gemacht habe, umso 
leichter muß das mit AVR gehen.

Damals habe ich übrigens die Hüllkurven nur mit einem AD7533 und 
analogen Multiplexer für 15 Stimmen erzeugt. Für Hüllkurve braucht man 
keine besondere Geschwindigkeit. Ein Ton-Ereignis per MIDI zu schicken 
kostet sowieso etwa 1 ms. Dagegen kostet Hüllkurve per Software je eine 
(mindestens) zusätzliche mul für jede Ausgabe d.h. 40000 mal pro Stimme 
und Sekunde.

Mit Tastatur ist gar kein Problem. Da ich sowieso offene System machen 
möchte, mit MIDI-Eingang, so liegt es auf der Hand, diese Einheit 
unabhängig von anderem zu machen.  Natürlich separate AVR, und seriell 
(wie MIDI, nur vielleicht hier ohne galvanische Trennung, da alles in 
einem Gehäuse und mit gemeinsamer Stromversorgung). Algorithmus ist 
elementar, lohnt sich gar nicht, darüber zu reden.
Die Steuerung, die den freien Stimmen die Tasten zuweist - dort etwas 
komplizierter, aber auch sehr einfach. Unbedingt ein FIFO für 
MIDI-Eingang (damals mußte ich das nachbessern, sonst kam gelegentlich 
beim Spielen, daß die einige Tasten stumm blieben).

Na, eigentlich meine Frage am Anfang war: ich wollte so etwas wie 
AD9833, aber mit Möglichkeit, WAVE-Tabelle zu verändern (und auch 
lötbare IC!!!)...

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Maxim B. schrieb:
> Und wie wäre es, einfach einem Orgelbauer die Aufträge zu geben, in
> jedem Raum, wo ich spiele, eine 3-man. Orgel für nur 1,5 Mio pro Stück €
> zu bauen? das wäre ja noch einfacher? :)

Du, mit Deinen 0,1 cent?
Wohl kaum.

Maxim B. schrieb:
> Na, eigentlich meine Frage am Anfang war: ich wollte so etwas wie
> AD9833, aber mit Möglichkeit, WAVE-Tabelle zu verändern (und auch
> lötbare IC!!!)...

Was soll man denn sagen, wenn Du die Antwort nicht begreifst?

von Maxim B. (max182)


Lesenswert?

m.n. schrieb:

> Was soll man denn sagen, wenn Du die Antwort nicht begreifst?

Ich habe keine Antwort von dir gesehen.
Du hast nur geschrieben, daß dir andere Mikrocontroller gefällt und daß 
du Schwebung 0,1 cent nicht hören kannst.

: Bearbeitet durch User
von Stefan S. (chiefeinherjar)


Lesenswert?

m.n. schrieb:
> Maxim B. schrieb:
>> Und wie wäre es, einfach einem Orgelbauer die Aufträge zu geben, in
>> jedem Raum, wo ich spiele, eine 3-man. Orgel für nur 1,5 Mio pro Stück €
>> zu bauen? das wäre ja noch einfacher? :)
>
> Du, mit Deinen 0,1 cent? Wohl kaum.

Was soll denn bitte dieser Vergleich? Er hat dir - wie wir alle - eine 
äußert probate Lösung geliefert. Auf so einem Board werkelt auch nur ein 
kleiner Cortex und die meisten  kriegt man für weniger als als 1€. Die 
bieten nicht nur mehr Rechenleistung, sie haben auch eine potentere 
Peripherie. Und sind nicht schwerer zu beschalten als ein ATMEGA. Und 
lötbar sind die auch in SMD.

Maxim B. schrieb:
> Na, eigentlich meine Frage am Anfang war: ich wollte so etwas wie
> AD9833, aber mit Möglichkeit, WAVE-Tabelle zu verändern (und auch
> lötbare IC!!!)...

Meine Güte. Ich gebe es bald auf. Mehrere Leute haben dir schon die 
Lösung genannt, wie du sie haben willst, aber die scheinst du 
geflissentlich zu ignorieren.

Ein AD9833 ohne ROM ist einfach ein DAC. Fertig.

von Stefan S. (chiefeinherjar)


Lesenswert?

Maxim B. schrieb:
> Also, ich bleibe zuerst bei AVR. Wenn ich vor 17 Jahren eine brauchbare
> und spielbare elektrische Orgel mit nur zwei 89C... gemacht habe, umso
> leichter muß das mit AVR gehen.

Ja ja früher war alles besser. Die wird aber garantiert nicht deine 
100ppm Genauigkeit gehabt haben und wird deine heutigen Anforderungen 
garantiert nicht erfüllen.

von Maxim B. (max182)


Lesenswert?

Natürlich ging damals nicht auf die heutige Genauigkeit.
Aber ich habe mit der Zeit mehr Lust bekommen, die Werke aus 17. und 18. 
Jh. mit historischen Temperaturen zu spielen. Dann klingen sie anders, 
viel frischer. Ich habe auch mein Orgelpositiv in der Taufkapelle in 
"Neuhardt kleine Stadt" gestimmt: das bringt etwas!
Mit Orgeln ist aber ein bißchen leichter: die Pfeifen ziehen sich 
zueinander, wegen akustischer Kupplung. Deshalb auch wenn sie alleine 
etwas verstimmt sind, klingen sie zusammen doch sauber. Mit Elektronik 
ist das leider anders, hier muß man viel sauberere Stimmung machen, als 
mit Akustik, um etwas überhaupt klingt.

Eigentlich reicht mir, wenn mein Lieblingstest bestanden wird: 
Parallelen  (in gleichschwebender Stimmung) spielen, z.B. Terzen und 
Sexten. Die Schwebungen müssen gleichmäßig nach oben wachsen, ohne 
hörbare Sprünge zu machen. 0,1 cent hin und her - und dann besteht das 
Instrument den Test schon nicht mehr. Mit 40 kHz Abtasten reicht 24 bit 
- Phasenakku für 0,01 cent.

: Bearbeitet durch User
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.