Sound für MOUSE

SN76489 Sound generatorFragt man einen Dreijährigen was für Geräusche eine Maus macht, so bekommt man vermutlich die Antwort – sie piepst. Damit ist klar, auch MOUSE muss Töne von sich geben können. Cool wäre natürlich ein SID Chip wie im C64, allerdings ist da auch der Aufwand größer, denn der benötigt eine externe Beschaltung, genau 1MHz Takt (wenn man nicht alles umrechnen will) und auch noch 12V zusätzlich zu den 5V. Daher nehme ich zunächst den SN76489AN Sound Chip.

Damit befinde ich mich in recht guter Gesellschaft, denn auch der BBC Micro und diverse Sega Systeme haben den Chip eingesetzt. Der SN76489 stellt 3 Ton- und einen Rauschgenerator zur Verfügung. Die Frequenz der Tonkanäle bestimmt sich über ein festgelegtes Teilerverhältnis aus der Basisfrequenz des Clock-Signals. Ich verwende einen 3MHz Quarz-Oszillator für den Takt. Tonhöhen werden über einen 10bit Wert (0-1023) gesetzt. Die Formel ist recht einfach:
value = 3000000 / ( 32 * Frequenz)
SN76489 plus VerstärkerEinen Kammerton A mit 440 Herz bekomme ich also bei einem Wert von 213. Das Datenblatt ist recht detailliert, hat aber einige kleine Fehler und ist teilweise etwas unlogisch aufgebaut. Z.B. sind bei der Beschreibung der einzelnen Datenbits für die Steuerung MSB und LSB vertauscht, daher habe ich auch zunächst Probleme bei der Verkabelung bzw. der Reihenfolge der Bits im Datenbyte gehabt.
Um das Testen einfacher zu gestalten verwendet ich einen Arduino Mega, um den Soundchip anzusteuern. Zusätzlich muss noch ein kleiner Verstärker herhalten, um den Lautsprecher anzuschließen. Am Ende hat es sich auch herausgestellt, das es einfacher ist die Datenleitung zwischen Arduino und Soundchip zu vertauschen. D0 an D7, D1 an D6, D2 an D5 usw.
Das übertragen der Daten selbst ist eigentlich recht einfach. Es gibt zwei Ein-Byte Befehle (Noise-Quelle und Lautstärke setzen) und einen Zwei-Byte Befehl, um die Tonhöhe zu setzen.
Die zwei Byte setzen sich dann aus 3 Bit Register-Nummer und 10 Bit Frequenzdaten zusammen.
Gesteuert wird das Ganze über eine /CE (Chip enable) und eine /WE (write enable) Leitung. Damit ist der Chip sehr einfach in die Adressdekodierung von MOUSE einzubinden.
Der Chip benötigt nach dem Übertragen eines Bytes ca. 32 Clock-Zyklen zum Verarbeiten. Das sind bei 3MHz knapp 10 Mikrosekunden.
Der Rest ist etwas Fleißarbeit mit der Arduino-IDE.
SN76489Sound Arduino Code
Da ich kein Musiker bin, habe ich mich erstmal nur ein einer Tonleiter mit einfachen Dreiklängen versucht, um alle drei Stimmen zu nutzen.
Das hört sich dann ungefähr so an:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*