Например TDA7294

Форум РадиоКот • Просмотр темы - Воспроизведение звука на основе pic 16f628a
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср сен 10, 2025 17:45:41

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 55 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Воспроизведение звука на основе 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.
Есть во всем этом хоть доля правды?

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пт авг 05, 2011 22:56:43 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4575
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
Цитата:
Частота дискретизации получается равна 78,12КГц (не много ли?)
Это всё-таки наверное не частота дискретизации, а частота ШИМа. Частота дискретизации это та частота, с которой Вы будете менять значение скважности, т.е. выбирать значения из таблицы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Сб авг 06, 2011 17:11:31 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2335
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
Hispanus писал(а):
Частота дискретизации получается равна 78,12КГц
Как уже правильно заметили, это - частота ШИМ, и то, при 8-битном разрешении и тактовой частоте 20MHz.
Частота дискретизации будет равна той, с которой Вы будете менять данные. Удобно это делать, используя прерывание от TMR2, установив необходимое значение посткалера.
Например, в своём речевом информаторе, я использовал тактовую частоту 16MHz. Соответственно, частота ШИМ получилась 62,5kHz. Установив посткалер равным 8, получилась частота сэмплирования 7812,5Hz. Поскольку стояла задача использовать дешёвые м/сх памяти I2C, то проблематично получить большую. В крайнем случае, удастся её поднять в два раза.
Во вложении - пример использования с массажным креслом (черновой вариант).
P.S.: К сожалению, презентацию форум не принимает. Кому интересно, кидайте мыло.

Hispanus писал(а):
первые два бита загружаю в регистр CCPxX:CCPxY, следующие 8 бит - в регистр ССP1L
Как уже говорил, кодирование разумнее выбирать 8-битным. Следовательно, младшие два бита надо загружать в регистр CCP1CON, а старшие шесть - в младшие шесть битов регистра CCPR1L (старшие два бита надо обнулить).

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 01:27:41 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб мар 26, 2011 14:17:14
Сообщений: 262
Откуда: Оренбург
Рейтинг сообщения: 0
Вот код:
Код:
#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)
    {
    }
}

Скажите, что не так :)

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 13:12:22 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
ну я ццс не знаю и собственно, не стремлюсь, но !

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 века :) На самом деле для меня результат, если хотя бы отдельные слова можно быдет различить)) главное понять и реализовать принцип.. такие детали как качество звучания и д.т. придут потом :)

Да, забыл про младшие и старшие биты)
Код:
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;
    }
}


Теперь так?

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 13:54:40 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2335
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
urry писал(а):
На 628 соорудить что-то терпимо говорящее невозможно
Юр, а не ты ли стыковал его с MMC?
Короче говоря, гнусная клевета. :)
Именно "говорящее" очень даже можно (кто не верит, давайте мыло). Во всяком случае на Асме.
Причём, как уже упоминал, схема элементарная, и на дешёвых элементах.
Вот с "поющим", действительно, гораздо сложнее.

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 14:46:49 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
да, я
http://www.remexpert.com/ipb/topic2548.html
а потом посмотрел как Чан делает
http://elm-chan.org/
и добавил буфер в 256 байт
http://vrtp.ru/index.php?showtopic=14534
разница - очень видна.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 19:05:37 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2335
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
urry писал(а):
да, я
Да это был не вопрос, а утверждение (я прекрасно помню этот топик). :)

urry писал(а):
а потом посмотрел как Чан делает
Если ты про "музыкальную шкатулку", таки оригинальное решение по поводу самого сэмпла (хотя и не уверен, что его личное). Я там пару других мелодий составил, но, как ты понимаешь, детально с работой не разбирался (компилировали другие люди).

