Воспроизведение звука на основе pic 16f628a
Воспроизведение звука на основе pic 16f628a
В общем, начитавшись датащитов, у меня родился вот такой алгоритм:
-устанавливаю период ШИМ(загружаю в регистр PR2 число , например 63).
-настраиваю порт В на выход
-настраиваю предделитель TMR2 (1:1), включаю TMR2. Частота дискретизации получается равна 78,12КГц (не много ли?)
-перевожу модуль ССР в режим ШИМ.
-жду пока таймер сравняется со значением в регистре PR2. Дальше два пути - либо через прерывания, чего у меня не получилось(МК упорно не хочет входить в подпрограмму обработки), либо тупо ждать пока флаг сброса установится. Дальше сбрасываю этот флаг ( всё это происходит в простом if() ) и записываю длительность ШИМ сигнала. Для этого беру число из массива данных, соответствующее wav, разбиваю его: первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L.
Есть во всем этом хоть доля правды?
-устанавливаю период ШИМ(загружаю в регистр PR2 число , например 63).
-настраиваю порт В на выход
-настраиваю предделитель TMR2 (1:1), включаю TMR2. Частота дискретизации получается равна 78,12КГц (не много ли?)
-перевожу модуль ССР в режим ШИМ.
-жду пока таймер сравняется со значением в регистре PR2. Дальше два пути - либо через прерывания, чего у меня не получилось(МК упорно не хочет входить в подпрограмму обработки), либо тупо ждать пока флаг сброса установится. Дальше сбрасываю этот флаг ( всё это происходит в простом if() ) и записываю длительность ШИМ сигнала. Для этого беру число из массива данных, соответствующее wav, разбиваю его: первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L.
Есть во всем этом хоть доля правды?
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Это всё-таки наверное не частота дискретизации, а частота ШИМа. Частота дискретизации это та частота, с которой Вы будете менять значение скважности, т.е. выбирать значения из таблицы.Частота дискретизации получается равна 78,12КГц (не много ли?)
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Как уже правильно заметили, это - частота ШИМ, и то, при 8-битном разрешении и тактовой частоте 20MHz.Hispanus писал(а):Частота дискретизации получается равна 78,12КГц
Частота дискретизации будет равна той, с которой Вы будете менять данные. Удобно это делать, используя прерывание от TMR2, установив необходимое значение посткалера.
Например, в своём речевом информаторе, я использовал тактовую частоту 16MHz. Соответственно, частота ШИМ получилась 62,5kHz. Установив посткалер равным 8, получилась частота сэмплирования 7812,5Hz. Поскольку стояла задача использовать дешёвые м/сх памяти I2C, то проблематично получить большую. В крайнем случае, удастся её поднять в два раза.
Во вложении - пример использования с массажным креслом (черновой вариант).
P.S.: К сожалению, презентацию форум не принимает. Кому интересно, кидайте мыло.
Как уже говорил, кодирование разумнее выбирать 8-битным. Следовательно, младшие два бита надо загружать в регистр CCP1CON, а старшие шесть - в младшие шесть битов регистра CCPR1L (старшие два бита надо обнулить).Hispanus писал(а):первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L
ICQ нет, и, в ближайшее время, не будет.
Re: Воспроизведение звука на основе pic 16f628a
Вот код:
Скажите, что не так 
Код: Выделить всё
#include <16f628a.h>
#use delay(clock=20000000)
#fuses HS,NOWDT
#byte PORTB = 0x06
//Адрес регистра порта В
#byte INTCON = 0x0B
//Адрес регистра прерываний
#byte CCP1CON = 0x17
//Адрес управляющего регистра модуля CCP1
#byte CCPR1L = 0x15
//Адрес младшего байта CCP1
#byte CCPR1H = 0x16
//Адрес старшего байта CCP1
#byte T2CON = 0x12
//Адрес настройки регистра TMR2
#byte PR2 = 0x92
//Адрес регистра периода TMR2
#byte TRISB = 0x86
//Адрес регистра направления ввода\вывода порта В
#byte PIR1 = 0x0C
//Адрес регистра флагов прерывний
#byte PIE1 = 0x8C
//Адрес регистра разрешения перифирийных прерываний
#byte TMR2 = 0x11
#bit DC1B0 = CCP1CON.4
#bit DC1B1 = CCP1CON.5
//Адрес младших битов длительности импульса
#bit GIE = INTCON.7
//Адрес бита глобального разрешения прерываний
#bit TMR2ON = T2CON.2
//Адрес бита включения TMR2
#bit T2CKPS0 = T2CON.0
#bit T2CKPS1 = T2CON.1
//Адрес битов коэффициента предделителя TMR2
#bit CCP1M2 = CCP1CON.2
#bit CCP1M3 = CCP1CON.3
#bit TMR2IF = PIR1.1
//Адрес флага прерывания по переполнению таймера2
#bit TMR2IE = PIE1.1
#bit PEIE = INTCON.6
//Адрес бита разрешения прерываний от периферийных устройств
int i=0;
//Переменная - счётчик
int hold;
const char number[]=
{
255,127,10,30,40,37,100,50,127,255,255,255,255,90
};
#int_timer2
//Прерывание по переполнению TMR2
void timer2_isr()
{
TMR2IF=0;
CCPR1L=number[i];
i++;
hold=sizeof(number);
if (i==hold)
{
i=0;
PEIE=0;
TMR2IE=0;
GIE=0;
TMR2ON=0;
//PORTB=0b00000001;
}
}
void main()
{
PORTB=0;
TRISB=0;
//Порт В работает на выход
T2CKPS1=0;
T2CKPS0=0;
//Коэффициент предделителя TMR2=1
PR2=63;
//Частота дискретизации ШИМ - сигналов равна 78КГц
//Разрядность ШИМ = 8
GIE=1;
//Глобальное прерывание разрешено
PEIE=1;
//Прерывание разрешено от внешних прерываний
TMR2IE=1;
//Прерывания разрешены при совпадении TMR2 с PR2
CCP1M3=1;
CCP1M2=1;
//Модуль ССР включён в режиме ШИМ
TMR2ON=1;
//TMR2 включён
while (1)
{
}
}
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
ну я ццс не знаю и собственно, не стремлюсь, но !
1. Вы забираете 8 битное значение в CCPR1L, забывая, что младшие 2 разряда нужно занести
CCP1CON
2. На 628 соорудить что-то терпимо говорящее невозможно.
Я это сам пробовал и почувствовал разницу между ним и 8 мегой, например.
Ну.. воспользуйтесь 18, 24 серией, в самом деле, не 37 год.
1. Вы забираете 8 битное значение в CCPR1L, забывая, что младшие 2 разряда нужно занести
CCP1CON
2. На 628 соорудить что-то терпимо говорящее невозможно.
Я это сам пробовал и почувствовал разницу между ним и 8 мегой, например.
Ну.. воспользуйтесь 18, 24 серией, в самом деле, не 37 год.
- Реклама
Re: Воспроизведение звука на основе pic 16f628a
Все наши сегодняшнии технологии родом из 19 века
На самом деле для меня результат, если хотя бы отдельные слова можно быдет различить)) главное понять и реализовать принцип.. такие детали как качество звучания и д.т. придут потом
Да, забыл про младшие и старшие биты)
Теперь так?
Да, забыл про младшие и старшие биты)
Код: Выделить всё
void timer2_isr()
{
TMR2IF=0;
databits_order=number[i];
CCPR1L=databits_order>>2;
//Старшие 6 бит
bit0=databits_order & 0x01;
if (bit0==0x01)
{
DC1B0=1;
}
else
DC1B0=0;
bit1=databits_order & 0x10;
if (bit1==0x10)
{
DC1B1=1;
}
else
DC1B1=0;
//Младшие 2 бита
i++;
hold=sizeof(number);
if (i==hold)
{
i=0;
PEIE=0;
TMR2IE=0;
GIE=0;
TMR2ON=0;
//PORTB=0b00000001;
}
}
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Юр, а не ты ли стыковал его с MMC?urry писал(а):На 628 соорудить что-то терпимо говорящее невозможно
Короче говоря, гнусная клевета.
Именно "говорящее" очень даже можно (кто не верит, давайте мыло). Во всяком случае на Асме.
Причём, как уже упоминал, схема элементарная, и на дешёвых элементах.
Вот с "поющим", действительно, гораздо сложнее.
ICQ нет, и, в ближайшее время, не будет.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
да, я
http://www.remexpert.com/ipb/topic2548.html
а потом посмотрел как Чан делает
http://elm-chan.org/
и добавил буфер в 256 байт
http://vrtp.ru/index.php?showtopic=14534
разница - очень видна.
http://www.remexpert.com/ipb/topic2548.html
а потом посмотрел как Чан делает
http://elm-chan.org/
и добавил буфер в 256 байт
http://vrtp.ru/index.php?showtopic=14534
разница - очень видна.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Да это был не вопрос, а утверждение (я прекрасно помню этот топик).urry писал(а):да, я
Если ты про "музыкальную шкатулку", таки оригинальное решение по поводу самого сэмпла (хотя и не уверен, что его личное). Я там пару других мелодий составил, но, как ты понимаешь, детально с работой не разбирался (компилировали другие люди).urry писал(а):а потом посмотрел как Чан делает
Проект твой у меня не открывается, так что ничего не увидел.urry писал(а):разница - очень видна.
Можешь на словах объяснить, что за буфер?
ICQ нет, и, в ближайшее время, не будет.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Чтение с ммс карточки идет неравномерно - в конце каждого сектора (512 байт, килобайт, неважно) возникает пауза, связанная с необходимостью прочитать 2 байта контрольной суммы и выскочить в поиск начала нового сектора.
Чтобы сгладить эту неравномерность, Чан поставил кольцевой буфер в 256 байт, идет упреждающее чтение с карточки , запись в кольцевой буфер и по таймеру - читаются оттуда данные.
Неравномерность исчезла - качество звука возросло.
Все, собственно...
Чтобы сгладить эту неравномерность, Чан поставил кольцевой буфер в 256 байт, идет упреждающее чтение с карточки , запись в кольцевой буфер и по таймеру - читаются оттуда данные.
Неравномерность исчезла - качество звука возросло.
Все, собственно...
Re: Воспроизведение звука на основе pic 16f628a
Залив, сию управляющую программку (с кое какими изменениями, установив постскалер, равным восьми) в протеус и подключив осцилограф, я увидел периодически изменяющиеся (с периодом, равным восьми) прямоугольные импульсы. Но так как 628 имеет скудную память, цифр сватает только на несколько милисекунд, что определенно недостаточно для человеческого уха. 
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Объясните, на что Вы рассчитывали. При скромненькой частоте дискретизации 22 килогерца 10 секундная запись занимает 220 кБайт.
Теме этой уже лет 5, наверное, и здесь, и на казусе изжевана.
Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd .
при маленьком количестве файлов в корне ммс нет необходимости поднимать на мк поддержку ФАТ - я читал, например, начало файла и длину с служебной области.
При большом количестве звуковых файлов - есть, в этом случае ставят библиотеку Чана FATFS - она написана очень грамотно и без труда портируется на любой компилятор.
Но не на 628 камень - нехватка памяти.
Поэтому предлагаю Вам сразу перейти с 628 пика на пик 24f16ка102, например, 3 бакса стоимости вместо 2 за 628, зато все проблемы - с поднятием файловой системы, память под кольцевой буфер - исчезают.
Теме этой уже лет 5, наверное, и здесь, и на казусе изжевана.
Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd .
при маленьком количестве файлов в корне ммс нет необходимости поднимать на мк поддержку ФАТ - я читал, например, начало файла и длину с служебной области.
При большом количестве звуковых файлов - есть, в этом случае ставят библиотеку Чана FATFS - она написана очень грамотно и без труда портируется на любой компилятор.
Но не на 628 камень - нехватка памяти.
Поэтому предлагаю Вам сразу перейти с 628 пика на пик 24f16ка102, например, 3 бакса стоимости вместо 2 за 628, зато все проблемы - с поднятием файловой системы, память под кольцевой буфер - исчезают.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Вот тут не понял.urry писал(а):Неравномерность исчезла - качество звука возросло.
Описанная проблема может вызвать только "заикания" звука. Каким образом она влияет на качество?
Как уже говорил, я реализовал всё на 24cxx.urry писал(а):Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd
Увеличение частоты дискретизации практически не даст повышения качества. Необходимо повышать разрядность, что упирается в возможности модуля CCP.
ICQ нет, и, в ближайшее время, не будет.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
Там не заикание - посторонний шум, скорее, потому 512 байт пролетают быстро.
Особенно чувствуется на маленьких уровнях громкости.
Ну пример я уже выкладывал, ты наверняка слышал, может тс будет интересно.
Это - без буфера, 628 пик, снято перед входом УНЧ.
Особенно чувствуется на маленьких уровнях громкости.
Ну пример я уже выкладывал, ты наверняка слышал, может тс будет интересно.
Это - без буфера, 628 пик, снято перед входом УНЧ.
- Вложения
-
- tst_32.part2.rar
- (607.77 КБ) 325 скачиваний
-
- tst_32.part1.rar
- (781.25 КБ) 302 скачивания
Re: Воспроизведение звука на основе pic 16f628a
Обычные 16-ричные редакторы представляют цифры в 10-тичной форме, без характерной приставки 0х..Заболев этим вопросом, я написал мини - программку, добавляющую эту важную часть к каждой цифре+запятую в конец. Думаю, весьма полезная штука для записи какой нибудь wav в память МК.
- Вложения
-
- prog_na_C.rar
- (4.13 КБ) 255 скачиваний
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
Re: Воспроизведение звука на основе pic 16f628a
Попробовал подключить внешнюю память типа 24СL256 по интерфейсу i2C и вот что из этого вышло: (только опять не работает
)
Код: Выделить всё
#include <16f628a.h>
#use delay(clock=1000000)
#fuses HS,NOWDT
#use i2c(master,sda=PIN_A1,scl=PIN_A0,FORCE_HW)
#byte TRISA = 0x05
#byte PORTB = 0x06
#byte TRISB = 0x86
void main()
{
int c1=5,c2;
TRISA=0;
TRISB=0;
PORTB=0;
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;
}
}
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
Re: Воспроизведение звука на основе pic 16f628a
Или вот так:
Код: Выделить всё
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;
}
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
При всей моей нелюбви к ццс...
Трис а0, а1 в "1".
Чтение перед стоп делать без ожидания бита подтверждения c2=i2c_read(0);
(С)Я уже столько знаю о прокладках, что сам могу их носить...
Трис а0, а1 в "1".
Чтение перед стоп делать без ожидания бита подтверждения c2=i2c_read(0);
(С)Я уже столько знаю о прокладках, что сам могу их носить...
Re: Воспроизведение звука на основе pic 16f628a
Порт А на вход перевел, но не помогло..без бита подтверждения говорите..а как тогда?
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
[i]Лорд Кельвин, физик, 1899 г.[/i]
[i]Лорд Кельвин, физик, 1899 г.[/i]
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Воспроизведение звука на основе pic 16f628a
c2=i2c_read(0);
это и есть без бита подтверждения.
подтягивающие резисторы на сда и сдл, надеюсь, стоят ?
это и есть без бита подтверждения.
подтягивающие резисторы на сда и сдл, надеюсь, стоят ?


