Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать. Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил. Робот своими руками. Самодельный робот.
Не могу дойти как задействовать шим на микроконтроллере AVR. (mega16) Читал курс avr123.nm.ru но не всё понятно. А конкретно непонятно как программно включить.
/* значение в 16 битном регистре OCR1A определяет величину генерируемого ШИМ сигнала на ножке PD5 - если поделить ее на 10.23 то получим PWM в процентах*/
OCR1AH = 0x03; // PWM(PD5) = OCR1A / 10.23 OCR1AL = 0xFF; // 0x03FF это число 1023
/* регистр OCR1A состоит из двух 8-ми битных регистров OCR1AH и OCR1AL запись в них нужно проводить в указанной последовательности! */
OCR1BH = 0x03; OCR1BL = 0xFF;
ICR1H = 0x03; ICR1L = 0xFF;
TCCR1A = 0x83; // 10000011
TCCR1B = 0x09; // 00001001 - start Timer
// Теперь ШИМ 100% - т.е. на ножке PD5 лог. "1"
На форуме есть тег 'CODE' для вставки листингов программ! Использование его для вставки листингов ОБЯЗАТЕЛЬНО! <Digit>
Таймер 1 16-и битный. Поэтому его счетный регистр состоит из двух восьмибитных: старшего (пишется с буквом H (от хай) и младшего L (от лоу)). Первая непонятная запись - запись числа в счетный регистр таймера TCNT1. Старший байт числа в старший регистр, а младщий - в младший. Такое записывание используется когда нужно, чтобы таймер-счетчик не с нуля считал, а с какого-то значения. Про OCR1A написано в комментариях. Это регистр сравнения. Когда значение в счетном регистре таймера сравняется со значением, предварительно заботливо записанным в регистр сравнения, может произойти некоторое событие. При генерации ШИМ таким событием может быть изменение уровня сигнала на выходе схемы сравнения - ножке контроллера OC1A. Советую про таймеры и ШИМ почитать в книге Евстифеева.