Cześć,
robię większy projekt w którym chciałbym użyć zapisanych w pamięci FLASH nagrań. W związku z tym, że jeden z największych dystrybutorów elektroniki w Polsce bardzo zwleka z wysłaniem mi układu AT45DB to zacząłem montować układ bez niej, co i tak przysporzyło mi kłopotu. Celem jest jakakolwiek słyszalna jakość dźwięku.
Plan jest prosty:
1. Nagrywam dźwięk(ok. 1sek słowo "tak") o paśmie do 4kHz, za pomocą programu Audiocity (może jest jakiś lepszy) w formacie 8kHz MONO 16bit.
2. Powyższy plik eksportuję jako AU 8bit u-law, który zamieniam na format Hex.
3. Załączam go w programie jako plik nagłówkowy:
4. PWM ustawiam na poprawnie fazowy, z prescalerem = 1, czyli wyjściowa częstotliwość PWM=(8MHz/(2*2^8))=15 686 Hz Co jest przynajmniej 2 razy większe od wejściowych 4 Khz, więc aliasingu nie powinno być. W programie próbuję go odtwarzać w ten sposób:
5. Efektem na nóżce uC (nie mam oscyloskopu) jest wahające się napięcie. W odstępie 300ms wyświetla się (4,20 4,19 i 3,84 i od początku) czy coś podobnego.
6. Zbudowany przeze mnie wzmacniacz jest oparty na filtrze dolnoprzepustowym na układzie LM358 ok.4kHz (szerokość pasma próbkowanego) i zwykłym wzmacniaczu TBA820M z założenia ma on sterować 8Ω słuchawkami. Niestety po podłączeniu 0,2W głośnika nie ma żadnego dźwięku. Całość zasilam 12V ładowarką po stabilizacji, więc wydaje mi się, że natężenie dla układu jest w porządku.
Moje pytania:
Ad.1 i 2 czy dobrze nagrywam,przechowuję i konwertuję dźwięk dla moich potrzeb? Może jest jakieś lepsze rozwiązanie? Inny format? Martwi mnie zapis w Audiocity 16bitowy i jego późniejsza konwersja do 8-bitowego AU. Może lepszy AIFF 8bit PCM. Czy to duża różnica przy odtwarzaniu?
Ad.3 widziałem jeszcze taki zapis:
ale nie wiem czy to coś zmienia?
W jakimsprzykładzie z zapisem nutowym widziałem jeszcze taki zapis:
Ad.4 Wydaje mi się, że problem leży w synchronizacji, ale jak na laika C przystało nie bardzo wiem gdzie. Czy da się to jakoś właśnie zsynchronizować używając przerwań?
Ad.5 i Ad.6 Tutaj jest chyba ok, ale mogę się mylić, bo płytki robiłem sam po raz pierwszy. Na wyjściu układu do słuchawek mam stałe napięcie 0,59V.
Z góry dziękuję za wskazówki.
ps
To mój pierwszy post, ale czytam forum od dłuższego czasu, mam nadzieję, że wypełniłem pkt. regulaminu
robię większy projekt w którym chciałbym użyć zapisanych w pamięci FLASH nagrań. W związku z tym, że jeden z największych dystrybutorów elektroniki w Polsce bardzo zwleka z wysłaniem mi układu AT45DB to zacząłem montować układ bez niej, co i tak przysporzyło mi kłopotu. Celem jest jakakolwiek słyszalna jakość dźwięku.
Plan jest prosty:
1. Nagrywam dźwięk(ok. 1sek słowo "tak") o paśmie do 4kHz, za pomocą programu Audiocity (może jest jakiś lepszy) w formacie 8kHz MONO 16bit.
2. Powyższy plik eksportuję jako AU 8bit u-law, który zamieniam na format Hex.
3. Załączam go w programie jako plik nagłówkowy:
unsigned char data[] = {
0x2E,0x73,0x6E,0x64,0x00,0x00,0x00,0x18,0x00,0x00,0x1A,0x51,0x00,0x00,0x00,0x01,
...
0x00,0x00,0x3D,0x46,0x00,0x00,0x00,0x01,0x7F};4. PWM ustawiam na poprawnie fazowy, z prescalerem = 1, czyli wyjściowa częstotliwość PWM=(8MHz/(2*2^8))=15 686 Hz Co jest przynajmniej 2 razy większe od wejściowych 4 Khz, więc aliasingu nie powinno być. W programie próbuję go odtwarzać w ten sposób:
#define F_CPU 8000000UL //CPU
#include "stdio.h"
#include "stdlib.h"
#include <avr/io.h> //register
#include <util\delay.h> //delays
#include <avr/interrupt.h>
#include "sound.h"
int main(void)
{
int i;
DDRD = (1<<PD5);
TCCR1A = 0x81; // 8 bit PWM, uzywjąc COM1A
TCCR1B = 0x01; // preskaler licznika = 1
OCR1AH = 0x00; // BOTTOM = 0
OCR1AL = 0xFF; // TOP= 1
OCR1A = data[0];
while(1){
for(i=0;i<6761;i++) //6761 próbek w tabeli data []
{
OCR1A = data[i];
if (i==6761) i=0;
}
}
}5. Efektem na nóżce uC (nie mam oscyloskopu) jest wahające się napięcie. W odstępie 300ms wyświetla się (4,20 4,19 i 3,84 i od początku) czy coś podobnego.
6. Zbudowany przeze mnie wzmacniacz jest oparty na filtrze dolnoprzepustowym na układzie LM358 ok.4kHz (szerokość pasma próbkowanego) i zwykłym wzmacniaczu TBA820M z założenia ma on sterować 8Ω słuchawkami. Niestety po podłączeniu 0,2W głośnika nie ma żadnego dźwięku. Całość zasilam 12V ładowarką po stabilizacji, więc wydaje mi się, że natężenie dla układu jest w porządku.
Moje pytania:
Ad.1 i 2 czy dobrze nagrywam,przechowuję i konwertuję dźwięk dla moich potrzeb? Może jest jakieś lepsze rozwiązanie? Inny format? Martwi mnie zapis w Audiocity 16bitowy i jego późniejsza konwersja do 8-bitowego AU. Może lepszy AIFF 8bit PCM. Czy to duża różnica przy odtwarzaniu?
Ad.3 widziałem jeszcze taki zapis:
const unsigned char data[] ={...ale nie wiem czy to coś zmienia?
W jakimsprzykładzie z zapisem nutowym widziałem jeszcze taki zapis:
const unsigned char data[] PROGMEM={...Ad.4 Wydaje mi się, że problem leży w synchronizacji, ale jak na laika C przystało nie bardzo wiem gdzie. Czy da się to jakoś właśnie zsynchronizować używając przerwań?
Ad.5 i Ad.6 Tutaj jest chyba ok, ale mogę się mylić, bo płytki robiłem sam po raz pierwszy. Na wyjściu układu do słuchawek mam stałe napięcie 0,59V.
Z góry dziękuję za wskazówki.
ps
To mój pierwszy post, ale czytam forum od dłuższego czasu, mam nadzieję, że wypełniłem pkt. regulaminu
