-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Töne erzeugen, ZVEI Geber mit Mega8

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2008
    Beiträge
    10

    Töne erzeugen, ZVEI Geber mit Mega8

    Anzeige

    Ich möchte mit einem AtMega8 Töne erzeugen, die zwischen 1060 und 2600Hz liegen.
    Es handelt sich um eine Folge von 5 unterschiedlichen Tönen, wobei jeder Ton gerade mal 70mS lang ist.
    http://de.wikipedia.org/wiki/5-Ton-Folge

    Wie kann ich ohne möglichst zusätzliche Hardware diese Töne aus dem Mega8 herraus zaubern?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    25
    Beiträge
    870
    Hi,
    eigentlich brauchs du nur einen kleinen Speaker (z.B.von Reichelt) und dann kannst du mit einem Timer das Signal erzeugen.
    MfG Christopher \/


  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2008
    Beiträge
    10
    Danke für deine Antwort.

    Mit dem Timer bekomme ich doch nur einen Ton herraus, oder?
    Ich brauche aber verschiedene Töne, die hintereinander abgespielt werden sollen.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: Töne erzeugen, ZVEI Geber mit Mega8

    Zitat Zitat von Halvar
    Ich möchte mit einem AtMega8 Töne erzeugen, die zwischen 1060 und 2600Hz liegen.
    Hallo Halvar!

    Gestatten, Halvar mein Name. :-)

    Mit Buzzer (Piezo) oder Lautsprecher und Transistor (laut): http://halvar.at/elektronik/kleiner_...er0_als_timer/

    Mit Lautsprecher aber ohne Transistor (leise): http://www.mcselec.com/index.php?opt...=175&Itemid=41

    Dieser Beitrag http://www.loetstelle.net/forum/view...?p=11781#11781 und die folgenden Beiträge dürften auch noch interessant sein.

    Wenn du mit dem Timer1 arbeitest, dann brauchst du nur zuerst den Überlaufwert in das Pseudo-Register Compare1a schreiben. Danach schaltest du den Timer1 so lange ein, so lange der Ton dauern soll. Danach schaltest du den Timer einfach wieder aus.

    Code:
    STOP TIMER1
    START TIMER1
    Es gibt auch noch den SOUND-Befehl, den ich hier nicht verschweigen möchte. Der ist dann interessant, wenn es nicht so genau auf die Frequenz ankommt und das Programm in der Zwischenzeit sowiso nichts zu tun hat.

    mfg
    Gerold
    :-)

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Ein 8Ohm Lautsprecher aus einem PC direkt am Kontroller-Pin macht auch viel Krach:
    http://www.youtube.com/watch?v=Yw3iHIym58k

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2008
    Beiträge
    10
    Danke euch beiden.

    Die Lautstärke ist Nebensache, da der Ton hinterher direkt auf die NF-Eingangsstufe der Funkgerätes gehen soll.

    Das mit dem Timer leuchtet ein, wie ändere ich ganz schnell die Tonhöhe?

    Ich möchte jeder Ziffer einen Ton zu ordnen. Diese Ziffer möchte ich vorher eingeben, und auf Knopfdruck die eingestellte 5Ton-Folge abbspielen.
    Wenn ich den Timer configuriert habe, lässt er sich doch nicht ganz fix um stellen?

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Zitat Zitat von Halvar
    Wenn ich den Timer configuriert habe, lässt er sich doch nicht ganz fix um stellen?
    Hallo Halvar!

    Code:
    $regfile = "M8def.dat"
    $crystal = 8000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    Config Portb.1 = Output       'OC1A
    
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
    Stop Timer1
    
    Declare Sub Frequency_set(byval Frequency As Word)
    Declare Sub Frequency_output_on()
    Declare Sub Frequency_output_off()
    
    
    Do
       Call Frequency_set(1060)
       Call Frequency_output_on()
       Waitms 70
       Call Frequency_set(1500)
       Waitms 70
       Call Frequency_set(2600)
       Waitms 70
       Call Frequency_output_off()
       Wait 3
    Loop
    
    End
    
    
    Sub Frequency_set(byval Frequency As Word)
       'Voreinstellung = 8000000 / (Hz * 2)
    
       '1060 Hz: 8000000 / (1060 * 2) = 3773,5849 = 3774
       'Test: 8000000 / 3774 / 2 = 1059,88 Hz
    
       '1500 Hz: 8000000 / (1500 * 2) = 2666,66 = 2667
       'Test: 8000000 / 2667 / 2 = 1499,81 Hz
    
       '2600 Hz: 8000000 / (2600 * 2) = 1538,46 = 1538
       'Test: 8000000 / 1538 / 2 = 2600,78 Hz
    
       Local Tmp_single As Single
       Local Tmp_word As Word
    
       Tmp_single = Frequency * 2
       Tmp_single = 8000000 / Tmp_single
       Tmp_word = Tmp_single
    
       Compare1a = Tmp_word
    End Sub
    
    
    Sub Frequency_output_on()
       Start Timer1
    End Sub
    
    
    Sub Frequency_output_off()
       Stop Timer1
    End Sub
    mfg
    Gerold
    :-)

    EDIT: Code ausgebessert

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Hallo Halvar!

    Ich habe das jetzt nachgemessen. Statt 1060 Hz hatte ich am Ausgang ca. 1090 Hz. Du brauchst unbedingt einen Quarz, wenn du eine genaue Frequenz ausgeben möchtest. Mit dem internen RC-Oscillator kommst du nicht weit. ;-)

    mfg
    Gerold
    :-)

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2008
    Beiträge
    10
    Hallo Gerold - Halver,
    Hey, das ist ja schon ein fertiges Programm!
    Ausgang ist OC1A, also PinD1 ? Kann ich den auch erstmal mit einem Lautsprecher und Widerstand belasten, oder arbeitet der Pin als OC anders?
    Natürlich habe ich keinen 8Mhz Quarz rum liegen, aber funktioniert doch auch mit jeder anderen Frequenz bis 16Mhz? Einen mit 10,24 Mhz hätte ich liegen.

    Danke dir !


    Gerade nen Fehler entdeckt: OC1A ist PinB1 , nicht PinD1.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Hallo Halvar!
    Zitat Zitat von Halvar
    Kann ich den auch erstmal mit einem Lautsprecher und Widerstand belasten, oder arbeitet der Pin als OC anders?
    Schaltpläne findest du hier:
    - http://www.mcselec.com/index.php?opt...=175&Itemid=41
    - http://halvar.at/elektronik/kleiner_...er0_als_timer/


    Zitat Zitat von Halvar
    Natürlich habe ich keinen 8Mhz Quarz rum liegen, aber funktioniert doch auch mit jeder anderen Frequenz bis 16Mhz? Einen mit 10,24 Mhz hätte ich liegen.
    Die Frequenz des Quarz ist egal. Wichtig ist nur, dass du das Programm entsprechend anpasst. "8000000" sollte dann natürlich durch "10240000" ersetzt werden. Und die FuseBits musst du natürlich auch anpassen, dass der Systemtakt vom Quarz genommen wird. http://halvar.at/elektronik/kleiner_bascom_avr_kurs/ (Beiträge 22-25)

    mfg
    Gerold
    :-)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •