WAV på en beeper

Hvad er teknikken for at afspille en "wav fil" (f.eks en hund der siger vov !) på en beeper på en microcontroller?

Jeg ved godt at det kun bliver nogle få sekunder jeg kan have (avr mega 128) men det kunne da være meget sjovt.

Hvad er det helt præcist jeg skal føde min timer / pwm udgang med ?

Jeg kan sætte min pwm til f.eks. 5 khz, og så skrive aktuelle sample værdi til duty-cycle registeret, men bliver der musik ud af det ?

mvh Troels

Reply to
Troels Thomsen
Loading thread data ...

En løsning baseret kun på en microcontroller såsom M128'eren _kunne_ være udformet således:

Læg alle sampleværdierne i et passende stort array. Der laves et program til dette formål :)

Læs een værdi ud på en port af gangen i takt med samplingsfrekvensen.

På denne port har du monteret en D/A konverter, som er sluttet til en forstærker

  • højttaler. Vælg en D/A konverter med 8 bit indgang (du får vel ikke brug for
16 bit lyd :)).
--
Mvh, Kim Voss Schrader

OBS: Der kan max. attaches 30kb i e-mails til mig, ellers bouncer de.
Reply to
Kim Voss Schrader

vov

En evt. WAV fil skal vist først konverteres til noget RAW-data, da der er header og andet i en WAV fil :)

Brian

Reply to
Brian Lund

Formålet er ikke at lave et print der kan spille lyd. Jeg _har_ et print med en beeper, jeg gerne vil have til at spille en sample for sjov skyld.

Buzzeren sidder direkte på en digital udgang (dog med en driver). Dvs hvis jeg skriver 0 og 1 til porten hvert halve millisekund får jeg en tone på

1kHz.

Som nævnt i første indlæg sidder buzzeren på en udgang der kan styres af en timer/pwm i mega 128'eren, hvis det er nogen fordel.

mvh Troels

Reply to
Troels Thomsen

Ja, hvordan jeg lige får lavet en wav på pc'en om til const char theSample[] = {0x00 , 0x.. , 0x.., 0x.., 0x.., 0x.. }; skal også løses, men det er et praktisk problem !

Desuden skal den nok downsamples lidt.

mvh Troels

Reply to
Troels Thomsen

Ganske simpelt. Gem den først i en downsamplet udgave som raw. Herefter laver du et lille program/script/whatever som laver dit array byte for byte af dit sample.

--
Mvh, Kim Voss Schrader

OBS: Der kan max. attaches 30kb i e-mails til mig, ellers bouncer de.
Reply to
Kim Voss Schrader

"Troels Thomsen" skrev i news:40ab69d8$0$433$ snipped-for-privacy@dread14.news.tele.dk

vov

128)

Hvis du vil bruge en pwm til at lave dit "analog" signal skal du nok vælge en frekvens der er noget højere end 5Khz. Du skal nok også have et lille lapas filter mellem din cpu og forstærker.

-- Hilsen Peter N Petersen

formatting link
Privat
formatting link
Firma

Reply to
15kw

vov

128)

Du skal ændre duty cyclen på din udgang i takt med de analoge værdier. For at kunne gøre det, skal du have en frekvens der ligger over det hørbare område på din udgang og det er så denne frekvens du ændre duty cycle på. Der bør så sidde et lavpasfilter imellem udgangen og højtaleren.

Reply to
HKJ

hørbare

Der

Ja, høj "samplerate" og så et lavpas filter, det er jo i virkeligheden en simpel DA converter.

Men se lige dette kode jeg fandt. Programmet indlæser en wav fil og spiller det på pc-speakeren

formatting link

procedure New; Interrupt; begin if buf[I] > $80 then Sound(rate) else NoSound; end;

(rate er konstant, det er frekvensen. buf er selve bufferen der indeholder den indlæste sample)

Han styrer ikke duty-cyclen (kan måske ikke på en pc?) men kun on/off. Og da han kun har to output værdier (on/off) vælger han at alle sample værdier under 80 hex betyder off og alle over betyder on.

Så i realiteten er samplene kun1 bit Det er da en stabil komprimering !!!

Den første metode MÅ være bedst, men hvis jeg får tid vil jeg da prøve det sidste også !!

mvh Troels

Reply to
Troels Thomsen

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.