8-Bit Musik wiedergeben mithilfe des AT89S52, möglich oder nicht?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 28 9 2024  21:32:15      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : 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: 4128

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
Zur Homepage von QuirinO ICQ Status  

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: 4128

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. 4MHz 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.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


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 17 Beiträge im Durchschnitt pro Tag       heute wurden bisher 33 Beiträge verfasst
© x sparkkelsputz        Besucher : 182091030   Heute : 5512    Gestern : 6155    Online : 805        28.9.2024    21:32
5 Besucher in den letzten 60 Sekunden        alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0498340129852