3 stimmiger Synthesizer

User Projekte
stynx
Beiträge: 27
Registriert: Sa 25. Apr 2015, 16:33

3 stimmiger Synthesizer

Beitrag von stynx » Fr 1. Mai 2015, 16:40

Ich habe Heute ein wenig herum probiert und einen (derzeit) ein stimmigen Synthesizer gebastelt. Letztlich produziert das Projekt aktuell nur recheck-Wellen und verarbeitet die Noten noch über Warteschleifen. Ich will die einzelnen Stimmen entkoppeln und über Interrupts die Noten abarbeiten.

Aufbau:

Synthesizer Stimme: 16bit Timer mit flipflop am Ausgang (Takthablierung) von einem 3564khz Takt.
Frequenzberechnung: ausgehend von 440hz wird der 1782khz Takt in den Teiler umgerechnet (double) und schließlich auf die Klaviatur 'projeziert' (Taste 49). Wie beim Klavier kann taste 1 bis 88 versendet werden. Tatsächlich erlaubt die Formel auch mehr Tasten (unterhalb von 0 negativ).
-> (int) (4050/pow(2, (tastennummer-49)/12))

https://soundcloud.com/vintage-micro-mu ... rator-test

Ziele für dieses Projekt:
- Synthesizer mit 3 unabhängigen Stimmen mit nachgeschaltetem 8 bit DAC.
- Rauschgenerator
- Apple II Interface mit Kompatibilität zur ALF MC16 Synthesizer Karte.
- Midi Dateien über SD-Karte abspielbar.
Square wave generator.cywrk.Archive01.zip
(2.06 MiB) 189-mal heruntergeladen

Thomas Barth
Administrator
Beiträge: 90
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: 3 stimmiger Synthesizer

Beitrag von Thomas Barth » Fr 1. Mai 2015, 17:12

haha ja, sowas macht spaß :)
Hört sich auch schon gut an.

Habe mich da auch mal im Rahmen einer kleinen Spielerei dran gewagt:
https://www.youtube.com/watch?v=m2U-veqmYbA

Danke das du die Projektdaten angehängt hast, werde ich mir die Tage aml anschauen!

PS: Habe das Thema in den Showroom verschoben ;)

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: 3 stimmiger Synthesizer

Beitrag von Reiner W. » Fr 1. Mai 2015, 18:02

Danke,
bin begeistert! Da kommen doch gleich alte längst verschüttete Gefühle hoch :D
Und schnell warst du auch.
Reiner W.

stynx
Beiträge: 27
Registriert: Sa 25. Apr 2015, 16:33

Re: 3 stimmiger Synthesizer

Beitrag von stynx » Fr 1. Mai 2015, 18:53

Reiner W. hat geschrieben:Danke,
bin begeistert! Da kommen doch gleich alte längst verschüttete Gefühle hoch :D
Und schnell warst du auch.
Dies sind meine ersten Gehversuche mit dem PSoC. Da ich noch keine Ahnung von dem System habe, wollte ich mit was leichtem starten. Ich würde gerne die geplanten DACs mit dem Timer ein und aus schalten nur leider scheint den VDAC der enable Eingang zu fehlen (oder übersehe ich die nur?). Als Basis für den Interrupt-generator werde ich einen weiteren Timer mit 100hz verwenden. Im Grunde soll dieser dann die 'soundmodule' aktualisieren. Jedes Modul holt sich eine neue Note, wenn ein interner Laufzeitzähler auf null gelaufen ist (wenn der interne Laufzeitzähler bei 100 steht, wird die Stimme die aktuelle Note 1s lang halten). Der Laufzeitzähler stellt somit die Notendauer dar. Noten haben insgesamt 3 Parameter: Tonhöhe, Länge und Lautstärke. Die Tonhöhe wird durch den Teiler des Timers definiert, die Länge der Note wird durch einen Software-downcouter realisiert und die Lautstärke (so vorhanden) ändert den DAC-Wert. Jede Stimme soll zusätzlich einige Hüllkurven besitzen, welche wiederum den DAC steuern. Alles in Allem wird es wohl noch etwas dauern, bis ich mich mit der Plattform akklimatisiert habe. Das bedeutet auch, dass ich das Konzept eventuell überarbeiten muss.

-Jonas

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: 3 stimmiger Synthesizer

Beitrag von Reiner W. » Fr 1. Mai 2015, 19:21

Da ich noch keine Ahnung von dem System habe, wollte ich mit was leichtem starten. Ich würde gerne die geplanten DACs mit dem Timer ein und aus schalten nur leider scheint den VDAC der enable Eingang zu fehlen (oder übersehe ich die nur?).
Ich muss gestehen, dass ich dem VDAC noch nicht wirklich gearbeitet habe. Wolfgang und Thomas wissen da sicher besser bescheid.
Vlt. findest du hier die nötigen Infos.
http://www.cypress.com/?docID=48626

