Forum: Projekte & Code 2-Kanal ADSR-Synthesizer für ATTinies(85, 2313 u.a.)


von Mark L. (m2k10) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
beschäftige mich seit Kurzem (wieder) mit Microcontrollern, habe hier 
auf der Seite viel mitgelesen und wollte mich mal erkenntlich zeigen und 
eine von meinen 'Spielereien' veröffentlichen, vielleicht kann's ja 
jemand gebrauchen.

Ich hatte mir letztens in den Kopf gesetzt, meine grausame Türklingel 
durch etwas eigenes zu ersetzen und wollte dafür unbedingt einen 
niedlichen Tiny85 verwenden. Heraus kam ein C64-SID-ähnlicher 
Synthesizer, den ich dann aus 'sportlichem' Ehrgeiz noch auf unter 1.900 
Bytes quetschen konnte, so dass er auch auf dem Tiny2313 läuft.

Funktionsübersicht:
  - 2 unabhängige Frequenzgeneratoren mit ADSR-Hüllkurve
  - ein dritter (nicht hörbarer) Frequenzgenerator für Synchronisation
    oder Ringmodulation von Kanal 2
  - Sinus-, Dreieck-, Sägezahn- und Rechteckschwingungen (letztere mit
    8-bit Pulsweite) sowie (Rosa-) Rauschen
  - Attac-, Decay- und Releasezeiten von 6,5ms bis 26sec möglich
  - sanftes Abschwellen bei Decay und Release (umgekehrt quadratisch,
    keine Gerade!)
  - Samplerate 39.062,5 Hz bei 20MHz-Quartz
  - Töne (brauchbar) über 4 Oktaven, von D3 bis D7
  - trotz aller Software-Multiplikationen nur maximal 494 Takte
    Ausführungszeit bei Volllast (beide Kanäle in Decay oder Release
    + Ringmodulation), sonst unter 400
  - nur 1 Timer und 1 PWM-Pin als Ausgang
  - Mehrere-in-1-Version für Tiny85(45/25) und Tiny2313 (einmal
    8-bit-Timer mit Prescaler 2 (7-bit pro Kanal),
    einmal 9-bit-Timer ohne Prescaler (8-bit pro Kanal)
  - zwei Varianten des Rauschgenerators, die Speicher-Sparversion
    benötigt gesamt unter 1.700 Bytes Flash

Da es mein erstes Mal ist, dass ich etwas online stelle, war und bin ich 
recht unsicher, was, wie, wo (wozu ;-) ). Ich habe mich daher 
entschieden keine fertige Anwendung zu nehmen (wie eine Türklingel) 
sondern 'nur' den Synthesizer samt Demoprogramm, aber auch ohne 
Schaltung. Da ich mich als blutigen Anfänger sehe wollte ich auch 
niemandem zumuten etwas von dem Gewurstel nachzubauen.
Zum Testen des Demos genügt ein STK500 mit einem Kopfhörer an 
PB1(Tiny85) bzw. PB3(Tiny2313) sowie zwei Tastern an PB0 und PB2, die 
dann einfach einen über EEPROM einstellbaren Sound spielen. Die Taster 
fungieren dabei als Gate (quasi als 2-Tasten-Instrument). Sinnvoll wäre 
es noch einen Filter zwischen PB1(Tiny85) oder PB3(Tiny2313) und 
Kopfhörer einzufügen, ich selbst verwende dazu den Butterworth-Filter 
aus der Atmel AppNote 336 (Appendix C).

Auswahl des Prozessors wird am Anfang der Haupt-ASM-Datei festgelegt. 
Ich wüsste keinen Grund, warum die Tiny85-Variante nicht auch auf dem 25 
oder 45 laufen sollte, habe dieses daher schon eingebaut, kann's aber 
mangels entsprechender Prozessoren nicht testen. Für andere Tinies 
müssten evtl. die Timereinstellungen und ggf. der Ausgangsport geändert 
werden.

von Pinabe (Gast)


Lesenswert?

Hi Mark, würde mich nicht wundern wenn deine Niederschrift noch so manch 
Andere hier im Forum inspiriert! Ich finde es interessant :-)
..Sonst ist es wohl das falsche Forum.. ;-)
Ganz liebe Grüße, Ich

