Страница 1 из 2
Petit FatFs & воспроизведение wav файла
Добавлено: Вс янв 22, 2017 13:09:13
FreshMan
здравствуйте
не получается открыть файл
код
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "lcd_lib.h"
//--------------------
#include <stdio.h> // для ф-ции sprintf();
//-------------------
//-------------------
#include "diskio.h"
#include "integer.h"
#include "pff.h"
#include "pffconf.h"
FATFS fs;
const char f[] = "casablanca.wav";
#define LED_ON (PORTC|=(1<<0))
#define LED_OFF (PORTC&=~(1<<0))
int main (void){
DDRC=0b00000001;
//--------------------------------------------
LCD_init(); // инициализация LCD
//--------------------------------------------
ACSR = 0x80; // Analog Comparator Disable
//-------------------------------------------
sei(); // Global enable interrupts
//-------------------------------------------
if(disk_initialize(0)==RES_OK) LCD_SendString("INIT mSD OK");
else LCD_SendString("INIT mSD ERR");
_delay_ms(3000);
LCD_Clear();
if( pf_mount(&fs) == RES_OK ) LCD_SendString("Mount OK");
else LCD_SendString("Mount ERR");
_delay_ms(3000);
LCD_Clear();
if(pf_open(f) == RES_OK) LCD_SendString("File is OPENED");
else LCD_SendString("File not OPENED");
while(1){
}
}
инициализация и монтирование происходят успешно
подскажите где может быть ошибка
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вс янв 22, 2017 13:19:01
sporeon
Если монтирование успешно, то, возможно, виновато имя файла. Оно слишком длинное для FAT (если не включен LFN). Можно попробовать что-то вроде CASABL~1.WAV.
Да и вообще, FRESULT неплохо бы получать при открытии файла, тогда бы понятно было в чём проблема.
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 12:20:49
FreshMan
переименовал файл
1.wav
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "lcd_lib.h"
//--------------------
#include <stdio.h> // для ф-ции sprintf();
//-------------------
//-------------------
#include "diskio.h"
#include "integer.h"
#include "pff.h"
#include "pffconf.h"
FATFS fs;
const char file_name[] = "1.wav";
BYTE buff[16];
#define LED_ON (PORTC|=(1<<0))
#define LED_OFF (PORTC&=~(1<<0))
int main (void){
DDRC=0b00000001;
//--------------------------------------------
LCD_init(); // инициализация LCD
//--------------------------------------------
ACSR = 0x80; // Analog Comparator Disable
//-------------------------------------------
sei(); // Global enable interrupts
//-------------------------------------------
if( disk_initialize(0) == RES_OK ) LCD_SendString("INIT mSD OK");
else LCD_SendString("INIT mSD ERR");
_delay_ms(3000);
LCD_Clear();
if( pf_mount(&fs) == RES_OK ) LCD_SendString("Mount OK");
else LCD_SendString("Mount ERR");
_delay_ms(3000);
LCD_Clear();
if ( pf_open(file_name) == RES_OK ) LCD_SendString("File is OPENED");
else if ( pf_open(file_name) == FR_NO_FILE ) LCD_SendString("FR_NO_FILE");
else if ( pf_open(file_name) == FR_DISK_ERR ) LCD_SendString("FR_DISK_ERR");
else if ( pf_open(file_name) == FR_NOT_ENABLED ) LCD_SendString("FR_NOT_ENABLED");
while(1){
}
}
ф-ция возвращает
FR_NO_FILE
этот же файл открывал в другом проэкте где используется либа
FatFs
опытным путем выяснил что файл в ней открывается успешно при длине имени не более 8 символов
куда копать дальше ?
неужто баг в библиотеке ?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 14:00:30
Аlex
FreshMan писал(а):открывается успешно при длине имени не более 8 символов
куда копать дальше ?
А "1.wav" разве содержит более 8 символов ?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 14:13:14
FreshMan
нет
но тем не мение файл не открывается
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 14:26:48
sporeon
Попробуйте получить список файлов (
http://elm-chan.org/fsw/ff/pf/readdir.html), может что-то вырисуется.
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 15:01:08
Аlex
FreshMan писал(а):но тем не мение файл не открывается
Что-то Вы запутались. И нас тоже путаете.
Сначала Вы пишите, что файл открывается если имя меньше 8 символов, потом сразу же пишите, что он совсем не открывается.
Дак открывается он или нет ?
8 символов - это максимальная длина файла при отключенной поддержки LNF. Плюс 3 символа на расширение.
ЗЫ: Попробуйте, как и писали выше, пройтись поиском и вывести все имена на дисплей.
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 23, 2017 15:32:02
ARV
у вас неверно сделана обработка ошибки: функцию надо вызывать один раз и запоминать код возврата, который затем анализировать.
Код: Выделить всё
switch(pf_open(file_name)){
case RES_OK: LCD_SendString("File is OPENED"); break;
case FR_NO_FILE: LCD_SendString("FR_NO_FILE"); break;
// и т.д.
}
ну и есть небольшое подозрение, что надо задать рабочий каталог, ибо указание имени файла без указания пути, возможно, и дает указанную вами проблему. сделайте аналог DOS-овской команды "
cd \" перед тем, как открывать файл в корне флешки...
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 24, 2017 13:28:33
FreshMan
sporeon писал(а):Сначала Вы пишите, что файл открывается если имя меньше 8 символов, потом сразу же пишите, что он совсем не открывается.
Дак открывается он или нет ?
есть два проэкта
в первом используется либа
FatFs
в этом проэкте файл 1.wav открывается без проблем
лежит он в корне, не в папке, а в коне диска
во втором используется либа
Petit FatFs
файл здесь 1.wav не открывается
лежит он тоже в корне диска
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Чт янв 26, 2017 11:52:41
FreshMan
предполагаю что ошибка сокрыта где-то в либе
на просторах инете нашол допиленную чановскую Petit FatFs
с ней пока трабл нет
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Пн янв 30, 2017 22:29:49
FreshMan
возник вопрос по настройке таймеров
Т0(8-ми разрядный) настраиваю на частоту дискретизации 32кГц
тоесть это та частота с которой будут обновляться значения ШИМ
Т1(16-ти разрядный) использую под сам ШИМ
на какую частоту надо настраивать Т1 ?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 06:48:25
ARV
FreshMan писал(а):на какую частоту надо настраивать Т1 ?
чем выше, тем лучше, будет проще отфильтровать. но при любом раскладе не ниже частоты Т0.
мне ваш подход представляется бессмысленно-избыточным: 32 кГц дискретизация явно ни к чему, если ШИМ будет 8-битный. качество ШИМ-модулированного сигнала определяется не только частотой дискретизации, но и разрядностью ШИМ.
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 08:44:32
FreshMan
ARV писал(а):мне ваш подход представляется бессмысленно-избыточным:
почему ?
частоту дискретизации выбираю оглядываясь на теорему Котельникова
мы слышим в диапазоне 20 - 20000Гц
как я понимаю, в таком случае частота дискретизации должна быть 40кГц
но мне ее из AVR не выжать
ШИМ будет 16 разрядный, потому как при 8 разрядном слышны заментые шумы в паузах
поправте если где-то заблуждаюсь

Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 08:53:50
ARV
FreshMan писал(а):поправте если где-то заблуждаюсь
ок.
16-битный ШИМ - это значит, частота будет в 65536 раз меньше тактовой частоты МК. AVR работают на 16МГц максимум, следовательно, частота ШИМ у вас будет не более 244 Гц. по теореме Котельникова вы сможете получить сигнал не более 122 Гц...
всё верно?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 09:04:41
FreshMan
ARV писал(а):16-битный ШИМ
да, но он будет не на дискретизации а на разрядности
тоесть, Т0 - 8 разрядный - используется под дискретизацию, выборку сигнала
Т1 - 16 разрядный - под разрядность, тоесть он будет определять количество уровней сигнала
вы меня понимаете ?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 09:49:54
ARV
FreshMan писал(а):вы меня понимаете ?
я-то понимаю, а вот вы, похоже, не понимаете принцип ШИМ-генерации звука...
частота дискретизации у вас определяется частотой ШИМ, т.к. именно импульс ШИМ является аналогом "отсчета" сигнала. пока один период ШИМ не отработает, вы не сможете выдать новый отсчет, поэтому задавать частоту дискретизации БОЛЬШЕ частоты ШИМа - бессмысленно. меньше - можно, выше - нет.
отсюда и плясать
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 12:05:00
FreshMan
тогда я не пойму как правельно настроить таймера ?
выходит при 16 разрядном шиме это сделать не возможно ?
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 12:16:04
Аlex
Зачем вам 16-ти битный звук ? Вы что, собрались Бетховена слушать на Hi-End аппаратуре ?

Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 12:41:46
FreshMan
когда конвертором делаеш 8 бит, 32кГц - в паузах слышен заметный шум
при 16 бит, 32кГц шума нет
Re: Petit FatFs & воспроизведение wav файла
Добавлено: Вт янв 31, 2017 13:01:22
ARV
FreshMan писал(а):тогда я не пойму как правельно настроить таймера ?
выходит при 16 разрядном шиме это сделать не возможно ?
в реализации на AVR - да, 16-битный звук в "привычном" понимании невозможно реализовать. не считать же трансформатороное гудение звуком?
метод расчетов параметров ШИМа в общих чертах выглядит примерно следующим образом.
1. изначально принимаем (смиряемся с фактом), что звук будет 8-битный.
2. разбираемся с частотой дискретизации. звук телефонного качества - это от 6 до 9 килосемплов в секунду, разумеется, чем больше, тем качественнее звук. по слухам при частоте 15-16 килосемплов звук имеет очень приличное качество, а при 32 - уже вполне адекватное FM-уровню. разумеется, рассуждения о качестве справедливы при "средних" уровнях громкости, т.к. тихие и громкие звуки при 8-битах - это скорее фантастика, чем реальность.
3. Если частота дискретизации совпадает с легкодостижимым значением частоты ШИМ (т.е. кратна деленной на 256 тактовой частоте МК, кратность совпадает с предделителями таймера), то выборки семплов можно делать по прерыванию переполнения таймера, генерирующего ШИМ. в противном случае надо использовать другой таймер для выбора семплов.
общие рассуждения.
частоту ШИМ следует выбирать максимально возможной, не обращая внимание на частоту дискретизации, т.к. потом эту частоту надо срезать фильтром. чем выше частота, тем проще фильтр.
существуют методы маскирования низкой разрядности такого звука, но это, как говорится, уже вопрос больше к ушам слушающего, чем к реальному качеству.
Добавлено after 38 seconds:
FreshMan писал(а):когда конвертором делаеш 8 бит, 32кГц - в паузах слышен заметный шум
при 16 бит, 32кГц шума нет
это вы на своей аудиокарте компьютера слушали, или реально из AVR выжимали?
Добавлено after 11 minutes 52 seconds:
вот, нашел у себя синтезированный на AVR 8-битный звук, можете послушать реальное качество (звук синтезирован протеусом с простейшим RC-фильтром). т.к. wav-запрещено - файл просто переименован - удалите расширение zip и слушайте.