Ach und kannst du da nicht strobe verwenden ?
aus dem datasheet:
strobe – Input *
The strobe input is an optional signal input and is selected with the StrobeMode parameter.
 If StrobeMode is set to External, the strobe pin is visible and must be connected to a valid digital source. In this mode the data is transferred from the VDAC8 register to the DAC on the next positive edge of the strobe signal.
Reiner W.

stynx
Beiträge: 27
Registriert: Sa 25. Apr 2015, 16:33

Re: 3 stimmiger Synthesizer

Beitrag von stynx » Fr 1. Mai 2015, 19:41

Reiner W. hat geschrieben:
Da ich noch keine Ahnung von dem System habe, wollte ich mit was leichtem starten. Ich würde gerne die geplanten DACs mit dem Timer ein und aus schalten nur leider scheint den VDAC der enable Eingang zu fehlen (oder übersehe ich die nur?).
Ich muss gestehen, dass ich dem VDAC noch nicht wirklich gearbeitet habe. Wolfgang und Thomas wissen da sicher besser bescheid.
Vlt. findest du hier die nötigen Infos.
http://www.cypress.com/?docID=48626

Ach und kannst du da nicht strobe verwenden ?
aus dem datasheet:
strobe – Input *
The strobe input is an optional signal input and is selected with the StrobeMode parameter.
 If StrobeMode is set to External, the strobe pin is visible and must be connected to a valid digital source. In this mode the data is transferred from the VDAC8 register to the DAC on the next positive edge of the strobe signal.
Das scheint mir eher ein load-signal zu sein. Mir geht es darum den Ausgang vom DAC auf low zu ziehen, wenn der Timer (bzw. der flipflop) low am Ausgang hat. Ich werde wohl eine kleine Schaltung hinter den DAC machen müssen. Eventuell gibt es ja unter den ganzen analogen Modulen im PSoC noch was passendes.

-Jonas

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: 3 stimmiger Synthesizer

Beitrag von Reiner W. » Fr 1. Mai 2015, 19:45

Reiner W.

stynx
Beiträge: 27
Registriert: Sa 25. Apr 2015, 16:33

Re: 3 stimmiger Synthesizer

Beitrag von stynx » Fr 1. Mai 2015, 20:56

An eine MUX hatte ich auch schon gedacht. Aber eventuell nutze ich auch einen externen VCA, der durch den DAC gesteuert wird. Das ist zwar etwas umständlicher aber dies ermöglicht mir dann später auch die Generierung von komplexen Wellenformen aus einer LUT. Auch scheint mir die S&H-herangehensweise vielversprechend. Am liebsten wäre es mir komplett auf externe Bauteile zu verzichten. Alternativ kann ich ja auch einen CEM3396 verwenden um meine Wellenformen zu generieren und muss dann nur genug DACs (0-5V) im PSoC abbilden ;-)

Weiss eigentlich jemand, wie ich die DACs von 4V auf 5V booten kann?

-Jonas

stynx
Beiträge: 27
Registriert: Sa 25. Apr 2015, 16:33

Re: 3 stimmiger Synthesizer

Beitrag von stynx » So 3. Mai 2015, 15:34

Hier eine neue Version meines 3ch synthesizers.

Neuerungen:

3 volle Kanäle mit jeweils 2 Wellenformen (Sägezahn und Rechteck)
Asynchrone Notenverarbeitung für jeden Kanal von einer zentralen 1khz schleife (hier soll später ein Interrupt implementiert werden)

Weitere Ziele:
8bit DAC für jeden Kanal (VCA) -> möglicherweise nur extern lösbar. Einige CEM3382 (dual VCA) habe ich noch da.

Hier ist eine erste Aufnahme. Den Fehler, dass die Musik nicht richtig stoppt habe ich schon behoben ;-)
Irgendwie finde ich das Ergebnis schon lustig :-P
https://soundcloud.com/vintage-micro-mu ... ynthesizer

-Jonas
Dateianhänge
3ch_synthesizer.cyprj.Archive01.zip
(2.4 MiB) 186-mal heruntergeladen
3ch_synthesizer.cyprj.Archive02.zip
(2.53 MiB) 175-mal heruntergeladen

Thomas Barth
Administrator
Beiträge: 90
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: 3 stimmiger Synthesizer

Beitrag von Thomas Barth » Di 5. Mai 2015, 00:40

Da kommt man ja richtig in Partystimmung bei der Musik ;)

Muss ich mir bei Gelegenheit mal genauer angucken deine Projektdaten, auf jeden Fall schon mal danke dafür.
Hatte auf dem PSoC5 mal die Wave DACs benutzt um ein Batman-Symbol auf dem Oszi zu zeichnen :)

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Antworten