Автор Тема: 16F876A отличия прошивки?  (Прочитано 16660 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #40 : Мая 13, 2014, 08:38:43 am »
Цитировать
Прикидывал по сигма-дельта модуляторам на досуге.

Зачем это все? Считаем еще раз.

Пусть тактовая частота процессора 72МГц. Для удобства заводим ШИМ 8 бит. Период его будет 280кГц. На прерывание от переполнения вешаем следующую процедуру:

{
static int i1; //первый интегратор
static int i2; //второй интегратор
extern volatile int sample; //Входной семпл

int s=i2&0xFF0000; //Псевдовыход ШИМ'а
i2+=i1-s; //Обновление второго интегратора
i1+=sample-s; //Обновление первого интегратора
PWM=s>>16; //Выдача нового значения ШИМ, возможно тут надо перейти из signed в unsigned
}

На вход (т.е. в переменную sample) кормим 24хбитные значения семплов.

Этот код - сигма-дельта второго порядка, для него характерен спад шума со скоростью 12дБ/октава, т.е. для верхней частоты, скажем в 20кГц шум будет снижен на 12*log2(280кГц/20кГц)=46дБ.

Ну и сам ШИМ, т.к. он 8 бит, имеет шум квантования -6*8=-48дБ. Итого, на частоте 20кГц шумы квантования не превысят -48-46дБ=-92дБ, что соответствует АЦП в 15 бит.

Осталось только отфильтровать до вменяемых значений собственно ШИМ (если это актуально). Скажем так, LPF четвертого порядка будет вполне адекватен.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #41 : Мая 13, 2014, 08:43:59 am »
Справедливости ради надо отметить, что можно было бы еще сделать честный оверсемплинг, а не просто укладывать в переменную sample отсчеты с частотой дискретизации собственно аудиопотока, но это уже от лукавого, как по мне, все равно никто не услышит, если никому не говорить ;)
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

research

  • Гость
Re: 16F876A отличия прошивки?
« Ответ #42 : Мая 13, 2014, 09:25:36 am »
У меня пока в голове не укладывается, если оно заработает, тогда восторг!
Почему же многочисленные юзеры tiny25/45/85 так не сделали? Там же PLLка и ШИМ может работать на 64МГц, и можно много чего творить в 8 ног МК + 8 ног ОУ фильтра!

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #43 : Мая 13, 2014, 09:46:59 am »
Цитировать
У меня пока в голове не укладывается, если оно заработает, тогда восторг!
Почему же многочисленные юзеры tiny25/45/85 так не сделали? Там же PLLка и ШИМ может работать на 64МГц, и можно много чего творить в 8 ног МК + 8 ног ОУ фильтра!

Ну так это вопросы к "многочисленным юзерам". Я примерно так в цифровом беспроводном мониторинге аудиопоток 2*16бит*48кГц проигрываю с радиоканала при помощи ATTiny261. Причем, ШИМ работает прямо на наушники, в одном комплекте получается усилитель класса D. Там, конечно, все впритык по производительности получается, ручная работа на ассемблере практически. Потому как поток еще и упаковывается (иначе он не лезет в двухмегабитный радиоканал).
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

research

  • Гость
Re: 16F876A отличия прошивки?
« Ответ #44 : Мая 27, 2014, 01:30:02 pm »
Нашел наконец вводные по stm32: http://habrahabr.ru/post/125994/

Разве, что автор написал JTAG , а на деле использует SWD, но хоть какие-то разъяснения есть.


Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #45 : Ноября 26, 2014, 09:39:00 pm »
чего-то не завелся у меня примерчик (сигма-дельта второго порядка, который). в 1 бит оно жужжит, но по качеству очень прилично проигрывает обычному 8 бит ШИМ.

Цитировать
int s=i2&0xFF0000; //Псевдовыход ШИМ'а
Цитировать
Если у нас знаковый тип, то получается &0x00FF0000 сразу откусывает старший байт, со знаком, если число отрицательное.

Попутно был найден OnePageStory.pdf
c примером:

double u, v=0, x1=0, x2=0;
while( cin >> u ){
x1 += u - v;
x2 += x1 - v;
v = x2<0?-1:1;
cout << v << endl;
}
Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #46 : Ноября 26, 2014, 10:21:56 pm »
Цитировать
Если у нас знаковый тип, то получается &0x00FF0000 сразу откусывает старший байт, со знаком, если число отрицательное.

Семплы на входе должны быть 24хбитные без знака.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #47 : Ноября 26, 2014, 10:26:10 pm »
Более того, оно не в 1 бит жужжит.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #48 : Ноября 26, 2014, 11:11:28 pm »
я пробовал со знаковыми и беззнаковыми сэмплами.

пока наколхозил первый порядок. 24 бит на входе, но знаковых (wav файлы >8 бит знаковые по умолчанию)
     i1+=sample;
      s=i1&0xffff0000;
      i1-=s;
      TIM_SetCompare1(TIM3, (s>>16)+128);

Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #49 : Ноября 26, 2014, 11:23:41 pm »
Понял, была проверка на внимательность.
Поменял строки подсчета интеграторов в Вашей программе согласно алгоритму из PDFки и все заработало.

