Страница 1 из 1

Синус 31гц на ШИМ на AVR

Добавлено: Чт ноя 11, 2010 23:32:34
truebest
Доброй ночи всем, подскажите пожалуйста или дайте исходники примеры точного шима для генерации синуса в 31 гц ну или околотого...
Понимаю код на си

Re: Синус 31гц на ШИМ на AVR

Добавлено: Пт ноя 12, 2010 00:16:16
maglev
Ну и в чем проблема? Один таймер делает ШИМ, другой неспешно выставляет ему значения OCR из таблицы синуса (лучше хранить четверть синуса). Можно и по-другому, но так проще.
Частота синуса зависит от второго таймера, разрешающая способность определяется первым и таблицей.

Re: Синус 31гц на ШИМ на AVR

Добавлено: Пт ноя 12, 2010 20:11:24
truebest
А с кодом никто не поможет, не помню назначение регистров AVR

Re: Синус 31гц на ШИМ на AVR

Добавлено: Пт ноя 12, 2010 20:47:25
Engineer_Keen
truebest писал(а):не помню назначение регистров AVR

А кто их помнит? Для этого даташит есть :idea:

Re: Синус 31гц на ШИМ на AVR

Добавлено: Сб ноя 13, 2010 17:12:17
m210
Engineer_Keen писал(а):
truebest писал(а):не помню назначение регистров AVR

А кто их помнит? Для этого даташит есть :idea:

не всегда :) Например задать 1сек нужно путем вычисления, для 8Mhz таймер включается как 7813 вроде и это число нужно перемести в hex, получится 1Е85
Но это видимо не все, я и щас думаю как переделать часы для работы от 32Mhz кварца...стало быть переводишь 32000 в hex и тупа вставляешь значения, а на деле 1сек получается 1милисек если не меньше, бежит с бешенной скоростью, так и не понял как перевести часы на бОльшую частоту :))

Re: Синус 31гц на ШИМ на AVR

Добавлено: Сб ноя 13, 2010 18:03:49
AlexFisher
Ну батенька... а предделитель у таймера включить? По форуму ссылки поищи, попадались проги, которые сразу и предделитель считают и значение таймера.

Собственно, нужно значение предделителя выбрать в 4 раза больше, если это возможно.

Re: Синус 31гц на ШИМ на AVR

Добавлено: Сб ноя 13, 2010 19:31:59
m210
Да он наверно включен :))

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

interrupt [TIM1_COMPA] void timer1_compa_isr(void) // таймер выставлен на частоту 1 Гц
{
// Place your code here
  TCNT1H=0;
  TCNT1L=0;
  sek++; // инкрементируем секунду
   
}
TCCR1B=0x05;
OCR1AH=0x1E;
OCR1AL=0x85;

Все остальные биты таймера 0х00 поэтому их не указывал
Вот впринципе инциализация таймера на 8Мhz, как дальше не знаю, но спасибо за подсказку :)