von Dude (Gast)


Lesenswert?

Sounddemo!

von Mark L. (m2k10) Benutzerseite


Angehängte Dateien:

Lesenswert?

Dude schrieb:
> Sounddemo!

Guter Vorschlag! Hab' bei dem Demoprogramm mal verschiedene Wellenformen 
eingestellt und vom Tiny2313 aufgenommen. 'Toene.mp3' sind Sinus, 
Sägezahn und verschiedene Rechteckwellen (Pulsweite 0x1F, 0x7F und 
0xBF), die andere Datei zeigt Effekte der Ringmodulation. Es handelt 
sich aber nur um beliebig eingestellte Werte (Basiston war meist A4) 
ohne Ziel bestimmte Klänge zu erzeugen.

von Marc (Gast)


Lesenswert?

Klingt ganz nett.
Kleiner Vorschlag: Such doch mal im Internet nach einem Musikstück als 
Notenarray, dann könntest Du uns zeigen, wie Musik auf Deinem 
Synthesizer klingt.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hmm cool. Der T2313 hat doch ein UART, was wäre mit MIDI? Dann kann man 
die Töne auch 'spielen'.

von Mark L. (m2k10) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ist vielleicht nicht gerade das beste Stück, aber ich hatte das Ganze 
auch weniger als Melodienplayer gedacht wg. Speicherverbrauch und so. 
Das Demo stammt vom Tiny85.

Hab' mich mit MIDI nicht groß beschäftigt, da ich keine Geräte mit 
MIDI-Ausgang habe, wo es einen Sinn ergäbe, die an einen ATTiny 
anzuschließen. Aber so ganz grob geschätzt reicht der Speicher auf dem 
2313 nicht aus um da noch groß irgendein Protokoll zu verarbeiten, sind 
halt nur maximal 350 Bytes. Das reicht sicher aus, um vorprogrammierte 
Töne auszugeben für Klingeln, Kinderspielzeug oder sowas aber den UART 
kann man nur sehr speziell einsetzen. Ginge vermutlich nur, wenn man auf 
eine Stimme verzichtet oder halt auf einem >=4kb-Tiny, vorbehaltlich, 
dass ich mir MIDI vielleicht komplexer vorstelle, als es ist.

von Chris B. (crasbe)


Lesenswert?

Muss es zwangsläufig ein ATTiny sein?
Mit z.B. einem ATMega hätte man mehr Möglichkeiten, wie zum Beispiel 
MIDI oder jede Stimme auf einem eigenem Pin ausgeben.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Chris B. schrieb:
> Muss es zwangsläufig ein ATTiny sein?

'Müssen', eindeutig 'Nein'. Der Code sollte auch auf jedem ATmega 
laufen. Mir ging's aber gerade darum, das auf dem ATtiny hinzubekommen, 
bzw. zu sehen, was auf einem kleinen tiny alles so möglich ist. Bis zu 7 
Multiplikationen in Software in unter 512 Takten ist auf dem ATmega 
keine Herausforderung mit der Hw-Multiplikation ;-)

Die Ursprungsversion hatte ich auf einem ATmega gemacht. Da gehen 
problemlos mehr Stimmen, als sich bei der PWM-Auflösung sinnvoll 
wiedergeben lassen.

Ich hatte mich hier bei dem Programm bewusst gegen eine bestimmte 
Anwendung entschieden um die ganze Sache nicht unnötig einzuschränken. 
Das Ganze war als Basis für eigene Basteleien gedacht. Je nach 
(selbstzuschreibender) Abspielroutine kann man von Geräuscheffekten bis 
zu instrumenten-ähnlichen Melodien so etwa alles machen, was der SID im 
C64 konnte, nur müsste man sich halt keinen Brotkasten bspw. an die 
Türklingel hängen, sondern nur einen 8-Pin ATtiny mit Lautsprecher. Ich 
hatte aber leider nicht bedacht, dass so wenige heute noch ASM nutzen.

MIDI-Player gerade für den ATmega müsste es aber auch schon geben, ich 
meine, ich hätte da mal was gesehen (Mr. MIDI o.ä.?).

Beitrag #5072344 wurde von einem Moderator gelöscht.
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.