Petit FatFs & воспроизведение wav файла

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Petit FatFs & воспроизведение wav файла

Сообщение 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){



	}


}
инициализация и монтирование происходят успешно
подскажите где может быть ошибка
Tell Me The Truth
Реклама
Аватара пользователя
sporeon
Открыл глаза
Сообщения: 52
Зарегистрирован: Вс фев 20, 2011 21:05:17
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение sporeon »

Если монтирование успешно, то, возможно, виновато имя файла. Оно слишком длинное для FAT (если не включен LFN). Можно попробовать что-то вроде CASABL~1.WAV.

Да и вообще, FRESULT неплохо бы получать при открытии файла, тогда бы понятно было в чём проблема.
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение 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 символов
куда копать дальше ?
неужто баг в библиотеке ?
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение Аlex »

FreshMan писал(а):открывается успешно при длине имени не более 8 символов
куда копать дальше ?
А "1.wav" разве содержит более 8 символов ?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

нет
но тем не мение файл не открывается
Tell Me The Truth
Реклама
Аватара пользователя
sporeon
Открыл глаза
Сообщения: 52
Зарегистрирован: Вс фев 20, 2011 21:05:17
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение sporeon »

Попробуйте получить список файлов (http://elm-chan.org/fsw/ff/pf/readdir.html), может что-то вырисуется.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение Аlex »

FreshMan писал(а):но тем не мение файл не открывается
Что-то Вы запутались. И нас тоже путаете.
Сначала Вы пишите, что файл открывается если имя меньше 8 символов, потом сразу же пишите, что он совсем не открывается.
Дак открывается он или нет ?
8 символов - это максимальная длина файла при отключенной поддержки LNF. Плюс 3 символа на расширение.

ЗЫ: Попробуйте, как и писали выше, пройтись поиском и вывести все имена на дисплей.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение 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 \" перед тем, как открывать файл в корне флешки...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

sporeon писал(а):Сначала Вы пишите, что файл открывается если имя меньше 8 символов, потом сразу же пишите, что он совсем не открывается.
Дак открывается он или нет ?
есть два проэкта
в первом используется либа FatFs
в этом проэкте файл 1.wav открывается без проблем
лежит он в корне, не в папке, а в коне диска
во втором используется либа Petit FatFs
файл здесь 1.wav не открывается
лежит он тоже в корне диска
Tell Me The Truth
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

предполагаю что ошибка сокрыта где-то в либе
на просторах инете нашол допиленную чановскую Petit FatFs
с ней пока трабл нет
Вложения
Petit FatFs.rar
(17.35 КБ) 197 скачиваний
Tell Me The Truth
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

возник вопрос по настройке таймеров
Т0(8-ми разрядный) настраиваю на частоту дискретизации 32кГц
тоесть это та частота с которой будут обновляться значения ШИМ
Т1(16-ти разрядный) использую под сам ШИМ
на какую частоту надо настраивать Т1 ?
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение ARV »

FreshMan писал(а):на какую частоту надо настраивать Т1 ?
чем выше, тем лучше, будет проще отфильтровать. но при любом раскладе не ниже частоты Т0.

мне ваш подход представляется бессмысленно-избыточным: 32 кГц дискретизация явно ни к чему, если ШИМ будет 8-битный. качество ШИМ-модулированного сигнала определяется не только частотой дискретизации, но и разрядностью ШИМ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

ARV писал(а):мне ваш подход представляется бессмысленно-избыточным:
почему ?
частоту дискретизации выбираю оглядываясь на теорему Котельникова
мы слышим в диапазоне 20 - 20000Гц
как я понимаю, в таком случае частота дискретизации должна быть 40кГц
но мне ее из AVR не выжать
ШИМ будет 16 разрядный, потому как при 8 разрядном слышны заментые шумы в паузах
поправте если где-то заблуждаюсь :)
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение ARV »

FreshMan писал(а):поправте если где-то заблуждаюсь
ок.
16-битный ШИМ - это значит, частота будет в 65536 раз меньше тактовой частоты МК. AVR работают на 16МГц максимум, следовательно, частота ШИМ у вас будет не более 244 Гц. по теореме Котельникова вы сможете получить сигнал не более 122 Гц...

всё верно?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

ARV писал(а):16-битный ШИМ
да, но он будет не на дискретизации а на разрядности
тоесть, Т0 - 8 разрядный - используется под дискретизацию, выборку сигнала
Т1 - 16 разрядный - под разрядность, тоесть он будет определять количество уровней сигнала
вы меня понимаете ?
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение ARV »

FreshMan писал(а):вы меня понимаете ?
я-то понимаю, а вот вы, похоже, не понимаете принцип ШИМ-генерации звука...

частота дискретизации у вас определяется частотой ШИМ, т.к. именно импульс ШИМ является аналогом "отсчета" сигнала. пока один период ШИМ не отработает, вы не сможете выдать новый отсчет, поэтому задавать частоту дискретизации БОЛЬШЕ частоты ШИМа - бессмысленно. меньше - можно, выше - нет.

отсюда и плясать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

тогда я не пойму как правельно настроить таймера ?
выходит при 16 разрядном шиме это сделать не возможно ?
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение Аlex »

Зачем вам 16-ти битный звук ? Вы что, собрались Бетховена слушать на Hi-End аппаратуре ? :facepalm:
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Petit FatFs & воспроизведение wav файла

Сообщение FreshMan »

когда конвертором делаеш 8 бит, 32кГц - в паузах слышен заметный шум
при 16 бит, 32кГц шума нет
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Petit FatFs & воспроизведение wav файла

Сообщение 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 и слушайте.
Вложения
snd.WAV.zip
(301.51 КБ) 456 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»