Страница 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
А кто их помнит? Для этого даташит есть

Re: Синус 31гц на ШИМ на AVR
Добавлено: Сб ноя 13, 2010 17:12:17
m210
Engineer_Keen писал(а):truebest писал(а):не помню назначение регистров AVR
А кто их помнит? Для этого даташит есть

не всегда

Например задать 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, как дальше не знаю, но спасибо за подсказку
