Menseu Опубликовано 23 апреля, 2014 Поделиться Опубликовано 23 апреля, 2014 Всем доброго времени суток. Нуждаюсь в помощи. Делаю дипломный проект, с изготовлением устройства. Решил делать на AVR, в этом деле я\ новичек, так что заранее прошу прощение за глупые вопросы. Само устройство представляет из себя часы c боем. С реализацией функции часов у меня проблем не возникло, благо в сети все разжевано. А вот с боем возникли проблемы, прочитав у Белова про воспроизведение по нотам - тут все понятно и просто, но так не получится реализовать именно бой (удар по колоколу), да и нот я не знаю. Погуглив немного, узнал что можно воспроизводить wav, тоже ничего сложного, убираем заголовочный файл в hex wav'ки и остальное выводим с частотой дискретизации файла на динамик. Поскольку wav довольно увесисты, в интернете везде используется внешняя память, либо епромки, либо сд\ммс карты. В моем случае, она весит около 12 кб, программа около 3 кб, т.е остается еще достаточно места. Собственно сам вопрос, можно ли как-то впихнуть wav в программную память и оттуда вопроизводить, не используя внешнуюю память если да - как это реализовать? Делаю проект в CodeVisionAVR 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
солар Опубликовано 23 апреля, 2014 Поделиться Опубликовано 23 апреля, 2014 (изменено) Делаете массив flash unsigned char data[12288]= {}; // данные из wave файла и выдергиваете из него данные на воспроизведение. Изменено 23 апреля, 2014 пользователем солар 0 Я не раздаю удочки. Я продаю рыбу. Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
COKPOWEHEU Опубликовано 23 апреля, 2014 Поделиться Опубликовано 23 апреля, 2014 в Студии так #include <avr/pgmspace.h> //заголовок для работы с внутренней памятью ... PROGMEM char wavdata[]={...}; //чтобы данные были именно во флеш-памяти. К тому же удобно вынести сами данные в отдельный файл, чтобы не мешали ... char temp=pgm_read_byte(addr); //считывание байта по указанному адресу 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Menseu Опубликовано 24 апреля, 2014 Автор Поделиться Опубликовано 24 апреля, 2014 (изменено) Благодарю всех за помощь! На выходных буду разбраться. Изменено 24 апреля, 2014 пользователем Menseu 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Panda_y2k Опубликовано 24 апреля, 2014 Поделиться Опубликовано 24 апреля, 2014 (изменено) http://radiokot.ru/c...igital/game/25/ Здесь на кнопки звук и при включении, ну и просто с флешки воспроизводит wav, только 32й меги скорее всего мало будет, чтоб wav ку во внутрь впихнуть,много места они жрут, если только совсем маленькую. Изменено 24 апреля, 2014 пользователем Panda_y2k 0 Купи два беляша и собери из них кошку Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви) Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви). Ссылка на комментарий Поделиться на другие сайты Поделиться
Menseu Опубликовано 27 апреля, 2014 Автор Поделиться Опубликовано 27 апреля, 2014 (изменено) Делаете массив flash unsigned char data[12288]= {}; // данные из wave файла и выдергиваете из него данные на воспроизведение. А как собственно считывать по байту и определить когда заканчивается мелодия? Мне нужно создавать какую-то переменную, в которую будет записываться значение из массива, и в прерывании по таймеру (с частотой дискретизации файла) выводится на OCR1A, как это организовать: считать байт по адресу (из массива?), записать его в переменную и вывести на ШИМ? Вам не сложно какой-нибудь пример кода показать? interrupt [TIM2_COMP] void timer2_comp_isr(void) // прерывание, в котором подставляются значения { OCR1A = ???; // можно ли здесь как-то вывести весь массив? } Изменено 27 апреля, 2014 пользователем Menseu 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
andryxa Опубликовано 27 апреля, 2014 Поделиться Опубликовано 27 апреля, 2014 (изменено) flash unsigned char data[12288]= {}; // данные из wave файла А в прерывании таймера //Если надо проиграть мелодию, выставляете в программе флаг /flag=1;/ if(flag) { // если флаг равен 1 играем мелодию OCR1A=data; i++;} if(i==12288) {flag=0;OCR1A=0;} // если проиграли всю мелодию, сбросить флаг в 0 Изменено 27 апреля, 2014 пользователем andryxa 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
солар Опубликовано 27 апреля, 2014 Поделиться Опубликовано 27 апреля, 2014 В wav-файле записаны амплитуды, а не ШИМ. Нужно выводить на ЦАП, внешний, хотя бы резистивный. Ну а суть чтения из массива andryxa прописал верно. Единственное, я бы прописал: if(i>=12288) 0 Я не раздаю удочки. Я продаю рыбу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Menseu Опубликовано 27 апреля, 2014 Автор Поделиться Опубликовано 27 апреля, 2014 Как я понял, в массиве мне нужно указывать hex в форме 0х00 и разделять запятой, есть какой-нибудь hex редактор, который байты в таком виде сразу отображает и, по возможности, как-то разделить их запятой? flash unsigned char data[4]={0x1,0x9,0x1a,0x1b}; В wav-файле записаны амплитуды, а не ШИМ. Нужно выводить на ЦАП, внешний, хотя бы резистивный. Я смотрел примеры в интернете, там выводят через ШИМ, хоть и будет низкое быстродействие, мне ведь качественный звук ненужен, я собираюсь секундную wav 8 бит и частотой 8 кГц выводить, или все же лучше на ЦАП делать, R2R? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
andryxa Опубликовано 27 апреля, 2014 Поделиться Опубликовано 27 апреля, 2014 В wav-файле записаны амплитуды, а не ШИМ. А в регистр аппаратного шим вы пишете не значение амплитуды? я бы прописал:if(i>=12288) Я тоже, просто не хотел получить лишних вопросов... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
солар Опубликовано 28 апреля, 2014 Поделиться Опубликовано 28 апреля, 2014 регистр аппаратного шим Был пьян. Приношу извинения. Надеюсь, они будут приняты. 0 Я не раздаю удочки. Я продаю рыбу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.