Hallo alle zusammen, durch den Thread ( Beitrag "6502 Emulation auf AVR ?" ) hier im Forum bin ich auf die Idee gekommen, eine Art Soundgenerator auf dem ATMEGA8 zu programmieren. Das Programm kann folgendes: - 3 Tongeneratoren mit Sägezahn, Rechteck mit variablem Tasverhätnis, Dreieck, Rauschen mit programmierbarer Frequenzen - 3 Einhüllendengeneratoren mit variablem Attack, Decay, Sustain, Release - Ringmodulation Der Soundgenerator versucht den SID des historischen C64 zu emulieren, die Register sind kompatibel. Eigene Musikstücke können in der Datei sound.c angehängt werden. Die Files zum Projekt finden sich hier: http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html Um den Soundgenerator auszuprobieren, brauch man blos einen Atmega8 mit 16MHz Quartz. Den PWM-Ausgang kann man direkt an einen Verstärkereingang anschließen. Ich habe hierzu meine Computerboxen verwendet. Gruss, Christoph
Einen kleinen Tiefpass sollte man schon noch spendieren, nicht dass einem noch die Hochtöner von der Hifi-Anlage abrauchen ;-)
Hi Christoph, ist ja echt super was im Moment abgeht. Ich interessiere mich neuerdings auch für das Thema Sounderzeugung. (auch auf Grund des 6502Emu-Threads) Ich werd mir dein Prog mal bei Gelegenheit anschauen. Vielleicht kann ich damit ja meinen defekten SID ersetzen ;) Ich hoffe,daß die im 6502-Thread es hinbekommen einen SID-Player nur mit AVRs zu basteln... lange kann es ja nicht mehr dauern. Schade, daß ich nicht genug Wissen hab um etwas beizutragen, der C64 hat mich schon seit Ewigkeiten fasziniert und ich höre heute noch regelmässig SIDs. Gruß, SIGINT
Hallo SIGINT, es freut mich, dass es so viele Leute gibt, die sich für dieses Thema interessiern. Meine Hoffnung ist ja ein wenig, dass einige vielleicht mal ein kleines Musikstück direkt für das SID-Emulator Programm schreiben. Man kann das relativ einfach tun. In der sound.c habe ich ein paar Noten für die Soundgeneratoren per #define definiert ( gut, ich war etwas faul und habe nicht alle Noten aus dem SID-Datenblatt abgetippt ). In der aktuellen sound.c wird einfach mal eine Tonleiter abgespielt, ein Dreiklang erzeugt, die PWM mal durchfahren, die Ringmodulation getestet und Schußgeräusche mit dem Zufallsgenerator erzeugt. Die Beispiele sind glaube ich relativ einfach gehalten, so dass jeder seine eigene Melodie oder verschiedene Geräusche erzeugen kann, ohne dass er sich mit der eigentlichen Emulatorsoftware auseinandersetzen muss. Ich habe gesehen, dass es für den orginal-SID Wettbewerbe gibt, wer die schönste Sound-Kollage mit am wenigsten Speicher erzeugen kann. Vielleicht ist es für den ein oder anderen eine Herausforderung, eine schöne Klangfolge oder eine Melodie in einen Atmega8 ohne Zusatzbeschaltung hineinzuquetschen. In der aktuellen Version sind noch 40% Flash frei, da kriegt man schon noch einige Noten unter. Ich wolle schon versuchen, ein paar Melodien aus irgendwelchen MIDI-Files herauszuziehen, aber ich habe leider keine MIDI-Files gefunden und als ich ein wenig über das Format gelesen haben, erschien es mir zu kompliziert. Eigentlich bräuchte man nur die Tonhöhe und die Tondauer und wenn's schön klingen soll noch den Anschlag und den Ausklang. Das könnte man einfach in den Emulator übertragen. Gruss, Christoph
abo <--- habs ganz vergessen @Chistoph: Na optimal wäre es natürlich, wenn man direkt SIDs oder MIDIs abspielen könnte, dann muss man nicht viel an den Liedern "rumstricken". Leider ist dafür die Firmware des ATmegas dann viel aufwändiger. Aber ich bin sehr optimistisch, daß dieses Forum bald einen standalone SID-Player hervorbringt. Ich hoffe bis dann etwas verstehen zu können, wie der Emulator und die Tonerzeugung funktionieren. Ich hab überigens dein Programm mal kurz mit nem 8Mhz Quarz getestet. (hatte keinen anderen zur Hand) Ich bin mir nicht sicher was ich da genau gehört habe, aber ich vermute es war ok... nur die Tonhöhe passte natürlich nicht. Gruß, SIGINT
Kann man da auch einen piezo zum testen anhängen oder taugt das nicht?
Hallo, @Sigint 112: was hat Dein SID im 64er? Nicht nur die Sicherung durch auf dem Board? Dann geht beim alten Board (mit 6581) der Sound und der Datasettenmotor nicht. Zur Not könnte ich Dir einen SID zukommen lassen, welchen brauchst Du? Gruß aus Berlin Michael
@all mal eben eine generelle frage zu den atmegas. ich denke für einen tiefpass/hochpass/bandpass braucht man ja irgendetwas biquad-ähnliches. hat der atmega eigentlich einen hardware-multiplizierer ? wenn ja dann dürfte auch tiefpass (und sonstige pässe) kein größeres thema sein. ich bin zwar nicht firm was die atmegas angeht, doch habe ich mal auf einem msp430 einen tiefpass gebastelt (asm) und habe dort auch den hw-multiplizierer genutzt. wenn man einen solchen multipl. hat (bzw. hw-mac) gestaltet sich das rechnen eines pass-filters recht einfach (ich habe mit 16 bit audio und 16 bit koeffizienten gerechnet, beim atmega dürfte 8 bit audio und 16 bit koeffzienten reichen). das berechnen der koeffizienten ist dann eigentlich das hauptproblem (da man hier meist mit float arbeiten muß, es sein denn man ist richtig fit in mathe). man kann es sich aber auch einfach machen und vorgekaute koeffizienten in ein datenflash ablegen. nur mal so als anregung. gruß rene
Hallo, hier ist noch ein potentieller Synthesizer-Bauer ;-). Mir hat auch o.g. Thema als Anregung recht gut gefallen. Allerdings habe ich nicht vor, einen C64 SID zu emulieren, sondern einen fluffigen Live-Synth zu bauen, einen Mega128 mit der Sounderzeugung zu betrauen und einen externen D/A- Wandler (CS4334) zu verwenden. Was mir noch fehlt, ist ebenfalls ein nötiger Denkanstoß in Sachen digitale Filter. Die Kiste soll dann mal mit reichlich Knöpfen ausgestattet werden und MIDI-fähig sein. Die Ergebnisse werde ich dann in einem Extra-Thema behandeln. Wer sich mit einbringen mag, gerade was komplexe Berechnungen angeht, ist herzlich willkommen ;-). Ach, bevor ich´s vergesse: ASM ist Trumpf! Schöne Grüße, TravelRec.
@travelrec mal eine frage zu deinem live-synth. welche samplerate willst du verwenden ? bei höheren sampleraten wird das filtern insofern schwieriger (unter der verwendung von iir filtern) da du dann recht große (bit-breite) koeffizienten brauchst damit du relativ weit runterfiltern kannst (44khz und einen filter der nur bis 1 khz runterfiltern kann bringts nicht :-)) (ich benutze in meinem audio-projekt, was hier als artikel existiert, 32 bit, habe da aber auch etwas reserve). wenn deine samplerate über sagen wir mal 8kHz nicht großartig hinausgeht (oder du nicht so weit runterfiltern willst) dürften 16 bit koeffizienten reichen. (daher die frage welche atmegas einen hw-multiplier bzw. hw.mac) haben. es mag sicherlich noch andere wege für filterberechnung geben, aber ich denke biquads (also iir filter) sind am einfachsten zu implementieren (fir filter brauchen viele multiplikationen pro sample). man braucht nur ne schnelle multiplikation, und davon 5. aber andere syntheseformen wären für einen atmega sicherlich auch interessant. z.b. fm, pd, wavetablesm, additive ... nur mal so als anregung :-))
zu den Filtern: von Atmel gibt es eine Application Note zu dem Thema. Ein 2 poliger IIR-Filter braucht pro Sample ca. 120 Taktzyklen auf einem ATMEGA8, was bei F_CPU=16e6 7.5uS/Sample sind. Die ATMETGAs beinhalten einen 8x8=16Bit Multiplierer mit 2 Taktzklen Ausführungszeit, die bei den Filtern ausgiebig verwendet werden. Der Filter passt locker in den SID-Emulator, der in C ganz ohne Assembler geschrieben ist. Es war mir allerdings wichtig, die Version 1.0 möglichst schnell zu implementieren. Christoph
@SIGINT >Ich hab überigens dein Programm mal kurz mit nem 8Mhz Quarz getestet. >(hatte keinen anderen zur Hand) Ich bin mir nicht sicher was ich da >genau gehört habe, aber ich vermute es war ok... nur die Tonhöhe passte >natürlich nicht. Hast Du PIN11 mit PIN17 verbunden? Bestimmt, sonst hätte gar kein Ton kommen dürfen. Bei 8MHz läuft das ganze System auf halber Geschwindigkeit und die PWM geht auf 16Khz, da könnten für empfindliche Ohren unangenehme Hochfrequenztöne überlagert sein. @Michael >Kann man da auch einen piezo zum testen anhängen oder taugt das nicht? Du kannst auch einen Piezo benutzen, die flachen Uhrenpiezos haben aber meistens einen sehr üblen Frequenzgang, nämlich 2 ziemlich starke Resonanzfrequenzen. D.h. man wird diese Freqenzstellen laut vernehmen und Tieftöne kann man vergessen. Die Rauschgeneratoren kann man mit einem Piezo gut hören. Gruss, stochri
>mal eine frage zu deinem live-synth. welche samplerate willst du >verwenden ? Für den Anfang werde ich 32kHz Samplerate anstreben und mich damit einarbeiten. Nach entsprechenden Optimierungen und wenn alles Gewünschte auch läuft, kann man höher gehen. Die ersten Tests kann ich am Wochenende machen, wenn die Bauelemente da sind. >es mag sicherlich noch andere wege für filterberechnung geben, aber ich >denke biquads (also iir filter) sind am einfachsten zu implementieren >(fir filter brauchen viele multiplikationen pro sample). man braucht nur >ne schnelle multiplikation, und davon 5. Erzähl mal mehr! Hast Du Algorithmen oder Berechnungsgrundlagen da? >aber andere syntheseformen wären für einen atmega sicherlich auch >interessant. z.b. fm, pd, wavetablesm, additive ... Jaa, lecker! Mal sehen, was geht ;-) Muß dann aber noch etwas recherchieren. >von Atmel gibt es eine Application Note zu dem Thema. Ein 2 poliger >IIR-Filter braucht pro Sample ca. 120 Taktzyklen auf einem ATMEGA8, was >bei F_CPU=16e6 7.5uS/Sample sind. Ahh, okay - ich guck´ da mal ´rein. Danke! Schöne Grüße, TravelRec.
Die Appnote ist sehr hilfreich, auch wenn ich sie noch nicht ganz verstanden habe. Da ich mich noch nie mit derart komplexen Rechnereien auf dem AVR befaßt habe, muß ich wohl nochmal auf die Schulbank. Schöne Grüße, TravelRec.
@Michael U.: Tja, mein SID ist wahrscheinlich durch ESD gestorben... ich hab mal kurz nicht aufgepasst und vergessen den Verstärker auszuschalten. Nach einem lauten "Fump" hat der SID dann nichts mehr gesagt. :-( Danke für das Angebot für den austausch SID, aber ich hab zum Glück noch zwei C64er hier... setz den SID lieber für was sinnvolles ein. @Christoph: Ich hab noch nen analogen Tiefpass an den Ausgang gehangen... hat die PWM-Frequenz relativ gut unterdrückt. Ich werde bei Gelegenheit mal die sound.c ändern. Gruß, SIGINT
> Ich hab noch nen analogen Tiefpass an den Ausgang gehangen... hat die > PWM-Frequenz relativ gut unterdrückt. Ich werde bei Gelegenheit mal die > sound.c ändern. Gute Idee. Vielleicht findest Du ja auch eine kleine Melodie, die man eintippen kann. Der technische Teil funktioniert ja einigermaßen, jetzt sind die Künstler gefragt. Gruss, Christoph
@travelrec also alle algorithmen die ich verwendet habe stehen im dsp-buch "Digitale Signalverarbeitung" von Udo Zölzer drin. Da bekommt man auch die Formeln zur berechnung von filterkoeffizienten her. Man muß nur schauen was man an der berechnung noch optimieren kann, da man wahrscheinlich nicht um floating-point (oder eine tabelle im datenflash) dum herumkommt. das ist der größte knackpunkt nach dem hardware-multiplier (der laut app-note ja machbar ist) zu den syntheseformen : - also fm halte ich mit dem avr machbar (4-6 siusoszillatoren mit hüllkurve) - wavetable sowieso (ist ja nix anderes als ein sample-player, egal ob fertige samples oder wellenformzüge die als oszillator laufen - pd (phase distortion) kenn ich leider nicht so gut, dürfte aber machbar sein - additive synthese ist machbar, aber eine frage der anzahl der oszillatoren. ich habe in meinem kawai k5000 synthesizer 128 oszillatoren pro stimme. das dürfte der mega nicht schaffen :-) aber man kann sich ja evtl mit 64 oszillatoren und einer stimme begnügen. obwohl ich mit den megas noch nicht viel gemacht habe, werde ich das projekt hier weiterverfolgen. ist echt interessant was ihr alles aus nem mega rauskitzelt :-)) gruß rene
nochmal @travelrec wenn du fragen zum thema iir filter hast kannst du gerne nachfragen. werde auch (sofern ich zeit dazu habe) in meiner audio-projekt-doku ein kleines kapitel darüber schreiben (kann aber noch dauern)
Hallo, @Sigint 112: so ein Exemplar habe ich hier auch noch gefunden, Ausgang tot, 0V... Gruß aus Berlin Michael
>Der Link zum Programm ATMEAG8SID.zip funktioniert nicht.
Upps, da ist mir beim rumschieben was schief gegangen. Jetzt geht er
aber wieder!
Gruss,
Christoph
TheMason: Bevor ich mich an die Filter mache, muß ich mich erst einmal um elementare Probleme kümmern: der CS4334 verlangt ein zur Masterclock synchrones High-Speed Interface (I2S) welches ich auf dem Mega nicht mit dem internen SPI hinbekomme, was ich aber gehofft hatte. Jetzt werde ich einen Tiny2313 als ein solches Interface programmieren und mittels Interruptverbindung an den Mega anschließen. Damit wäre ein 100% synchrones Timing hinzubekommen, ohne daß der Mega ständig nur am Datenschaufeln ist. Wenn das klappt, dann geht´s in Sachen Soundprogrammierung weiter. Schöne Grüße, TravelRec.
Hallo Sigint, > Ich hab noch nen analogen Tiefpass an den Ausgang gehangen... hat die > PWM-Frequenz relativ gut unterdrückt. Ich werde bei Gelegenheit mal die > sound.c ändern. Ich habe schon mit dem Gedanken gespielt, einen 16Bit DA-Wandler ( TDA1543 ) an den Atmega8 zu hängen. Dann bräuchte man die hohe PWM-Frequenz nicht und könnte sich den 16MHz-Quartz sparen. Der Anschluss eines 16Bit-DA-Wandler würde aber meiner minimalistischen Zielsetzung wiedersprechen, mit kleinstem Bauteilaufwand den maximal möglichen Sound herauszuholen. Der Vorteil bei der Verwendung möglichst weniger Bauteile ist, dass jeder die Schaltung nachbauen kann und selbst ein wenig damit experimentieren kann. @alle anderen Wenn man richtige Syntysizer mit großen Filterbänken entwickeln will, dann sollte man wenigstens einen ARM, einen größeren DSP oder ein LINUX-embedded System benutzen oder gleich auf dem PC programmieren und sich nicht mit einem AVR zu quälen. Das Feld ist wohl auch schon ziemlich umfangreich bearbeitet worden, so dass man im Netz sicherlich haufenweise Projekte und Programme findet
Was hältst du als Alternative von einen R2R D/A Wandler? Brauchst halt noch je nach Auflösung mindestens 8 freie Portpins Gruß Roland
Der Nachteil wäre: Ee sind halt schon wieder ein paar Bauteile mehr. Aber finde ich die Idee nicht schlecht. Ich habe bis jetzt nur noch nie ein R2R Netzwerk ausprobiert und kann deshalb nicht einschätzen, welche Genauigkeit man erreichen kann. Irgendwo habe ich auch mal gesehen, dass es fertige R2R Netzwerke als Bauteil gibt. Aber bei Reichelt oder dem C habe ich nichts gefunden. Vielleicht könnte man mit dem R2R Netzwerk ja auch einen 10Bit Wandler machen, dann hätte man etwas mehr Dynamik. Das Programm rechnet ohnehin eher mit 10Bit, da die 3 Kanäle intern addiert werden. Gruß, Christoph
So nen R2R dac ist halt nen Widerstandsgrab, für 8 bit glaub ich 24 gleiche Widerstände. Aber mit SMD Widerständen lässt sich das auch relativ klein aufbauen. Dann braucht man noch nen kleinen OPV zur Impedanzwandlung und gut ist. Vielleicht noch nen Tiefpass zum filtern der "Hochfrequenten" anteile, die beim schalten von einer auf eine andere Stufe entstehen und gut ist.
Ob das wirklich sinnvoll ist, einen kleinen AVR bis auf das letzte Hz Taktfrequenz und das letzte Bit Flash auszureizen? Nehmt doch einen AT91SAM7, da lässt sich jeder Audio-DAC problemlos anschließen, und die Rechenleistung ist sehr viel höher.
So da bin ich wieder.... ich hab gestern mal etwas mit C rumgespielt und aufm PC einen SID-Player zusammengehackt. Leider hab ich null Ahnung von der ganzen Materie, so daß das Ergebniss eher bescheiden ist. Aber man kann erkennen, welche Lieder abgespielt werden ;-) Bis jetzt hab ich nur 3 Stimmen (Sinus,Dreieck,Rechteck,Rauschen) und einen, nicht wirklich funktionierenden, Hüllkurvengenerator. Den 6502 Kern hab ich aus dem Netz... der scheint gut zu funktionieren. Mal schauen, was ich noch an Erfahrungen an meinem Player sammeln kann. Vielleicht kann ich ja doch was zum ATmega-Sidplayer beitragen. ;-) @Christoph: Das mit dem R2R-Netzwerk finde ich eigentlich auch ne gute Idee. Das ist preiswerter als der DAC und Widerstände hat man immer griffbereit. Aber es dürfte ja nur ein kleines Problem sein beides zu ermöglichen. (R2R und DAC) Ein 10bit R2R ist wahrscheinlich kein Problem... stellt sich nur die Frage, ob das viel bringt. Rechnerisch definitiv.. aber praktisch?!? @Andreas: Sinnvoll ist das wahrscheinlich nicht... aber sind Computerspiele und PS-Boliden sinnvoll?!? Es geht immer um den Spassfaktor: Irgendwas zu realisieren, was zuvor keiner für möglich gehalten hat. Ich würde wetten, daß ein SID-Player oder ein Synth mit einem ARM oder einem DSP kein großes Problem ist. Aber ein AVR ist sehr viel einfacher im Handling als ein ARM... das ist schon ein Vorteil. Preislich ist der ARM7TDMI ja fast so preiswert wie ein ATmega32... also kein Vorteil des AVR. Gruß, SIGINT
>Nehmt doch einen >AT91SAM7, da lässt sich jeder Audio-DAC problemlos anschließen, und die >Rechenleistung ist sehr viel höher. Die Herausforderung und der Spaß an der Sache ist ja gerade mit minimalen Resourcen das Maximale zu erreichen. Das können nur wenige. Vor allen Dingen weil man dazu spezielle Optimierungstricks benötigt, die eben nicht jeder beherrscht. Im anderen Thread haben zuerst 4 Leute behautptet, es wäre unmöglich, einen 6502 Emulator auf einem Atmega zu realisieren, bis Michael dann seine Lösung vorgestellt hat. Dann haben wieder 4 andere Leute behauptet, es wäre unmöglich mit einem Atmega einen SID zu realisieren, bis jemand im Netz einen 8 stimmigen SID gefunden hat und ich meine Atmega8-C-SID-Emulation veröffentlicht habe. Bei einem ARM hätte kaum jemand Zweifel, dass es geht. Gruss, Christoph
P.S.: Wenn es jemanden interessiert. Ein SID ohne Hüllkurven, Filter, etc... hört sich so an: http://de.geocities.com/sigint112/SID-PLAY.mp3 ;-)))
Hallo, @Christoph H.: Du triffst den Nagel auf den Kopf. :) Ich brauche keinen SID-Olayer, er wird, wenn er spielt, wohl auch nur in der "Sammlung nutzloser Objekte" landen. Das hindert mich aber vorerst nicht daran, das Ding spielbar zu machen. Ich denke inzwischen, daß Deine SID-Emu mit in einen Mega8515 oder Mega162 reinpßsst und auch spielbat zu bekommen sein müßte. Zumindest mit den SID-Mods, die im 20ms-VBLANC-Irq laufen. DA SOLLTE AUCH NOCH Luft für Rechnerei des SID bleiben, zur Not eben teilweise in Tabellen auslagern und den Flash vollmachen... Gruß aus Berlin Michael
>Ich brauche keinen SID-Olayer, er wird, wenn er spielt, wohl auch nur in >der "Sammlung nutzloser Objekte" landen. Ja, eine Sammlung nutzloser Objekte ist etwas schönes, ich habe auch ein paar. >P.S.: Wenn es jemanden interessiert. Ein SID ohne Hüllkurven, Filter, >etc... hört sich so an: >http://de.geocities.com/sigint112/SID-PLAY.mp3 Hey, klingt gar nicht schlecht! Kannst Du davon nicht ein SID-Register-Dump machen, damit ich das mal in den Emu einbinden kann? Gruss, Christoph
Hi Christoph, ich hab mal versucht ein Registerdump zu machen. Ein Tick sind 1/22050s ... man sieht, daß ca. alle 441 Ticks sich die Register ändern. Das ergibt ziemlich genau 50Hz :-) Allerdings hab ich mittlerweile einige schwerwiegende Fehler in meinen Überlegungen entdeckt: Während eines Audiosamples lasse ich die 6502 mehrere Hundert Tackte arbeiten, ohne die SID-Register zu prüfen... das muss ich wohl irgendwie abfangen. Ich hab nämlich eben das "GATE" Bit im SID gefunden und bin mir nun im klaren, warum mein Hüllkurvengenerator nie wirklich funktioniert hat. ;-) Aber da sieht man wieder mal: Aus Fehlern lernt man. Gruß, SIGINT P.S.: Die Register sind einfach aufsteigend sortiert: Links->Reg0 Rechts->Reg25
Hi zusammen, ich hab mal versucht die Hüllkurven bei meinem SID-Player einzubauen. Die Ergebnisse sind ganz ok... aber gut ist das leider nicht nicht wirklich. Ich werd nächste Woche mal anfangen mit den AVRs rumzuspielen. Vielleicht bekomm ich da einen einfachen DDS-Synth hin. Hier aber ertsmal mein akuteller Player: Tonbeispiel: http://de.geocities.com/sigint112/prody_the_penguin_parrot.mp3 Den 6502 Kern hab ich von dieser Seite: http://www.zophar.net/tech/6502.html (Neil Bradkey) ... Ich hab das Teil nur minimal modifiziert: A_Reg setzen PSID-Lader: http://de.geocities.com/sigint112/psid.c Der Player: http://de.geocities.com/sigint112/main.c Der Code ist echt ne katastrophe... aber ich bin noch beim lernen. Gruß, SIGINT
Hallo nochmal: Die Anbindung vom Mega128 an den I2S-DAC CS4334 funktioniert, ein Tiny2313 realisiert das Interface zwischen beiden, leider fehlt mir in den nächsten Tagen die Zeit zum Programmieren. Ich melde mich nochmal, sobald es etwas handfesteres gibt. Schöne Grüße! TravelRec.
warum noch einen controller dazwischen? Hier hat irgendwo mal einer eine Seite gepostet wo jemand mit einen AVR den SID ersetzt hat, dort wurde ein I2S DAC direkt an den AVR gestöpselt
Das wird bei dem CS4334 aber nichts, weil der seine I2S-Signale synchron zur Masterclock (in dem Fall 16Mhz / 512 x 32 Bits) braucht. Wenn der Mega128 das Timing selbst übernehmen soll, dann kann er nichts anderes mehr machen, weil es mit dem Hardware-SPI nicht geht. Die alten TDA15xx DACs hatten nur den I2S-Bus und haben entsprechend der WordClock gewandelt, mit allem Jitter, der halt über die Schnittstelle so mitkam. Sie waren außerdem 16-Bit R2R Wandler mit Stromausgang. Der CS4334 ist ein hochgenauer 1-Bit-Wandler (geht bis 96kHz bei 24-Bit Sampleauflösung) und der braucht für seine sehr gute Ausgangscharakteristik auch sehr genaues Timing.
interressant, was heißt stromausgang? Das man da direkt einen speaker/Kopfhörer anschließen kann? Machen die TDA15xx keine 16 bit? Aber so ein TDA15xx ist bestimmt besser als selbst gemachtes R2R oder PWM oder?
>interressant, was heißt stromausgang? Das man da direkt einen >speaker/Kopfhörer anschließen kann? Nein. Der DAC erzeugt einen dem digitalen Eingangssignal entsprechenden analogen Strom über einem fest definierten Lastwiderstand. Dieser Strom muß mit einem Operationsverstärker in eine belastbare Spannung gewandelt werden (Impedanzwandler). >Machen die TDA15xx keine 16 bit? Doch schon, aber mit den für R/2R-Netwerke typischen Nichtlinearitäten. Der CS4334 ist durch seine 1-bit-Technologie weitestgehend linear. Außerdem sind die Verzerrungen äußerst gering. >Aber so ein TDA15xx ist bestimmt besser als selbst gemachtes R2R oder >PWM oder? Ja, aber nur wenn Du ihn noch irgendwo bekommst. Wird nicht mehr hergestellt. Die neueren Wandler sind meistens besser, erfordern aber auch kompexere oder genauere Schnittstellen.
Hallo SIGINT, es ist grad so schönes Wetter und man kommt wenig zum programmieren. Heute habe ich den Register-Dump mal überflogen. > ich hab mal versucht ein Registerdump zu machen. Ein Tick sind >1/22050s ... Beim Durchsehen gabe es für mich eine Unklarheit: Die Tick-Angaben im Dump schwankt zwischen 1 und 440. Ich nehme an, es ist immer das entspricht immer der Zeitdifferenz zur letzten Veränderung der Register. Was mich wundert, manchmal verändern sich auch die Werte innerhalb der 1-Tick Spanne. Gruss, Christoph
Ja, das liegt daran, da ich bei jeder 1/22050s nachschaue ob sich ein Register geändert hat. Wenn sich nichts geändert hat, dann wird Ticks um eins erhöht, ansonsten auf 0 gesetzt und der Text geloggt. Also sollte sich jede Zeile ändern. Daß sich überhaupt bei einem Tick was ändert dürfte der oben genannte Denkfehler von mir sein. Ich hatte folgende Idee: Änderungen der Soundausgabe sind nur hörbar, wenn sie größer oder gleich 1/22050s (meine Samplerate ist 22050) sind... also lasse ich die CPU genau die Taktzahl einer 1/22050s durchlaufen und rufe dann meine Soundroutine auf. Allerdings kann es ja sein, daß die Play-Routine der SID-Datei in einem Aufruf mehrfach auch ein SID-Register zugreift. Ich muss also alles nochmal neu überdenken... nur hab ich keinen Plan, wie ich die 6502 CPU und die Sounderzeugung einigermassen Zyklengenau parallel laufen lassen kann. Wenn ich Threads verwende, dann hab ich riesen Performanceprobleme... wahrscheinlich durch den Overhead des Taskswitchings. Ich bin da im Moment leider total Ratlos... Gruß, SIGINT
Hallo, Du mußt vermutlich nicht zyklengenau arbeiten. Die meisten Files (jetzt mal Samples nicht beachtet, habe ich mir nocht nicht angesehen und sollte auch eher die Ausnahme sein) spielen im VBLANC-IRQ. Es werden also alle 20ms die Register des SID aktualisiert, das auch ohne Rücksicht auf Zeitabläufe, nur so, wie eben der Programmcode der SID-IRQ-Routine aufgebaut ist. Cauldron (Hexenküche) von Pallas z.B. legt die nächsten Daten für den SID in einen Ram-Bereich und kopiert dann in einem Loop alle Werte nacheinander in alle SID-Register, von $D418...$D400 allo schpn nacheinander, egal, ob neue Werte oder die alten. Du brauchst also eigentlich nur für jeweils einen IRQ-Durchlauf alle Register und Werte loggen, die muß er dann eben alle 20ms wieder in den SID schreiben. Mein Programm hängt nach dem Umbau im Moment beim Durchlauf der IRQ-Routinen irgendwo, daß muß ich erst suchen und beheben. Gruß aus Berlin Michael
@Michael: Hmm, ich muss da mal ein bisschen rumspielen. Sorgen machen mir ein wenig die "TEST" und "GATE" Flags. Wenn ich das richtig verstanden habe, dann reagieren die auf eine Flanke. Also muss ich bei jedem Prozessorzyklus schauen, ob die Flags geändert wurden damit ich das nicht verpasse. Ansonsten hab ich noch herasgefunden, daß ich irgendwie Timingprobleme habe. Da muss ich aber selbst mal nachschauen... trotzdem anbei noch mal den Source.(Wenn jemand interesse hat) Gruß, SIGINT
Hallo, Info zwischendurch: Beitrag "6502 Emulation auf AVR ?" Der SID spielt am Mega8515 "Pink Panther" :-))) Gruß aus Berlin Michael
Ich glaube ich muss mir mal ein paar Mega8515 bestellen.... dann kann ich deinen Code mal testen und SwinSID aufbauen. Dann hab ich ja schon fast das, was ich haben wollte :-) Besser wäre natürlich eine SID-Emulation auf OpenSource basis... aber man nimmt, was man bekommt ;-) Gruß, SIGINT
Hallo SIGINT, >Besser wäre natürlich eine SID-Emulation auf OpenSource basis... aber >man nimmt, was man bekommt ;-) Eigentlich ist mein SID-Emulator ja Open Source, Du kannst Dir den Quellcode hier http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html herunterladen. Die Voice-SID-Register für die Kanäle 1-3 sind implementiert. Was fehlt, ist der Filter. Vielleicht finde ich mal irgendwann Zeit dazu ... Mittlerweile habe ich auch das Bild eines minimalistischen Versuchsaufbaus und ein MP3-File der Testklänge auf die Seite gestellt. Beim Versuchsaufbau wäre es natürlich schön, wenn man sich den Quarz auch noch sparen könnte, aber dazu müsste das Programm vollständig in Assembler umgeschrieben werden. Gruss, Christoph
Autsch, da hab ich ganz den Überblick verloren ;-) An dein Projekt hatte ich garnicht mehr gedacht. Wäre ja klasse, wenn man alle Teile zu einem Player zusammenführen könnte. Wenn ich die Zeit finde, dann werd ich mich mal ransetzen. Gruß, SIGINT
Hallo, naja, das mit dem verlorenen Überblick kommt mir bekannt vor, mir fehlt er im Moment auch etwas, wer welche Absichten verfolgt. ;))) @Christoph H.: ich habe mir die Sourcen mal runtergeladen. Sieht so auf den ersten Blick nicht sooooo kompliziert aus, den Kram mal nach Assembler zu tragen. Ich weiß nur nicht, wnn ich dazu komme... Dann würde ich es versuchen, ob es sich in meinen Code reinhängen läßt. Vermutlich dann auf einen Mega162 wegen des Platzes, den externen Ram brauch ich ja noch. Was ich auch auf die Schnelle noch machen könnte: die Debug-Ausgabe der SID-Zugriffe so zu formatieren, daß es jemand, der es braucht, direkt includen könnte. Müßte ich nur wissen, wie es aussehen soll. Ich werde erstmal ein paar SID-Files zum Test raufspielen, sind vermutlich alles simple Sachen aus alten Games, ich denke aber, zum Testen gut zu gebrauchen. Eine Playroutine müßte dann nur die Tabelle abarbeite, 1x direkt zu Beginn den Init des SID und dann alle 20ms den nächsten Tabellenblock einfach in den SID bzw. die Emu laden. Format Adresse,Daten (jeweils ein Byte) Blockende mit 0,0 ? In Assembler würde ich den Kram dann nur ins Flash legen, Zeiger auf den Beginn. Dann Routine aufrufen, die je 2 Byte holt und Zeiger erhöht, wenn die 0,0 kommen, Zeiger merken und raus, sonst an die SID-(Emu)-Adresse. Dann 20ms IRQ freigeben und in der IRQ-Routine Zeiger holen und das Gleiche machen. Keine Ahnung jetzt, wie das in C mit der Tabelle geht, asl großes Array wohl? Gruß aus Berlin Michael
Hallo Michael, >Was ich auch auf die Schnelle noch machen könnte: die Debug-Ausgabe der >SID-Zugriffe so zu formatieren, daß es jemand, der es braucht, direkt >includen könnte. Müßte ich nur wissen, wie es aussehen soll. Wie die Tabelle für den Atmega-Sid Simulator aufgebaut ist, steht im File sound.c, welches nichts anderes als eine Flash-Tabelle ist. Das Format ist ausführlich in dieser Datei beschrieben und eigentlich auch ziemlich einfach: { registeradresse,wert, registeradresse,wert, ..... } Zusätlich werden Registeradressen, die keine SID-Adressen sind, als Kommandos für's Abspielen interpretiert. Es gibt folgende Kommandos: Delay[ms] STOP REPEAT Die stehen auch in der Datei beschrieben. >Eine Playroutine müßte dann nur die Tabelle abarbeite, 1x direkt zu >Beginn den Init des SID und dann alle 20ms den nächsten Tabellenblock >einfach in den SID bzw. die Emu laden. Das Delay-Kommando in meinem Emulator benötig 4 Byte und sieht so aus: 0xF0,pauselowvalue, 0xF1,pausehighvalue, Der Wert wird in Millisekunden interpretiert. Wenn man's mit konstanter Ausgabe macht, könnte man das natürlich sparen. Ich habe aber beim Stück pink.sid gesehen, dass dort die Ausgaberate verändert wird. Gruss, Christoph
Hallo, die Play-Routine wird alle 20ms aufgerufen, wenn nichts an den SID zu schicken ist, geht es wieder raus. Ich würde die Tabelle auch so anlegen, also -> registeradresse,wert, registeradresse,wert, ..... $FF,$FF (0,0 geht nicht, wäre ja Register 0 mit Wert 0 und damit möglich) -> registeradresse,wert, registeradresse,wert, ..... $FF,$FF -> $FF,$FF (hier wird einfach nichts gemacht). -> registeradresse,wert, registeradresse,wert, ..... $FF,$FF -> usw. Die überwiegende Mehrheit der SID-Files spielt nur im 50/60Hz-IRQ. Einfach deshalb, weil der Sound nicht Selbstzweck war, sondern als Nebenbeschäftigung auf dem C64 gespielt wurde. Damit durfte auch die CPU-Last nicht höher als nötig sein. Über Ausnahmen denke ich erst später nach, erstmal muß ich rausfinden, warum Cauldron und Boulderdash-Inro nicht laufen, zumindest Cauldron läuft auch im IRQ, bekommt aber falsche Daten... Gruß aus Berlin Michael
Hallo Michael, könntest Du die 20ms Verzögerung eventuel auch als 0xF3,20, statt 0xFF,0xFF, ablegen? Das wäre super, dann wäre es kompatibel zum Atmega8SID. Heute habe ich einge Fehler im Emulator beseitigt, deshalb steht jetzt hier http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html die Version 1.2 zum download bereit. Folgende Fehler habe ich beseitigt: - Hüllkurven hatten Fehler - Falls die Filterregister gesetzt sind, werden die Signale, welche normalerweise durch die Filter laufen, auf 1/4 gedämpft. Ich habe festgestellt, dass sonst die Rauschgeneratoren bei bestimmten SID-Stücken alles andere übertönen. Schönen Sonntag noch, Christoph
Hallo, kein Problem, ging ja nur darum ein SID-Daten-Ende zu nehmen, daß sich von den SID-Daten eindeutig unterscheidet. Damit geht ja alles ab 0x1D,0x00. 0x1C ist ja das letzte SDI-Register. Ich mußte am Wochenende erstmal etwas PHP/MySQL machen, hat so leider nur zwischendurch für dumme Bemerkungen im Forum gereicht. So als Entspannung... ;))) Mal sehen, wie es morgen abend so ausschaut. Gruß aus Berlin Michael
Hallo, ihr seid ja Profis in Sachen Sounderzeugung, dazu habe ich mal eine Frage. Ich erzeuge Töne über PWM und gebe diese an einem Piezo aus. Wenn ich es richtig verstehe kommt ja ein Rechtecksignal am Port raus. Durch Änderung der Frequenz wird die Tonhöhe festgelegt. Die Töne sind nicht sehr schön und ich möchte die Tonausgabe verbessern. Es sollte sich gedämpfter anhören. Ähnlich einem Gongefekt. Wie kann man sowas ohne externe Bauteile am einfachsten in C realisieren? Ich bin für jeden Tip dankbar. Gruß Michael
@michael aus nem piezo wirst du nicht viel rausholen können. betreib das ganze mal mit nem transistor und nem lautsprecher. da dürfte das ganze schon etwas anders klingen. wenn du unbedingt den piezo verwenden willst, spendier ihm noch einen kondensator (probler mal mit verschiedenen werten von 470pf-10nf oder so). sonst fällt mir auf die schnelle nix ein. gruß rene
Hallo Michael,
>Ich erzeuge Töne über PWM und gebe diese an einem Piezo aus.
Eine Piezoscheibe klingt immer etwas bescheiden, da sie meist ausgeprägt
Resonanzen und einen ansonsten ziemlich beschränkten Frequenzgang hat.
Die Dinger sind hauptsächlich für Armbanduhren als Warnton geeignet.
Bei meinen Experimenten habe ich mir einfach eine NPN-PNP
Gegentaktenstufe gebastelt. Die muss keine Audioqualitäten haben, das
sie das PWM-Signal überträgt. Am Ausgang hängt ein R-L Tiefpass. Ist
eigentlich ein Clas-D-Verstärker. Dann die Lautsprecherbox meiner
Stereoanlage.
Wenn ich meine PC-Lautsprecher aus der Soundkarte ausstöpsele und direkt
an den PWM-Ausgang des Atmega8 hänge, klingts noch viel besser.
Gruss,
Christoph
Sodele, mittlerweile ist es mir gelungen, einen Atmega168 zu verwenden, da passen schon ein paar Sekunden mehr SID-Musik rein. Hier gibt es das neue Sound-Beispiel: http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID2.mp3 Das Beispiel habe ich mit Hilfe von Phillips Programm aus der High-Volage Collection umgewandelt. Die Ausgabedaten von Phillips Programm mussten dann noch mal mit einem anderen Konvertierungsprogramm in die Flash-Tabelle umgerechnet werden. Bei dem SID-Emulator fehlen immer noch die Filter. Die könnte das Schlag/Rauschgeräusch vielleicht etwas besser klingen lassen. Aber als Ausgangssignal eines 8Bit PWM-Ausgangs finde ich das Ergebnis schon mal ganz passabel. Gruss, Chistoph
Hallo Cristoph, kann man das ganze auch mit dem Intenen 8MHZ Oscillator vom ATMEGA8 machen? Wenn ja, könntest du mir dabei helfen?
Hallo Eltor, warum möchtest Du keine 16Mhz Quarz verwenden? In einem Post hat SIGINT 8Mhz verwendet, es scheint zu funktionieren. Mit 16 Mhz hat man die bessere Tonqualität wegen doppelter PWM-Frequenz und beserer Frequenzauflösung. Wenn man das aktuelle Programm halb so schnell laufen läst, ist es wie ein langsamer Platenspieler, alle Töne haben die halbe Frequenz und dauern doppelt so lang. Die Frequenzumrechnung könnte man im Programm natürlich anpassen. Gruss, Christoph
Naja, ich bin mir nichtmehr sicher, ob das wirklich richtig war was ich gehört hab. Wahrscheinlich hab ich das nur falsch interpretiert. Ich hab mir mal ein paar Gedanken zum SID-Player gemacht. (Ich hab im Moment viel um die Ohren und komme nicht dazu mehr mit AVRs rumzuspielen) Wenn ich den 6502emu aus dem Parallelthread nehme, 64k SRAM dranpappe und dann deinen SIDemu mit einem D-Latch an den Adressbus bastel, dann sollte das doch eigentlich funktionieren.Das Latch sollte als Zwischenspeicher doch reichen, bis der ATmega8 im Interrupt ist und die Daten entgegennehmen kann. Wobei hierfür wahrscheinlich 16MHz besser sind. Gruß, SIGINT
Hi, ich möchte den SID nachbauen, habe aber bisher noch kein Erfolg. Hardware: ATMEGA168 mit 16Mhz beschaltet wie auf dem Bild vom Roboterclub Fusebits gesetzt wie im Anhang Programm wie im Anhang Vielleicht könnte da mal jemand drüber schauen und mir sagen was ich falsch mache.
Roland Praml wrote: > Einen kleinen Tiefpass sollte man schon noch spendieren, nicht dass > einem noch die Hochtöner von der Hifi-Anlage abrauchen ;-) Hallo, ich stehe mit Pässen auf dem Kriegsfuss. Ich würde mir das Ausgangssignal gerne mit dem Oszi anschauen. Bisher sehe ich ja nur die PWM. Mit diversen R-C Kombinationen habe ich es versucht, aber ich sehe nur "Fraktale" :-)) es sieht eher nach Wollknäuel als nach Dreieck, Rechteck oder Sägezahn aus. Wohin muss ich denn die Grenzfrequenz legen und hast Du ein ausprobierte Kombination? Danke Stephan
Hallo Ihr, und hallo Christoph. Ich habe seit gut 2 Wochen den SID-Emu (1.8) von der Roboterclub Freiburg-Seite auf einem Atmega168 laufen, steuern tu ich ihn wie empfohlen auch über einen 2. Atmega(8), nem alten Arduino-Board... Ersten ich bin ziemlich begeistert über die Möglichkeiten und vorallem das Resultat an Sound. Hatte mir schon vor 2 Jahren einen SID gerettet und seitdem rumliegen, aber vorallem die versch. Spannungsquellen haben mich abgeschreckt... Wie auch immer, ich finde es schade und komisch, nicht mehr über das Projekt zu finden. Es gibt noch ein halbherziges How-To im Arduino-Wiki, aber irgendwie scheint nichts zu passieren. Und alle drei Seiten verlinken sich gegenseitig. Jetzt wollt ich hier mal anfragen in der Hoffnung Christoph(ch) den Autor zu treffen. ich habe gestern begonnen (versucht) den SID_Emu in eine Arduino Library zu kriegen, um dann in vertrauter Umgebung Midi draufzusetzen, bzw. das ganze einem größeren Kreis zu öffnen. Ok, und weil das ganze bisher nicht so einfach war und ich auch irgendwie das Bedürfnis hätte den Autor zu fragen, was er sich dazu denkt, diese Nachricht hier. In der Hoffnung er folgt diesem Thread noch per Benachrichtigung. oder hat sonst noch wer Erfahrung und Links zu dem Projekt? Wie sieht es mit dem Timing für die Kommunikation aus. Ist das alles sehr ineinander Verhakt? Grundsätzlich sollten sich Midi Messages ja ziemlich leicht in Registerwerte umwandeln lassen. Beste Grüße, kuk
Hallo kuk, kannst Du mir bitte deine Files mit makefile zumailen? wäre super, ich krieg meinen atmega168 nicht zum laufen. info@verbrennerheli.de Besten Dank Michael
Hallo. Ich wollte den ATmega8SID einmal ausprobieren.. Ist das chAtmega8Gong.hex die HEX-Programmdatei für das ebenfalls auf der Homepage enthaltete Soundbeispiel..? Der Name 'Gong' ist halt anderssagend?? Die EEP Datei muß ins Flash-Memory geflasht werden.. korrekt? Auch habe ich noch keine AVR GCC Umgebung aufgesetzt.. und leider ist bei der Version 1.8 mit serieller Anbindung keine compilierte HEX Datei dabei.. gibt es die irgendwo fertig..? Oder kann die bitte einmal jemand hier einhängen..? Danke! Peter
ok. Habe mir WinAVR GCC Portable besorgt.. kompiliert.. und läuft auf Pollin Eval. Board.. Super! Jetzt muss ich mal sehen.. wie ich die Version mit serieller Anbindung kompiliert bekomme... kein Makefile dabei.. habe das aus dem anderen Verzeichnis angepasst.. ihm fehlen aber noch die Uart Sachen.. mal sehen.. Peter
So. Im Anhang ZIP Archive mit Makefile+korrigierter Source und HEX (Mega8) für ATmega8SID mit serieller Anbindung. Muß das aber selbst erst noch flashen und testen.. Korrektur: Bei ATmega8 muß es in Zeile 359 RXEN anstatt RXEN0 heißen. Peter
Korrektur: Test hat nicht funktioniert.. Habe dann gesehen, das bei ATmega8 gar keine Baudrate gesetzt wird... habe ich entsprechend eingefügt.. 9600 8N1 getestet und funktioniert jetzt (wenn ich auch noch nicht weiß, wie ein SID sinnvoll angesteuert wird).. aber das kommt als Nächstes ;-) Korrigiertes ZIP Archive hängt an. Peter
Also mit der RS232 Steuerung... das klappt irgenwie nicht.. Ich habe den Eindruck, das sich da irgendwas 'überholt'..?? Der serielle Puffer ist nur 2 Byte groß.. dann wird aber sofort die SID Register gesetzt... sollte also eigendlich klappen.. Nur die 0xf0 Waitanweisungen machen so doch keinen Sinn.. Außerdem täte ein Code Cleanup sicher gut ;-) Nun, z.Z habe ich wenig Muße, da tiefer einzusteigen.. Evtl. hat auch jemand mit mehr GCC Kenntnissen hier Lust, was funktionierendes draus zu machen.. Peter
Hallo, Ich habe mir vorhin mit der auf Roboterclub-freiburg beschriebenen Hard- ud Software die Plattform aufgebaut. Später bin ich bei der Suche noch auf das Programm "SIDextractor" gestoßen. Kann mir jemand sagen, wie die ausgespuckten Dateien aufgebaut sind? Ich erkenne da zwar hexadezimale Werte, weiß aber jetzt nicht, was das Register, was den Wert beschreibt. Und vor Allem, wie bringe ich das dem Atmega bei? Anbei mal so eine typische Output-Datei plus das original-SID. Ich habe extra ein kleineres, einfacheres genommen. Selbstverständlich habe ich auch kleinere da (HVSC sein dank ;). ) Gruß, NrDesign
Sieht gut aus, sehr aufwendig. Wo gibt es den 6502 Emulator für den Atmega32?
Christoph H. schrieb: > Hallo SIGINT,es freut mich, dass es so viele Leute gibt, die sich für dieses Themainteressiern.Meine Hoffnung ist ja ein wenig, dass einige vielleicht mal ein kleinesMusikstück direkt für das SID-Emulator Programm schreiben.Man kann das relativ einfach tun. In der sound.c habe ich ein paar Notenfür die Soundgeneratoren per #define definiert ( gut, ich war etwas faulund habe nicht alle Noten aus dem SID-Datenblatt abgetippt ).In der aktuellen sound.c wird einfach mal eine Tonleiter abgespielt, einDreiklang erzeugt, die PWM mal durchfahren, die Ringmodulation getestetund Schußgeräusche mit dem Zufallsgenerator erzeugt. Die Beispiele sindglaube ich relativ einfach gehalten, so dass jeder seine eigene Melodieoder verschiedene Geräusche erzeugen kann, ohne dass er sich mit dereigentlichen Emulatorsoftware auseinandersetzen muss.Ich habe gesehen, dass es für den orginal-SID Wettbewerbe gibt, wer dieschönste Sound-Kollage mit am wenigsten Speicher erzeugen kann.Vielleicht ist es für den ein oder anderen eine Herausforderung, eineschöne Klangfolge oder eine Melodie in einen Atmega8 ohneZusatzbeschaltung hineinzuquetschen. In der aktuellen Version sind noch40% Flash frei, da kriegt man schon noch einige Noten unter.Ich wolle schon versuchen, ein paar Melodien aus irgendwelchenMIDI-Files herauszuziehen, aber ich habe leider keine MIDI-Filesgefunden und als ich ein wenig über das Format gelesen haben, erschienes mir zu kompliziert. Eigentlich bräuchte man nur die Tonhöhe und dieTondauer und wenn's schön klingen soll noch den Anschlag und denAusklang. Das könnte man einfach in den Emulator übertragen.Gruss,Christoph ist auf jeden fall ein geiles projekt nur ich kann die sound.c nicht finden
habs gefunden war bissel sehr verteckt^^ haat nicht jmd lust die mutter aller sounds zu proggen??? den tetris sound ?^^ bin gerade an einer 14*10 dotmatrix dran
Hi, ich habe versucht mal den SID Standallone V 1.2 mit AVR Studio 6 neu zu compilieren. Nach ein paar Anpassungen funktioniert das auch so weit. Allerdings spielt er keine Töne ab. Hat evtl. jemand zufällig eine aktuelle Version als Source da? Ich habe nur das Signal nach ISR (TIMER1_OVF_vect) angepasst und static const uint8_t sound[] PROGMEM = { um das const erweitert.
"ich habe versucht mal den SID Standallone V 1.2 mit AVR Studio 6 neu zu compilieren. Nach ein paar Anpassungen funktioniert das auch so weit. Allerdings spielt er keine Töne ab." Hast Du eventuell die gelbe Leitung wie auf diesem Bild gezeigt, vergessen? http://www.roboterclub-freiburg.de/atmega_sound/chMinimalSid.jpg
Ne die Leitung ist angeschlossen, funktioniert aber leider trotzdem nicht :-(
>Nach ein paar Anpassungen funktioniert das auch so weit. >Allerdings spielt er keine Töne ab." Der Hauptzweck des Programmes, wäre Töne abzuspielen. Dann kann es fast nur an den Anpassungen liegen. Hast Du eine Version, die Töne erzeugt?
Wenn ich die Standalone hex Datei brenne funktioniert es. Ich denke es liegt an der Sound.C die man für AvrStudio 6 anpassen muss da ein Const verlangt wird. Bin mir nicht sicher wie genau das anzupassen ist.
Hmm... ich habe nur AVR-Studio4 verwendet. Eigentlich sollte der Compiler einen Fehler auswerfen. Kannst Du den Output posten?
Hi, war in Urlaub, deswegen die späte Antwort. Hier der Output, nachdem ich die Zeile so angepasst habe"static const uint8_t sound[] PROGMEM = {" ------ Build started: Project: StandAL_SID, Configuration: Debug AVR ------ Build started. Project "StandAL_SID.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "C:\Users\jojo1\Documents\Atmel Studio\StandAL_SID\StandAL_SID\StandAL_SID.cproj" (target "Build" depends on it): Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll". Task "RunCompilerTask" C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all make: Nothing to be done for `all'. Done executing task "RunCompilerTask". Using "RunOutputFileVerifyTask" task from assembly "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll". Task "RunOutputFileVerifyTask" Program Memory Usage : 3302 bytes 40,3 % Full Data Memory Usage : 931 bytes 90,9 % Full Done executing task "RunOutputFileVerifyTask". Done building target "CoreBuild" in project "StandAL_SID.cproj". Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != ''). Target "Build" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets" from project "C:\Users\jojo1\Documents\Atmel Studio\StandAL_SID\StandAL_SID\StandAL_SID.cproj" (entry point): Done building target "Build" in project "StandAL_SID.cproj". Done building project "StandAL_SID.cproj". Build succeeded. ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
> Program Memory Usage : 3302 bytes 40,3 % Full
Es sieht so aus, als wenn nur das Programm kompiliert wird, aber das
sound[] array nicht. Ich nehme an, Du hast die große sound Datei, das
sollte insgesammt so etwa 15Kbyte geben.
Suche mal im Project nach sound[]. Vermutlich ist es irgenwo anders
definiert und die richtige sound[] wird nicht includiert.
>Ich denke es liegt an der Sound.C die man für AvrStudio 6 anpassen muss >da ein Const verlangt wird. Mit AvrStudio 6 kenne ich mich nicht aus. Irgendwie sieht es so aus, als wenn sound.c nicht mitkompiliert und gelinkt wird. Vielleicht musst Du in AVRStudio6 die sound.c explizit in das Projekt mit aufnehmen. Frage doch mal hier im GCC-Forumsthread bezüglich AvrStudio6 nach. Auf AvrStudio4 geht es.
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.