Forum: Mikrocontroller und Digitale Elektronik Pieptoene erzeugen mit einem Atmega8


von Azubi (Gast)


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
}

von Karl H. (kbuchegg)


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

von Azubi (Gast)


Lesenswert?

schade, ich hab mir das am Anfang sehr einfach vorgestellt aber dann 
merkte ich dass es doch nicht so ganz ohne ist.

danke schoen Hr.Buchegger, Sie haben mir schon sehr oft geholfen.

von Oliver R. (roliver)


Lesenswert?

Hallo,

ich hatte auch dieses Projekt gefunden, ist mit einem ATTiny85

http://www.dl8ma.de/jugendarbeit/melodienklingel/

vielleicht hilft ja auch ;-)

Gruß

Oliver

von Frank M. (frank_m35)


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)

von chris (Gast)


Lesenswert?

Du kannst das hier nehmen:
Beitrag "sigma delta dac piano auf arduino"

Ist ziemlich einfach auf einen Atmega328 zu portieren: Einfach loop() 
durch main() ersetzen.

von Wusel D. (stefanfrings_de)


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.

von chris (Gast)


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

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.