mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tonerzeugung unter BASCOM und AT90S2313


Autor: Max Fischer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich beschäftige mich seit kurzem mit dem AT90S2313 (4Mhz Quarz) und
versuche ihm mit Bascom Intelligenz einzuhauchen (div.Blink
u.Lc-Anzeige liegen hintermir).
Mich interessiert nun die Tonerzeugung, d.h wie kann ich z.B 440Hz
(a-Ton) oder 1Khz genau erzeugen (Tonleiter). Der Sound-Befehl ist ja
recht ungenau und wie der Timer mit Vorteiler(das "krumme" Frequenzen
herauskommen) usw.programmiert wird ist mir nicht klar.Wer hat einen
Tip für mich ? Das kpl. Programm für die AVR-Klingel" ist einfach zu
mächtig für mich trotz Kommentare.
Gruß Max.

Autor: Anton Trojosky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also einen ton erzeugst du indem du an dem pin an dem dein lautsprecher
angeschlossen ist in bestimmten abstaenden auf 1 und 0 setzt. Wenn du
in einer Sekunde den pin auf 1 und dann wieder auf null setzt hast du
ein Hertz. Jetzt musst du zwischen den Befehlen die den pin auf 1 oder
0 setzten, sbi oder cbi, noch warteschleifen einbauen. Du hast deinen
4MHz Quarz also 4 Millionen takte pro sekunde. Um 1KHz zu erseugen
brauchst du eine warteschleife von 2000 Takten zwischen den befahlen
sbi und cbi. Wenn du die warteschleife aenderst aender sich die
frequenz. Die laenge des Tons kannst du beeinflussen indem du eine
warteschleife um deine ganze procedure herum setzt. Siehe Beispiel:

ton:  mov tonlaenge,temp1    ;Tonlaenge (fequenz*sekunden/40)
        mov tonhoehe,temp2    ;Tonhoehe (1=10KHz,10=1KHz,100=100Hz,
255=39.2Hz)
        ldi temp3,0b01000001
  ldi temp4,0b00101000

an:  sbi portb,0
Zeit1:  dec temp3
  brne Zeit1
  ldi temp3,0b01000001
  dec tonhoehe
  brne Zeit1
  mov tonhoehe,temp2

aus:  cbi portb,0
Zeit2:  dec temp3
  brne Zeit2
  ldi temp3,0b01000001
  dec tonhoehe
  brne Zeit2
  mov tonhoehe,temp2

  dec temp4
  brne an
  ldi temp4,0b00101000
  dec tonlaenge
  brne an

Das einzige problem hier ist das man den 10KHz ton maximal 1s erzeugen
kann. Das kann man aber mit ein paar kleinen modifikationen aendern.

Viele Gruesse Anton

Autor: Peter Wilbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man könnte auch einfach die sound-anweisung benutzen...

sound pin, duration, pulses 'ist etwas einfacher oder ???

gruß peter

Autor: Peter Wilbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry... hatte übersehen das du das schon getestet hattest.

wenn der ton sehr genau produziert werden soll, bleibt dir nur die wahl
eine timer mit config entsprechend deiner vorgaben einzurichten
und in der isr dann je nach ton eine ausgangspin zu setzen oder
zurückzusetzen. die "auflösung" bzw. genauigkeit hängt also direkt
von
der zeit zwischen zwei isr-aufrufen ab.

Autor: Max Fischer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke erstmal für die Antworten.
Ich komme erst heute zum Antworten, vielleicht hättest Du auch ein
Beispiel in BASCOM für mich ?
Gruß Max

Autor: Anton Trojosky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
sorry, aber ich habe keine Ahnung wie das unter BASCOM geht, kann dir
leider nur die Funktionsweise unter Assembler sagen.

Gruss Anton

Autor: Seeker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo max!
hast du nach jahren endlich herausgefunden, wie man es machen könnte?
ich würde sagen mit timern. hast du evtl. entsprechenden bascom-code
parat?

bye!

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.