urry писал(а):
разница - очень видна.
Проект твой у меня не открывается, так что ничего не увидел.
Можешь на словах объяснить, что за буфер?

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вс авг 07, 2011 19:22:52 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Чтение с ммс карточки идет неравномерно - в конце каждого сектора (512 байт, килобайт, неважно) возникает пауза, связанная с необходимостью прочитать 2 байта контрольной суммы и выскочить в поиск начала нового сектора.
Чтобы сгладить эту неравномерность, Чан поставил кольцевой буфер в 256 байт, идет упреждающее чтение с карточки , запись в кольцевой буфер и по таймеру - читаются оттуда данные.
Неравномерность исчезла - качество звука возросло.
Все, собственно...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пн авг 08, 2011 00:16:42 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб мар 26, 2011 14:17:14
Сообщений: 262
Откуда: Оренбург
Рейтинг сообщения: 0
Залив, сию управляющую программку (с кое какими изменениями, установив постскалер, равным восьми) в протеус и подключив осцилограф, я увидел периодически изменяющиеся (с периодом, равным восьми) прямоугольные импульсы. Но так как 628 имеет скудную память, цифр сватает только на несколько милисекунд, что определенно недостаточно для человеческого уха. :evil:

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пн авг 08, 2011 09:14:25 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Объясните, на что Вы рассчитывали. При скромненькой частоте дискретизации 22 килогерца 10 секундная запись занимает 220 кБайт.
Теме этой уже лет 5, наверное, и здесь, и на казусе изжевана.
Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd .
при маленьком количестве файлов в корне ммс нет необходимости поднимать на мк поддержку ФАТ - я читал, например, начало файла и длину с служебной области.
При большом количестве звуковых файлов - есть, в этом случае ставят библиотеку Чана FATFS - она написана очень грамотно и без труда портируется на любой компилятор.
Но не на 628 камень - нехватка памяти. :)
Поэтому предлагаю Вам сразу перейти с 628 пика на пик 24f16ка102, например, 3 бакса стоимости вместо 2 за 628, зато все проблемы - с поднятием файловой системы, память под кольцевой буфер - исчезают.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пн авг 08, 2011 11:02:45 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2335
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
urry писал(а):
Неравномерность исчезла - качество звука возросло.
Вот тут не понял.
Описанная проблема может вызвать только "заикания" звука. Каким образом она влияет на качество?

urry писал(а):
Сразу возникает вопрос о быстрой внешней памяти большого размера - и самый дешевый вариант получается ммс sd
Как уже говорил, я реализовал всё на 24cxx.
Увеличение частоты дискретизации практически не даст повышения качества. Необходимо повышать разрядность, что упирается в возможности модуля CCP.

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пн авг 08, 2011 12:40:00 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Там не заикание - посторонний шум, скорее, потому 512 байт пролетают быстро.
Особенно чувствуется на маленьких уровнях громкости.
Ну пример я уже выкладывал, ты наверняка слышал, может тс будет интересно.
Это - без буфера, 628 пик, снято перед входом УНЧ.


Вложения:
tst_32.part2.rar [607.77 KiB]
Скачиваний: 315
tst_32.part1.rar [781.25 KiB]
Скачиваний: 297
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Пн авг 08, 2011 16:08:25 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб мар 26, 2011 14:17:14
Сообщений: 262
Откуда: Оренбург
Рейтинг сообщения: 0
Обычные 16-ричные редакторы представляют цифры в 10-тичной форме, без характерной приставки 0х..Заболев этим вопросом, я написал мини - программку, добавляющую эту важную часть к каждой цифре+запятую в конец. Думаю, весьма полезная штука для записи какой нибудь wav в память МК.


Вложения:
prog_na_C.rar [4.13 KiB]
Скачиваний: 248

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вт авг 09, 2011 07:10:10 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб мар 26, 2011 14:17:14
Сообщений: 262
Откуда: Оренбург
Рейтинг сообщения: 0
Попробовал подключить внешнюю память типа 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;
    }
}

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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;
    }

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вт авг 09, 2011 07:54:19 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
При всей моей нелюбви к ццс...

Трис а0, а1 в "1".
Чтение перед стоп делать без ожидания бита подтверждения c2=i2c_read(0);

(С)Я уже столько знаю о прокладках, что сам могу их носить...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вт авг 09, 2011 08:05:38 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб мар 26, 2011 14:17:14
Сообщений: 262
Откуда: Оренбург
Рейтинг сообщения: 0
Порт А на вход перевел, но не помогло..без бита подтверждения говорите..а как тогда?

_________________
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

Лорд Кельвин, физик, 1899 г.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Воспроизведение звука на основе pic 16f628a
СообщениеДобавлено: Вт авг 09, 2011 08:14:05 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
c2=i2c_read(0);
это и есть без бита подтверждения.
подтягивающие резисторы на сда и сдл, надеюсь, стоят ?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 55 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y