Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

В чем же оно вредит? LC и RC - фильтры одного порядка, только в случае RC-фильтра на резисторе будут потери и соответственно передаточный коэффициент меньше. и чем больше резистор тем больше потерь. В LC-фильтре будут только активные потери на сопротивлении дросселя, а это считанные Омы...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

как собираетесь 8кбит поток подавать на шим

частота семплирования 8КГц - 125мкс
Каждые 125мкс извлекаем данные из буфера, записываем в регистр шима. Можно брать данные прямо с ацп.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

RC-фильтр первого порядка, если у него частота среза 4кГц то 8кГц им будет подавлено на 6Дб. Конечно бить по ушам уже не будет но это всего в 2..3 раз меньше - слышно будет еще как. Если городить нормальный фильтр, то это нужен минимум 3-го порядка... с высокой добротностью. Ну да, это возможно но слишком сложная схемотехника получится, уж лучше поднять частоту ШИМ на порядок, и аналоговая схемотехника сильно упростится.

Если мы поднимаем частоту на порядок, то тот же фильтр первого порядка даёт нам уже 20дБ ослабления побочной частоты(в 10 раз), не говоря уже о том что она оказывается вне слышимого диапазона. И динамик сам по себе становится еще одним фильтром первого порядка для такого ультразвука.

И если уж быть точным до конца, поток там не 8кБит, а 64Кбит == 8кБайт.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Не поясните, зачем такой поток для передачи голоса?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

исходя из диапазона частот голоса
https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%81%D0%B0
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Для передачи 3000гц нужна полоса в 64к ? Котельников с Шенноном показывают вам кулаки и обзывают нехорошими словами.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

обман - 3400Гц :shock:
Как следует из теоремы Котельникова, для того, чтобы однозначно восстановить исходный сигнал, частота дискретизации должна более чем в два раза превышать наибольшую частоту в спектре сигнала.

https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 0%B8%D0%B8
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Сможете самостоятельно умножить 3400 на 2 ?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

6800Гц, если "более чем в два раза", ближайшая стандартная дискретизация 8 000 Гц
Некоторые из используемых частот дискретизации звука:
8 000 Гц — телефон, достаточно для речи, кодек Nellymoser;
11 025 Гц;
12 000 Гц (на практике встречается редко);
16 000 Гц;
22 050 Гц — радио;
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Совершенно верно. А 64к нафига тогда?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

поток там не 8кБит, а 64Кбит == 8кБайт.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Тут с теоремой Котельникова небольшая засада... она вообще утверждает что МОЖНО ВОССТАНОВИТЬ но на практике вы видели чтобы приняв такой поток данных и что-то восстанавливали? Это надо ресемплер, математику и т.д. но чисто математически можно восстановить да, спору нет. На практике проще поднять частоту семплирования и использовать доступный частотный диапазон не полностью, тогда погрешность восстановления не будет бросаться в глаза.

Не стоит путать количество семплов в секунду и плотностью потока данных. Для простого случая, когда нет никакого сжатия 8 бит на 8К семплов дают поток в 64Кбит, в цифровой телефонии же те же 16 бит 8К семплов ужимают до потока 9.6Кбит.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):
поток там не 8кБит, а 64Кбит == 8кБайт.

ДОжили. Биты с байтами путать начали? Для передачи речи без компрессии достаточно потока 8к. Килобит, если что.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

a5021 писал(а):Для передачи речи без компрессии достаточно потока 8к. Килобит, если что.

дожили не мы а вы 8)
8 килобит в сек это 1 кбайт в секунду, тогда частота сэмплирования получается около 1000Гц - ни в какие ворота
Для простого случая, когда нет никакого сжатия 8 бит на 8К семплов дают поток в 64Кбит
ugashet
Родился
Сообщения: 1
Зарегистрирован: Вс июн 07, 2015 21:42:22

Re: Программирование STM8

Сообщение ugashet »

Доброго времени уважаемые котоведы, начинаю работать с stm8s, помогите с кодом под IAR (желательно без SPL), по измерению длительности внешнего импульса, прерывание по захвату на TIM1 или TIM2, длительность импульса от 5 до 100 миллисекунд. Спасибо!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Отлично, 8К частота дискретизации... а АЦП у тебя 1-битный? только с 1-битным АЦП можно получить 8Кбит/сек при 8К частоте.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Вы АЦП с ШИМ-сигналом не путайте только. Один восьмибитный семпл, подающийся в регистр сравнения таймера на выходе канала ШИМ превращается ровно в один импульс. Один импульс это сколько бит?
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Программирование STM8

Сообщение Kinder_Surprise »

длительность импульса от 5 до 100 миллисекунд.

Для прерываний не имеет особого значения. Всё расширяется программными счётчиками.
Для TIM2 по входу TI2 будет примерно так:
настраиваем таймер

Код: Выделить всё

  TIM2->PSCR = 0;                         

  TIM2->CCMR1 |= TIM2_CCMR_CCxS_1;          // 10: CC1 channel is configured as input, IC1 is mapped on TI2FP1
  TIM2->CCMR2 |= TIM2_CCMR_CCxS_0;          // 01: CC2 channel is configured as input, IC2 is mapped on TI2FP2

  TIM2->CCER1 &= ~TIM2_CCER1_CC1P;          // 0: Capture is done on a rising edge of TI2F
  TIM2->CCER1 |= TIM2_CCER1_CC2P;           // 1: Capture is done on a falling edge of TI2F

  TIM2->CR1 |= TIM2_CR1_URS;

  TIM2->CCER1 |= TIM2_CCER1_CC1E;           // Capture enabled
  TIM2->CCER1 |= TIM2_CCER1_CC2E;           // Capture enabled
 
  TIM2->IER |= TIM2_IER_CC1IE;
  TIM2->IER |= TIM2_IER_CC2IE; 
  TIM2->IER |= TIM2_IER_UIE;
 
  TIM2->CR1 |= TIM2_CR1_CEN;                    // Counter Enable

прерывания

Код: Выделить всё


 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
 {   
  cnt_ref_ovf++;
   
  TIM2->SR1 &= ~TIM2_SR1_UIF;         
 }


 INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
 {
  if(TIM2->SR1 & TIM2_SR1_CC1IF)
  {
   cnt_ref_ovf_CC1 = cnt_ref_ovf;
   
   TIM2->SR1 &= ~TIM2_SR1_CC1IF;
  }

  if(TIM2->SR1 & TIM2_SR1_CC2IF)
  {
   cnt_ref_ovf_CC2 = cnt_ref_ovf;

   temp1  = (uint16_t)(TIM2->CCR1H) << 8;
   temp1 |= (cnt_ref_ovf_CC1 * 65536) | TIM2->CCR1L;
 
   temp2  = (uint16_t)(TIM2->CCR2H) << 8;
   temp2 |= (cnt_ref_ovf_CC2 * 65536) | TIM2->CCR2L;
 
   value = temp2 - temp1;

   TIM2->EGR |= TIM2_EGR_UG;                     // Update Event
   nop();
   nop();

   TIM2->SR1 = 0;

   cnt_ref_ovf = 0;
   cnt_ref_ovf_CC1 = 0;
   cnt_ref_ovf_CC2 = 0;   
  }
   
 }

value и будет длительностью импульса в тиках таймера.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

... который следует со скоростью 2048Кбит/сек. Иначе нужный звук не закодировать!

У вас какая-то каша в голове с этими битами и байтами.
Ответить

Вернуться в «Разные вопросы по МК»