www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tonleiter erzeugen


Autor: Michael 0. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte mit meinem 90s4433 ein hübsche tonleiter erzeugen, kann mir 
da jemand mit dem asm-code und bei der verstärkerschaltung für ein 
kleinen lautsprecher weiterhelfen?
danke.

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

kannst du noch mehr zu deinen Anforderungen sagen.

Soll das Ausgangssignal Sinus sein oder reicht dir ein Rechteck?

Für Sinus kannst du dir mal das DDS-Projekt unter Projekte anschauen und 
passend abändern.

Hast du die Frequenzen schon für deine Tonleiter?

440Hz ->Kammerton a
danach mit dem Multiplikator 2^(1/12) in Halbtonschritten nach oben.

mfg
werner

Autor: Michael 0. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja ich hab nich viel ahnung von sinus und rechteck signalen, was ist 
denn da der unterschied?
Ich wollte nur am ausgang meines µC nen lautsprecher anschliessen der 
dann die töne wiedergibt, so wie beim internen lautsprecher im pc 
gehäuse.
Aber ich brauch da irgendwie noch eine verstärkerschaltung weil hab 
schon mal rumexperimentiert und da war der ton ganz leise. Vielleicht 
war aber auch nur mein programm falsch.

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Unterschied von Sinus und Rechteck ist der Klang.

Aber laß dir doch nicht alles aus der Nase ziehen,
wie weit bist du den schon gekommen?

Einzelnen leisen Ton erzeugen?
leise Tonleiter erzeugen?

du kannst ja ggf. den Code anhängen.

einfache Verstärkerschaltung:

                 5V
                  |
                  C
uC_pin------R1----B
                  E
                  |
                  +----C1----lautsprecher--+
                  |                        |
                  R2                      Masse
                  |
                Masse


R1=1k
R2=50Ohm
C1=möglichst groß

CBE ist ein NPN-Transistor

mfg
werner

Autor: Michael 0. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal das du mir so schnell antwortest.
Also das ist der code, is noch nicht viel:

.include "4433def.inc"
.def temp = r16

         ldi temp, RAMEND
         out SPL, temp

         ldi r16, 0xFF
         out DDRB, r16

loop:
  ldi r16, 0b11111110
        out PORTB, r16
  rcall PAUSE
  ldi r16, 0b11111111
        out PORTB, r16
  rcall PAUSE
        rjmp loop


PAUSE:

          ldi  R17, $09
WGLOOP0:  ldi  R18, $6E
WGLOOP1:  dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0

          ldi  R17, $01
WGLOOP2:  dec  R17
          brne WGLOOP2
ret

Also der schalten einfach den ersten ausgang von B abwechselnd auf high 
und low, mit einer kleinen verzögerung dazwischen. Wobei ich auch nicht 
weise ob die Pause schleife ne richtige lösung, hab ich aus dem 
DelayProgramm, der sollche schleifen erzeugt mit einer bestimmten 
wartezeit.
Sozusagen hab ich es bis jetzt nur geschafft einen leisen piepton zu 
erzeugen.

Autor: Werner Hoch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab das mal kurz abgetippt:

Das Programm holt sich jeweils die Wartezeit=Impulsdauer=Pausendauer aus 
dem Speicher.
Dann werden jeweils 1000 gleiche Perioden ausgegeben.
Dann wird der nächste Ton geholt usw.

Ich hoffe der Code ist einigermaßen lesbar.

Ich hab das Programm nicht getestet, hoffe aber das es läuft.

Die Tonfolge wird in Abhängigkeit von der Tonhöhe immer schneller, die 
Korrektur überlass ich dir.

Für einen Musiker wird sich die Tonfolge aufgrund von Rundungsfehlern 
ziemlich schrecklich anhören.

Die Lautstärke hat natürlich nichts mit dem Programm zu tun, aber ich 
denke das ist dir auch klar.

mfg
werner
PS: ich würde das Programm anders zusammenbauen, aber ich wollte hier 
nichts überstürtzen.

Autor: Werner Hoch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ach du schei....

das Programm enthält einen bösen und einen kleinen Fehler:

- Der Startpointer muß natürlich tonleiter*2 sein.

- beim 2. Durchlauf ist R0=0 => Ton=256 anstatt 254


mfg
werner

Autor: Michael 0. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,
es funktioniert, hab nur zwei kleine probleme.
Wenn ich die verstärkerschaltung so baue, wie du sie mir oben aufgemalt 
hast, dann ändert sich die lautstärke nich, wenn ich allerding den 
kondensator weglasse (hab nen 100µF benutzt) ist es zwar lauter aber 
mein spannungsregler IC wird sehr heiss.
Das zweite problem ist das die töne sich richtig gut anhörn aber immer 
so ein anderer ton drauf liegt, wie ein brummen.
Ist es irgendwie möglich so ein richtig sauberen ton, wie bei einer 
Armbanduhr zu erzeugen, wenn die zum beispiel piep wenn der alarm 
losgeht?

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir scheint, dein Lautsprecher ist niederohmiger als ich dachte.

Für den Fall daß der Lautsprecher nur 8 oder gar 4Ohm hat, mußt du die 
beiden Widerstände verkleinern.

Im Idealfall ist dann R1 kleiner als die Lautsprecherimpedanz.

Der Kondensator ist noch etwas klein, sollte aber gehen.

Den Kondensator darf man aber nicht weglassen, dieser filtert den 
DC-Strom aus.

Der Spannungsregler wird wegen des DC-Stromes heiß.

mfg
werner

Autor: jjjjjjjjjjjjjjjjooooo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a bissle schlecht

Autor: The Devil (devil_86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn diese 'Alte-Thread-Ausgraberei'??

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.