www.mikrocontroller.net

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


Autor: Mark L. (m2k10)
Datum:
Angehängte Dateien:

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.
Autor: Pinabe (Gast)
Datum:

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
Autor: Dude (Gast)
Datum:

Sounddemo!
Autor: Mark L. (m2k10)
Datum:
Angehängte Dateien:

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.
Autor: Marc (Gast)
Datum:

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.
Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Hmm cool. Der T2313 hat doch ein UART, was wäre mit MIDI? Dann kann man
die Töne auch 'spielen'.
Autor: Mark L. (m2k10)
Datum:
Angehängte Dateien:

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.
Autor: Chris B. (crasbe)
Datum:

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.
Autor: Mark L. (m2k10)
Datum:

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.ä.?).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net