Pop off mit atmel

Gast #2179428
Lesenswert?

ich meinte überigens genug flash, als speicher für den sound...
2 timer(1 pwm, einen für den nächsten pwm-wert) sollte reichen

wirste hier aber bestimmt auch irgendwas finden, wird ja ehr türgong 
ähnlich
Gast #2179844
Lesenswert?

@Falk Brunner

Ja das ist mir schon klar aber -- wenn ich ein wav habe wie kann ich die 
werte für die pwm heraus bekommen ? muss keine wav sein aber wie weiss 
ich wann ich welche PWM einstellen soll ?

kann ich über den ADC zuerst aufnehmen und dann über die PWM ausgeben ? 
Die Qualität wird schlecht sein oder?
Persönliche Seite #2179865
Lesenswert?

Das Geräusch entsteht durch das Überdruckventil nach dem Tubolader wenn 
die Drosselklappe bei starker Last schnell geschlossen wird.

Im Prinzip kann man das Rauschen durch eine geeignet modulierte 
Zufallsgröße erzeugen. Relevant für den Klang sollte nur die Hüllkurve 
sein. Eine Rauschsequenz (die man mit random() erzeugt) kann man im Ram 
ablegen und als Loop abspielen. Die Hüllkurve sollte sich mit einer 
geringen Zahl an Variablen beschreiben lassen.

Grüße,

Peter
Gast #2180092
Lesenswert?

Wenn es nur ein erst mal starkes Rauschen sein soll,
das langsam abklingt, dürfte es "voll easy" in Echtzeit
mit einem AT-Tiny machbar sein.

(1) Pseudo-Zufallszahl mit rückgekoppeltem Schieberegister
    erzeugen. Google: LFSR
    Geht in 16 oder weniger Rechnertakten.

(2) Beim Timer-Interrupt neue Zufallszahl berechnen, daraus
    eine Zahl zwischen 64 und 255 gewinnen: Low-Byte OR 64.
    Ergibt die Periodendauer = Variable Rauschfrequenz.

(3) Vom Zahlenwert der Periodendauer anfangs 32, langsam immer
    weniger abziehen.
    Mit Ereigniszähler und Tabelle.
    Ergibt Pulsbreite = Lautstärke.

Bei den ATTINYs im Datenblatt nachschauen, wie man das den
PWM-Timern und PWM-Port-Pins beibringt.

Piezo-Piepser an den PWM-Ausgang schalten.
Eventuell RC-Glied zur Sound-Verschönerung davor.
Gast #2180140
Lesenswert?

8 bit pcm unsigned wave file to c header file?
also ich hatte da mal ein töölchen gehabt. source ist angehängt.
Bedienung: ./wav0xconv <infile >outfile
wie z.B.
minifloat:~ minifloat$ wav0xconv <bassdrum.wav >myheader.h

dann die headerdatei bearbeiten:
wenn am anfang und ende lang digitale stille ist(0x00) ist der anfang.
ein samplewert, nämlich die 0x00 stoppt bei mir wie ein string-ende 
zeichen einen parser. also werden dir durch 0x01 ersetzt. Um den 
0-bereich(Vcc=5V U_out = 2.5V hab ich ein bit verloren, was solls, 
übernahmeverzerrungen).
am ende ist vor } ein ; zuviel. das merkt auch der GCC. 
zurechteditieren, rüberkopieren was auch immer.

8bit unsigned wavs kann man z.B. mit Audacity erzeugen.

mfg mf
Angehängte Dateien:
Gast #2180142
Lesenswert?

Beim Atmel AVR noch pgmspace.h einbinden und PROGMEM hinter den 
Variablennamen "myvar" setzen. So kann man dann mit wiederholtem
1
global PGM_P bytecount;
2
bytecount = myvar;
3
buffer = pgm_read_byte_near(*bytecount++);
samplewerte auslesen.

mfg mf

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