8-Bit Musik wiedergeben mithilfe des AT89S52, möglich oder nicht? Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
8-Bit Musik wiedergeben mithilfe des AT89S52, möglich oder nicht? |
|
|
|
|
BID = 682366
Strece Gerade angekommen
Beiträge: 3 Wohnort: Beckum
|
|
Hallo,
also wir haben in der Schule in unserem Fachpraxis Unterricht ein Microcontroller Board gebaut.
Verbaut ist ein AT89S52: Datenblatt
So vor kurzem haben wir in C einen Wecker programmiert, der auf eine einfache Weise über eine Box einen Ton ausgibt, es ist aber nicht wirklich ein Musikstück sondern einfach nur ein längeres knatschen oder pfeifen.
Jetzt habe ich vor kurzem auf Youtube folgendes Video gesehen:
http://www.youtube.com/watch?v=EhaRjCkftug&feature=related
http://www.youtube.com/watch?v=x5sxOnymKjQ (Original Theme von Zelda NES)
Es ist eine 8-Bit Musik Version eines bekannten Zelda Titels.
Mir kam der Gedanke, da ja auf dem Datenblatt auch 8-Bit steht, der NES früher solche Musik gespielt hat und der AT89S52 schätze ich eine gleichwertige Leistung wie der frühere NES Prozessor erbringen kann, dass man eine solche 8-Bit Musik mithilfe meines Boards auf einem Lautsprecher wiedergeben kann.
Daten des NES:
Prozessor: Ricoh 2A03 (http://de.wikipedia.org/wiki/Ricoh_2A03)
Taktrate: 1,77 MHz
Ich habe dazu, diese Seite gefunden: http://www.sixca.com/micro/mcs51/music51/index.html, aber leider blicke ich da nicht wirklich durch den Assembler Code durch, bzw. wie ich das auf dieses Youtube Video umsetzen kann.
Ein anderes Problem wird wohl der Lautsprecher sein, da weiß ich leider wenig wie ich den am besten am Board anschließe.
Würde folgendes dafür gehen:
Verstärker, an diesem den Lautsprecher und an dem einen Eingang dann das Board verbinden?
Oder muss ich mir da schon was anderes einfallen lassen?
Also ich kann ein wenig Assembler, aber leider nicht wirklich genug, da wir meistens nur in C programmieren.
Wenn mir jemand bei diesem Problem helfen könnte, wäre ich sehr dankbar.
Mfg,
Strece
PS: Im Anhang befindet sich ein Bild meines Boards
Edit Don:
Ich habe mir mal erlaubt, dein Bild hier auch als Bild hochzuladen. Die Qualität ist so dermaßen mies, dass man dafür keine 1.3MB benötigt.
[ Diese Nachricht wurde geändert von: Strece am 7 Apr 2010 14:39 ]
[ Diese Nachricht wurde geändert von: DonComi am 7 Apr 2010 17:03 ] |
|
BID = 682398
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Hallo Strece und willkommen im Elektronikforum!
---
Dein Problem ist lösbar.
Überlege dir doch erstmal, wie man den Ton erzeugen kann.
Dazu bietet sich am besten ein Timer an, den man so konfiguriert, dass periodische Interrupts ausgelöst werden (einige Timer kontrollieren sogar direkt einen IO-PIN, so dass man um die Interrupts herumkommt! ).
Diese Zeiten sind die Kehrwerte der Tonfrequenzen, die man spielen will.
Willst du z.B. den Kammerton 'a' spielen, so muss eine Frequenz von 440Hz erzeugt werden.
Bei AVRs sind die Timer so aufgebaut, dass sie Vorteiler für die Zählfrequenz haben. Das erhöht genaugenommen die Auflösung des Timers.
Dies ist besonders von Vorteil, wenn man relativ schnelle Prozessoren hat.
Wenn dir klar ist, wie du das berechnest und wie du die Töne erzeugst (Tabellen mit Ton gegen Frequenz gibts im Internet), kannst du dir überlegen, wie du die Töne verstärkst und an den LS weitergibst.
Bedenke auch, dass du mit der genannten Methode Rechtecksignale erzeugst, die sehr oberwellenreich sind.
Soll es wirklich gut klingen, dann kann man auch z.B. einen Sinus softwaremäßig zusammensetzen und diesen über einen DAC ausgeben. Die Taktung ist aber dann um Größenordnungen höher als der zu erzeugende Ton.
Daher würde ich bei dem einfachen Rechteck bleiben.
Um quasi polyphone Töne zu erzeugen müssen diese moduliert werden.
P.S.: Ich habe sowas auch gerade als Teilstück eines größeren Projekts gemacht, geht eigentlich nur über akustische Rückmeldung mit verschiedenen Tönen.
Ganze Melodien wären denkbar. Ansteuerung findet über eine H-Brücke und zwei größere Elkos statt, das reicht.
_________________
|
|
BID = 682401
Rafikus Inventar
Beiträge: 4150
|
Ich glaube, Strece möchte Musikstücke abspielen, welche mit 8 Bit Auflösung digitalisiert wurden. Ist denn die Samplingrate bekannt? Liegen die Daten in reiner Form vor, oder wurde mit irgendeinem Rechenverfahren gepackt?
Rafikus
|
BID = 682403
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Für mich hört sich sein Audio-Beispiel im Link eher nach Midi-Wavetable an.
Ählicher Thread:
Link
|
BID = 682406
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ich glaube, dass er den Zusammenhang zum 8-Bit-Prozessor fälschlicherweise auf die Erzeugung des Tones übertragen hat.
8-Bit übertragen auf den Sound würde heißen, dass ich Spannungen mit 256 unterschiedlichen Pegeln erzeugen kann, und somit 8 Bit Auflösung bekomme. Das wäre z.B. dann der Fall, wenn man einen 8-Bit-DAC nutzt, oder mit einer PWM zusammensetzt.
_________________
|
BID = 682499
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
|
8-Bit übertragen auf den Sound würde heißen, dass ich Spannungen mit 256 unterschiedlichen Pegeln erzeugen kann, und somit 8 Bit Auflösung bekomme.
|
Mal kurz überschlagen:
Musik = Frequenzbereich bis ca. 8kHz (Teenie Qualität )
8 Bit Auflösung = 256 Stufen
Mindestens doppelte PWM Rate wie max. Frequenz.
8kHz * 2 * 256 -> 4 Mhz PWM Auflösung ...
Ohne den µC zu kennen - das wird eine Herausforderung ...
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 682553
Strece Gerade angekommen
Beiträge: 3 Wohnort: Beckum
|
Hi,
ok ich sehe schon es scheint doch schwerer zu sein.
Ich hatte einfache Gedanken, sprich ich würde z.B. die P0 Ausgänge benutzen und dabei würden dann die 8-Bit immer verschiedene Tonhöhen darstellen, aber wahrscheinlich kann man damit keine polyphonen Töne ausgeben, bzw. ist dieser Gedanke wohl so einfach gar nicht umzusetzen.
Jetzt kam die Idee mit einem Timer, ich würde jetzt denken man schaltet nen Timer und in dessen Interrupts dann die Ausgänge zum Lautsprecher. Liege ich da in etwa richtig?
Ich weiß das die NES das früher konnte, leider nicht wie, aber die hatte doch bestimmt auch nur nen einfachen µC, der das steuerte.
Tut mir leid, wenn ich leider nicht soviele Infos geben kann, da ich nur wage Ansätze habe solch eine Musik wiederzugeben.
Sogar "Alle meine Entchen" würde mir schon reichen^^
Mfg, Strece
|
BID = 682563
Rafikus Inventar
Beiträge: 4150
|
Du hast immer noch nicht angegeben, um welche 8Bit Musik es sich da handelt, oder ist das vielleicht gar nicht bekannt?
Der Gedankengang aus dem ersten Absatz ist leider falsch.
Ich habe keine Ahnung, was ein/eine NES ist (warum kannst Du es nicht einfach mal hinschreiben, worum es geht?), jedoch vermute ich, daß da ein spezieller mehrkanaliger Tongenerator verwendet wurde.
Die früheren "Home Computer" generierten die Töne auch nicht im Prozessor, sondern bedienten sich spezieller Generatoren.
Könntest Du vielleicht den Ausdruck "nen" in Deinem Text durch das normale "einen" ersetzen?
Rafikus
|
BID = 682577
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Vielleicht wird's einfacher, wenn Du einen 8 (oder 10) Bit D/A Wandler verwendest - dann brauchst Du die 256 Stufen nicht aus binären Signalen von µC generieren lassen, sondern könntest den benötigten Spannungswert als 1 Byte ausgeben. Das würde jedenfalls die Arbeit des µC deutlich erleichtern.
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 682584
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
@Hajos
Ich schlug ja auch einen normalen DAC vor, ob nun R2R oder was anderes.
Da er aber immer von einem Pin redet, kann man nur mit einer PWM die DA-Wandlung vornehmen.
Die Leute, die er mit der erzeugten PWM mit ca. 4M Hz aufgrund fehlender Störungsmaßnahmen stört, werden sich freuen...
Also, damit was draus wird:
Verzichte auf polyphonen Mist und mach, wie ich es oben sagte: einen Timer und einen IO-Pin mit H-Brücke und zwei größeren Elkos.
Damit kannst du einfache Töne erzeugen (natürlich hast du ordentlich Oberwellen drauf...)
Aber immerhin erstmal ein Erfolgserlebnis.
_________________
|
BID = 682585
Strece Gerade angekommen
Beiträge: 3 Wohnort: Beckum
|
Hi,
also vorweg, ja ich werde nen durch einen ersetzen.
So dann wieder zu meinem Problem, die Melodie vom Zelda Theme habe ich als 2 Midi Files vorliegen, sofern es erlaubt ist hänge ich diese mal als Anhang an.
Die NES auch Nintendo Entertainment System genannt, ist eine Heimkonsole von Nintendo aus dem Jahre 1986. Wiki-Artikel
Dort ist ein bekanntes Spiel Zelda, ich finde das Theme vom alten Zelda Spiel so genial, wodurch die Idee halt kam mein Board zu porgrammieren um diese damit auf einem Lautsprecher wiederzugeben können.
Das mein Gedanke aus dem ersten Ansatz falsch ist, habe ich mir schon gedacht, wäre zu einfach gewesen. Nun wie komplex die Midi Files sind oder ob das überhaupt 8-Bit Musik ist, bzw. spielbar auf einem µC kann ich leider nicht genau sagen, da es nunmal das erste mal ist, dass ich in einem solchen Thema schnuppere.
Deswegen frag ich ja die Profis hier, ob das überhauptlich möglich ist und es dazu Informationen gibt die mir weiterhelfen.
Wie würde das mit einem A/D-Wandler aussehen, wir der einfach ans Board angeschlossen und an diesen der Lautsprecher?
Ich hoffe ich habe so gut wie ich konnte alle Informationen genannt.
Mfg, Strece
EDIT:
Ok habe grade den letzten Beitrag gelesen, da meine Midi Files bestimmt polyphon sind, sind diese wohl nicht geeignet und ja einfache Töne sind auch schon ein Erfolg.
[ Diese Nachricht wurde geändert von: Strece am 8 Apr 2010 16:26 ]
|
BID = 682615
alpha-ranger Schreibmaschine
Beiträge: 1517 Wohnort: Harz / Heide
|
Hi,
erstmal Entwarnung: Es geht !
So haben wir damals auch dem ZX-Spectrum das Sprechen beigebracht.
Und zwar als Aufnahme und Wiedergabegerät.
Jeder neue CD-Spieler macht das heute genauso, nämlich als 1 Bit Quantisierer.
Du programmierst eine Schleife, und gibst jedes Bit einzeln nacheinander auf den Ausgang. Dann das nächste Byte.
Mehr als ein Gag wird das nicht.
Wenn du wirklich 8 bit analog Auflösung rausgeben möchtest, mußt du eine PWM bemühen. Da kann man dann durch Oversampling, d.h. wiederholtes Ausgeben des Wertes mit interpolation der Werte aus aktuellen und folgenden Byte die Qualität auch bei geringen Datenfluß erhöhen.
mfG
_________________
Wie der alte Meister schon wußte: Der Fehler liegt meist zwischen Plus und Minus. :-)
Und wenn ich mir nicht mehr helfen kann, schließ ich Plus an Minus an.
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 11 Beiträge verfasst © x sparkkelsputz Besucher : 182398705 Heute : 5903 Gestern : 7548 Online : 544 25.11.2024 19:04 6 Besucher in den letzten 60 Sekunden alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0565190315247
|