PS2 » 02 май 2008, 12:38
Не могу дойти как задействовать шим на микроконтроллере AVR. (mega16) Читал курс avr123.nm.ru но не всё понятно. А конкретно непонятно как программно включить.
- Код: Выделить всё • Развернуть
DDRD=0x20; // 00100000 PD5(OC1A)-PWM Timer1 OUT ---- тут всё понятно, 5 нога выход для ШИМ
// ножку PD5 назначить выходом
// Настройка TIMER1 для генерации ШИМ
//TIMER1 initialize
//prescale:1 clock 7.37 MHz
// WGM: 7) PWM 10bit fast, TOP=0x03FF
// actual value: 7200,000Hz (100,0%)
// последнее - это частота ШИМ сигнала
TCCR1B = 0x00; //stop Timer
TCNT1H = 0xFC; // 11111100 --- эти строчки не понятны
TCNT1L = 0x01; // 00000001
---
в общем и дальше не понятно. Разъясните пожалуйста.
---
- Код: Выделить всё • Развернуть
/* значение в 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>
avr123.nm.ru » 02 май 2008, 15:14
ИМХО - ОЧЕВИДНО !
- Код: Выделить всё • Развернуть
TCCR1B = 0x09; // 00001001 - start Timer
START - т.е. ПУСК, ЗАПУСК ...
Добавлено спустя 11 минут 33 секунды:Курс расчитан на последовательное чтение ! ШИМ - это уже задача 8.
А с таймерами работа есть в задачах 1 и 6.
SSG » 02 май 2008, 21:52
Таймер 1 16-и битный. Поэтому его счетный регистр состоит из двух восьмибитных: старшего (пишется с буквом H (от хай) и младшего L (от лоу)). Первая непонятная запись - запись числа в счетный регистр таймера TCNT1. Старший байт числа в старший регистр, а младщий - в младший. Такое записывание используется когда нужно, чтобы таймер-счетчик не с нуля считал, а с какого-то значения.
Про OCR1A написано в комментариях. Это регистр сравнения. Когда значение в счетном регистре таймера сравняется со значением, предварительно заботливо записанным в регистр сравнения, может произойти некоторое событие. При генерации ШИМ таким событием может быть изменение уровня сигнала на выходе схемы сравнения - ножке контроллера OC1A.
Советую про таймеры и ШИМ почитать в книге Евстифеева.