x1 += u - v;
x2 += x1 - v;
Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #50 : Ноября 27, 2014, 10:45:49 am »
Цитировать
Понял, была проверка на внимательность.

Там еще много маленьких тонкостей, например, с возможным переполнением интеграторов.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

оleginсhat

  • Сообщений: 1129
  • GtLab.Net forever!
    • ICQ клиент - 5844880
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #51 : Ноября 27, 2014, 05:52:22 pm »
в шоке просто-4 раза прочитал-понял мало
чуствую себя полным папуасом
пардон за офтоп
Mesa DR 2 ch,Soldano Decatone, then-Fender Champ,Soldano Slo-100,Slo-50,Marshall JCM-800.

Denn

  • Global Moderator
  • *****
  • Сообщений: 14277
  • είμαι ο μουσικός και ο ραδιομηχανίκός
    • ICQ клиент - 322153053
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #52 : Ноября 28, 2014, 09:04:00 am »
Цитировать
в шоке просто-4 раза прочитал-понял мало
чуствую себя полным папуасом

Всегда удивляюсь, зачем люди себя насилуют прочтением непоятного и им ненужного? Видимо какая-то потребность в организме уменьшить самооценку...  :-?
Не говорите что мне делать, и я не скажу куда Вам идти.

Лучшее решение из возможных - самое простое. И наоборот.

Прежде чем судить

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #53 : Декабря 01, 2014, 09:44:41 am »
Вот  и тонкости алгоритма всплыли:
Это синус по табличке, 8 младших бит, если в 16 битной терминологии. Фильтровано 4м порядком, ну и первым для сравнения.

Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #54 : Декабря 01, 2014, 11:47:13 am »
Какое-то вообще странноватое поведение. Сверху сатурация, внизу - явно переполнение, но ведь есть еще 8 бит запаса (я ж правильно понял?).

Весь алгоритм в студию, разберемся.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #55 : Декабря 01, 2014, 08:11:18 pm »
вот выводится табличка синуса 8 бит , просто сдвинутая на 16 бит влево. Т.е.  чистый ШИМ 8 бит



Вот таблица сдвинутая на 8 бит. Т.е. младшие 8 бит в случае 16 битного звукового диапазона, или средние 8 бит 24 битного.



как-то не выглядит амплитуда в 256 раз меньше верхнего случая.


Обработчик прерывания
void TIM3_IRQHandler(void)
{
      volatile static u32 RRR;

      static unsigned int sample;
      static int i1=0;                                                       //первый интегратор
      static int i2=0;                                                       //второй интегратор
      int s;                                                                         //Псевдовыход ШИМ'а

      TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
      RRR+=idRRR;                                                                  // DDS

      sample=( (wave_tab[RRR>>23])<<8 );                              // x256
      //sample=( (wave_tab[RRR>>23])<<16 );                        // x65536

      s=i2 & 0xFF0000;                                                       //Псевдовыход ШИМ'а
      i1+=sample-s;                                                             //Обновление первого интегратора
      i2+=i1-s;                                                                   //Обновление второго интегратора

      TIM_SetCompare1(TIM3, (s>>16) );                              //  - дельта сигма

}

обычный DDS, таблица синуса беззнаковая, 8 бит,  размером 512 элементов.

Т.е. изысков никаких совсем.
Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #56 : Декабря 01, 2014, 08:41:41 pm »
По правильному надо сделать вот что.

Вот этот крайне упрощенный вариант
s=i2 & 0xFF0000;

заменить на правильный
if (i2<0)
{
  s=0;
}
else
{
   if (i2>0xFF0000L)
   {
      s=0xFF0000;
   }
   else
   {
      s=i2&0xFF0000;
   }
}

Более того, я рекомендую для начальных тестов работать в середине диапазона, т.е. так
sample=( (wave_tab[RRR>>23])<<8 )+0x7F8000UL;
Потом будете разбираться с переполнениями и прочим.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #57 : Декабря 01, 2014, 09:20:34 pm »
В свое оправдание могу сказать, что самое первое фото снято в середине диапазона, т.к. ОУ был под подозрением и было интересно, кто врет.
Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #58 : Декабря 01, 2014, 09:44:25 pm »
мде, очередной раз мог бы и сам догадаться.
Стало прилично лучше.

Сигнал 10Гц, фильтр 4го порядка на 100Гц, на 2кГц дает ослабление 90дБ. Видимо, начинаются переполнения.

Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com

Shift Line

  • Сообщений: 100
  • st.Peterbsubrg
    • Просмотр профиля
    • E-mail
Re: 16F876A отличия прошивки?
« Ответ #59 : Декабря 01, 2014, 09:47:25 pm »
И главное, забыл сказать спасибо за интересный алгоритм и подсказки.
А то хотелось в лоб упростить себе жизнь, сделать ШИМ 12 бит через 16х8бит и раскидать равномерно по 16 периодам отображаемую величину, дабы вывести шум в область ВЧ.

Частота дискретизации около 17кГц получается.
Spin FV-1 декомпилятор: http://s.shift-line.com/decompiler | Поиск радиодеталей: http://s.shift-line.com