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.
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
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.
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.
Hmm cool. Der T2313 hat doch ein UART, was wäre mit MIDI? Dann kann man die Töne auch 'spielen'.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.