Forum: Mikrocontroller und Digitale Elektronik PIC 18F2550 Töne erzeugen


von Gregor K (Gast)


Lesenswert?

Hallo liebe Elektronikfreunde!

Ich bin gerade mitten unter einem Projekt, bei dem ich mit meinem uC 
Frequenzen erzeugen möchte. Die Hardware, also NF-Verstärker etc. 
funktioniert einwandfrei. Jetzt muss ich die Software schreiben und mir 
fehlt der Gedankenblitz für den Anfang des Programms. Ich wäre euch sehr 
dankbar, wenn ihr ein paar hilfreiche Tips für mich habt. Ich erwarte 
keinesfalls, dass jemand von euch für mich ein fertiges Programm 
hochlädt, ich brauche nur Grundbefehle bzw Hinweise worauf ich Achten 
muss.

MFG

von Route_66 (Gast)


Lesenswert?


von Wilhelm F. (Gast)


Lesenswert?

Töne und Melodien wie in 1980-er Spielautomaten erzeugte ich schon auf 
dem Standard-8051. Das ist keine Kunst. Die damals ersten intelligenten 
Automaten hatten ja auch nur einen 8085-Hauptprozessor mit Peripherie 
auf einer Karte. Man benötigt im Programm nur geschickt die beiden Timer 
des 8051. Einer erzeugt einen Ton, der andere die Tondauer, und im 
Hauptprogramm die Melodiefolge als Übergabeparameter an die Timer.

Die Tonleiter muß man sich vorher berechnen, wie sie harmonisch in den 
Tonfolgen klingt, und im Speicher ablegen.

Man braucht noch nicht mal einen Verstärker dazu, eine Telefonhörkapsel 
an einem digitalen Port alleine reicht schon, und ist fast so laut wie 
ein Spielautomat.

Anspruchsvoller HiFi-Sound ist das dann natürlich nicht. Es klingt aber 
auch gar nicht schlecht oder krächzend.

von Route_66 (Gast)


Lesenswert?

Kleiner Auszug aus meiner alten Melodieklingel im AT89C2051

;**************  Beginn der Melodien **********************
;jeder Ton ein Byte
;Aufbau
;  H-Nibble legt Oktave und Tonlänge fest
;      1.Okt  2.Okt.  3.Okt.  4.Okt.
;  achtel Note 100ms  0xh  1xh  2xh  3xh
;  viertel Note 200ms  4xh  5xh  6xh  7xh
;  halbe Note 400ms  8xh  9xh  Axh  Bxh
;  ganze Note 800ms  Cxh  Dxh  Exh  Fxh
;
;  L-Nibble bestimmt Tonhöhe und Sonderfunktionen
;  x0h  - Pause
;  x1h  - c
;  x2h  - cis
;  x3h  - d
;  x4h  - dis
;  x5h  - e
;  x6h  - f
;  x7h  - fis
;  x8h  - g
;  x9h  - gis
;  xAh  - a
;  xBh  - ais
;  xCh  - h
;  xDh  - könnte für x-mal Wiederholung stehen
; aber noch nicht implementiert
;  xEh  - Liedende
;  xFh  - Tabellenende

von Wilhelm F. (Gast)


Lesenswert?

Route_66 schrieb:

> ;  x1h  - c
> ;  x2h  - cis
> ;  x3h  - d
> ;  x4h  - dis
> ;  x5h  - e
> ;  x6h  - f
> ;  x7h  - fis
> ;  x8h  - g
> ;  x9h  - gis
> ;  xAh  - a
> ;  xBh  - ais
> ;  xCh  - h

Ich berechnete damals die Tonfrequenzen als 16-bit-Werte, und bin 
erstaunt, daß es anscheinend auch 8 bit tun. Vier der zwölf Töne einer 
Oktave klangen für mein Ohr aber unharmonisch, obwohl sie doch in einer 
Folge berechnet wurden. Die habe ich bei Melodienprogrammierung weg 
gelassen. Ich habe noch nicht gesucht und gefunden, warum.

von Route_66 (Gast)


Angehängte Dateien:

Lesenswert?

Wilhelm Ferkes schrieb:
> Ich berechnete damals die Tonfrequenzen als 16-bit-Werte, und bin
> erstaunt, daß es anscheinend auch 8 bit tun.

Das sind hier sogar nur 4 Bit!
Das ist der Tabelleneintrag für einen Ton: Note, Tonlänge, Oktave.
Wenn ein Lied zu Ende ist, dann steht da 0xFE. Wenn das letzte Lied zu 
Ende, dann steht 0xFF - also von vorn. Melodieklingel halt.

Ich habe hier auf dem Server nur ein Teil des Listings gefunden - ohne 
Garantie auf Funktion. Das Original liegt auf einer Diskette irgendwo im 
Schrank.

von Wilhelm F. (Gast)


Lesenswert?

Route_66 schrieb:

> Das sind hier sogar nur 4 Bit!
> Das ist der Tabelleneintrag für einen Ton: Note, Tonlänge, Oktave.

Danke.

Erstaunlich, daß es sogar mit 4 bit geht. Ich hätte da jetzt vermutet, 
daß man schon eindeutig Tonabweichungen hörte.

Ich orientierte mich eben immer wirklich z.B. an einem Grundton a0 mit 
440 Hz, wo dann mit Grundton plus dem Multiplikanden n (wobei 0 < n < 
12) mal zwölfte Wurzel aus zwei die 12 Töne einer Oktave richtig 
gebildet werden.

Bei beliebigem Quarz, und wenn kein Wert auf den Grundton gelegt wird, 
sicher, da geht es vielleicht mit 4-bit-Werten. Hauptsache, die Ohren 
schmerzen wegen unharmonischer Töne nicht.

von Route_66 (Gast)


Lesenswert?

Hallo!
Es geht natürlich nicht mit 4 Bit. Die sind doch nur Zeiger auf eine 12 
stellige 16 Bit Tabelle. Bei der Oktave wird ausgenutzt, das die 
Frequenzen immer doppelt/halb so groß sind. Eine Oktave hat mit 
Halbtönen 12 Noten. Bleiben also von den 16 möglichen 4 Bitter noch 4 
für Sonderfunktionen.
(Pause, Liedende, Tabellenende)

von Route_66 (Gast)


Lesenswert?

Sorry für Doppelpost
Die Frequenzen sind im Listing ab Zeile 173.

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
Noch kein Account? Hier anmelden.