Заголовок сообщения: Воспроизведение звука на основе pic 16f628a
Добавлено: Пт авг 05, 2011 21:02:27
Грызет канифоль
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
В общем, начитавшись датащитов, у меня родился вот такой алгоритм: -устанавливаю период ШИМ(загружаю в регистр PR2 число , например 63). -настраиваю порт В на выход -настраиваю предделитель TMR2 (1:1), включаю TMR2. Частота дискретизации получается равна 78,12КГц (не много ли?) -перевожу модуль ССР в режим ШИМ. -жду пока таймер сравняется со значением в регистре PR2. Дальше два пути - либо через прерывания, чего у меня не получилось(МК упорно не хочет входить в подпрограмму обработки), либо тупо ждать пока флаг сброса установится. Дальше сбрасываю этот флаг ( всё это происходит в простом if() ) и записываю длительность ШИМ сигнала. Для этого беру число из массива данных, соответствующее wav, разбиваю его: первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L. Есть во всем этом хоть доля правды?
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
Добавлено: Пт авг 05, 2011 22:56:43
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4575 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Цитата:
Частота дискретизации получается равна 78,12КГц (не много ли?)
Это всё-таки наверное не частота дискретизации, а частота ШИМа. Частота дискретизации это та частота, с которой Вы будете менять значение скважности, т.е. выбирать значения из таблицы.
Как уже правильно заметили, это - частота ШИМ, и то, при 8-битном разрешении и тактовой частоте 20MHz. Частота дискретизации будет равна той, с которой Вы будете менять данные. Удобно это делать, используя прерывание от TMR2, установив необходимое значение посткалера. Например, в своём речевом информаторе, я использовал тактовую частоту 16MHz. Соответственно, частота ШИМ получилась 62,5kHz. Установив посткалер равным 8, получилась частота сэмплирования 7812,5Hz. Поскольку стояла задача использовать дешёвые м/сх памяти I2C, то проблематично получить большую. В крайнем случае, удастся её поднять в два раза. Во вложении - пример использования с массажным креслом (черновой вариант). P.S.: К сожалению, презентацию форум не принимает. Кому интересно, кидайте мыло.
Hispanus писал(а):
первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L
Как уже говорил, кодирование разумнее выбирать 8-битным. Следовательно, младшие два бита надо загружать в регистр CCP1CON, а старшие шесть - в младшие шесть битов регистра CCPR1L (старшие два бита надо обнулить).
_________________ ICQ нет, и, в ближайшее время, не будет.
1. Вы забираете 8 битное значение в CCPR1L, забывая, что младшие 2 разряда нужно занести CCP1CON 2. На 628 соорудить что-то терпимо говорящее невозможно.
Я это сам пробовал и почувствовал разницу между ним и 8 мегой, например.
Ну.. воспользуйтесь 18, 24 серией, в самом деле, не 37 год.
Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
Добавлено: Вс авг 07, 2011 13:37:28
Грызет канифоль
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Все наши сегодняшнии технологии родом из 19 века На самом деле для меня результат, если хотя бы отдельные слова можно быдет различить)) главное понять и реализовать принцип.. такие детали как качество звучания и д.т. придут потом
На 628 соорудить что-то терпимо говорящее невозможно
Юр, а не ты ли стыковал его с MMC? Короче говоря, гнусная клевета. Именно "говорящее" очень даже можно (кто не верит, давайте мыло). Во всяком случае на Асме. Причём, как уже упоминал, схема элементарная, и на дешёвых элементах. Вот с "поющим", действительно, гораздо сложнее.
_________________ ICQ нет, и, в ближайшее время, не будет.
Да это был не вопрос, а утверждение (я прекрасно помню этот топик).
urry писал(а):
а потом посмотрел как Чан делает
Если ты про "музыкальную шкатулку", таки оригинальное решение по поводу самого сэмпла (хотя и не уверен, что его личное). Я там пару других мелодий составил, но, как ты понимаешь, детально с работой не разбирался (компилировали другие люди).
urry писал(а):
разница - очень видна.
Проект твой у меня не открывается, так что ничего не увидел. Можешь на словах объяснить, что за буфер?
_________________ ICQ нет, и, в ближайшее время, не будет.
Чтение с ммс карточки идет неравномерно - в конце каждого сектора (512 байт, килобайт, неважно) возникает пауза, связанная с необходимостью прочитать 2 байта контрольной суммы и выскочить в поиск начала нового сектора. Чтобы сгладить эту неравномерность, Чан поставил кольцевой буфер в 256 байт, идет упреждающее чтение с карточки , запись в кольцевой буфер и по таймеру - читаются оттуда данные. Неравномерность исчезла - качество звука возросло. Все, собственно...
Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
Добавлено: Пн авг 08, 2011 00:16:42
Грызет канифоль
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Залив, сию управляющую программку (с кое какими изменениями, установив постскалер, равным восьми) в протеус и подключив осцилограф, я увидел периодически изменяющиеся (с периодом, равным восьми) прямоугольные импульсы. Но так как 628 имеет скудную память, цифр сватает только на несколько милисекунд, что определенно недостаточно для человеческого уха.
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Объясните, на что Вы рассчитывали. При скромненькой частоте дискретизации 22 килогерца 10 секундная запись занимает 220 кБайт. Теме этой уже лет 5, наверное, и здесь, и на казусе изжевана. Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd . при маленьком количестве файлов в корне ммс нет необходимости поднимать на мк поддержку ФАТ - я читал, например, начало файла и длину с служебной области. При большом количестве звуковых файлов - есть, в этом случае ставят библиотеку Чана FATFS - она написана очень грамотно и без труда портируется на любой компилятор. Но не на 628 камень - нехватка памяти. Поэтому предлагаю Вам сразу перейти с 628 пика на пик 24f16ка102, например, 3 бакса стоимости вместо 2 за 628, зато все проблемы - с поднятием файловой системы, память под кольцевой буфер - исчезают.
Неравномерность исчезла - качество звука возросло.
Вот тут не понял. Описанная проблема может вызвать только "заикания" звука. Каким образом она влияет на качество?
urry писал(а):
Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd
Как уже говорил, я реализовал всё на 24cxx. Увеличение частоты дискретизации практически не даст повышения качества. Необходимо повышать разрядность, что упирается в возможности модуля CCP.
_________________ ICQ нет, и, в ближайшее время, не будет.
Там не заикание - посторонний шум, скорее, потому 512 байт пролетают быстро. Особенно чувствуется на маленьких уровнях громкости. Ну пример я уже выкладывал, ты наверняка слышал, может тс будет интересно. Это - без буфера, 628 пик, снято перед входом УНЧ.
Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
Добавлено: Пн авг 08, 2011 16:08:25
Грызет канифоль
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Обычные 16-ричные редакторы представляют цифры в 10-тичной форме, без характерной приставки 0х..Заболев этим вопросом, я написал мини - программку, добавляющую эту важную часть к каждой цифре+запятую в конец. Думаю, весьма полезная штука для записи какой нибудь wav в память МК.
while(1) { i2c_start(); //Инициализация передачи i2c_write(0xA0); //Адрес Slave с запросом на запись i2c_write(c1); //Передача i2c_start(); i2c_write(0xA1); //Адрес Slave с запросом на чтение c2=i2c_read(); //Чтение i2c_stop(); //Конец
if (c1==c2) PORTB=0xFF; } }
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
Добавлено: Вт авг 09, 2011 07:45:45
Грызет канифоль
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Или вот так:
Код:
while(1) { i2c_start(); //Инициализация передачи i2c_write(0xA0); //Адрес Slave с запросом на запись i2c_write(c1); //Передача i2c_stop(); //Конец
i2c_start(); i2c_write(0xA0); //Адрес Slave с запросом на запись i2c_start(); i2c_write(0xA1); //Адрес Slave с запросом на чтение c2=i2c_read(); //Чтение i2c_stop(); //Конец
if (c2==5) PORTB=0xFF; }
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения