Pieptoene erzeugen mit einem Atmega8

Gast #3166846
Lesenswert?

Hallo an euch alle


Ich hoffe ihr koennt mir weiterhelfen, ich moechte ein Programm 
schreiben welches einfache Pieptoene erzeugt.

Ich hab schon ein kleines Programm geschrieben allerdings sind die Toene 
keine Pieptoene sondern leider sehr stumpfe Toene, hat vlt einer eine 
Idee wie ich solche Toene hinkriege? Die Toene sollten der einer 
Einparkhilfe gleichen.
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <util/delay.h>
4

5
int main(void)
6
{
7
  DDRC |= (1<<PC0);
8
  TCCR1B |= (1<<WGM12);
9
  
10
  OCR1A = 15624;
11
  
12
  TCCR1B |= ((1<<CS10) | (1<<CS11));
13
  
14
  for(;;)
15
  {
16
    if(TIFR&(1<<OCF1A))
17
    {
18
      _delay_us(1);
19
      PORTC ^= ((1<<PC0));
20
      _delay_ms(1);
21
      
22
      TIFR = (1 << OCF1A);
23
      
24
    }
25
  
26
    
27
    
28
    
29
        
30
    }
31
}
#3166879
Lesenswert?

Das wird schwierig.

Das Problem ist, dass die Klangfarbe durch die Form der Schwingung 
bestimmt wird. Momentan erzeugst du eine Rechteckschwingung. Das ist 
zwar einfach zu machen, klingt aber zugegebenermassen eher bescheiden. 
Der Aufwand, im µC eine andere Kurvenform zu erzeugen ist nicht ohne und 
dann bleibt immer noch die Frage, wo nimmst du eigentlich eine andere 
Kurvenform her und wie klingt die?

http://www.mikrocontroller.net/articles/Klangerzeugung
#3166931
Lesenswert?

Du hängst an den PWM Ausgang einen Tiefpass.
Dann legst du dir ein Array an, das grobe Werte einer Sinus-Schwingung 
beinhaltet.
Mit einem Timer-Interrupt lädts du dann nacheinander die Werte des 
Arrays in dein PWM-Modul, wodurch du am Ende eine Sinus-Schwingung am 
Ausgang hinbekommst und somit eine schöner konstanter Ton.

Natürlich kannst du in das Array auch eine x-beliebige Tonfolge ablegen 
oder einfach ein WAV-File rein laden und dieses dann mit dem Timer 
abspielen lassen. (Gewünschtes 8-bit WAV-File mit einem Hex-Editor 
öffnen, geeigneten Bereich suchen und in ein Array kopieren)
#3167116
Lesenswert?

Heimcomputer der 80er Jahre und die ersten Soundkarten für PC's hatten 
zur Tonerzeugung einen FM Synthese Chip. Vielleicht kannst Du so einen 
Chip irgendwo bekommen.

http://http://de.wikipedia.org/wiki/AdLib

Wenn es schöner klingen soll kommt auch die Wavetable Synthese mit Hilfe 
eines Midi Synthesizers in Frage. Den kann man ganz einfach direkt an 
die serielle Schnittstelle anschließen. Es gab mal preisgünstige Midi 
Karten als Add-On für Soundblaster. Die haben eine ganz simple 
Anschlusbelegung (+5V, Serieller Port, Audio Ausgang). Vielleicht kannst 
Du so eine Karte günstig ersteigern.

http://en.wikipedia.org/wiki/Creative_Wave_Blaster

Diese Midi Synthesizer gibts auch and Standalone Gerät.
Gast #3167358
Lesenswert?

>Vielleicht kannst Du so einen Chip irgendwo bekommen.
>http://http://de.wikipedia.org/wiki/AdLib

Man kan ein Problem schon mir Hardware lösen. Allerdings geht es heute 
vermutlich mit Software billiger:

http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html

>Wenn es schöner klingen soll kommt auch die Wavetable Synthese mit Hilfe
>eines Midi Synthesizers in Frage.

>Die Toene sollten der einer Einparkhilfe gleichen.

Ein Midi Synthesizer für eine Einparkhilfe ist eine lustige Idee ;-)

Die Wavetable für das Piano hier lässt sich relativ einfach durch eine 
Wavetable für ein "Piep", "Ping", "Klack" oder Chirp ersetzten:
http://www.hobby-roboter.de/forum/viewtopic.php?f=5&t=141

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren