==========================================================
Таймер 0
пример кода
TCCR0=(1 << CS02)|(1 << CS00); //prescaler 1024
TIMSK=(1 << TOIE0); //enable interrupt
ISR(TIMER0_OVF_vect) {};
регистр TCNT0 (Timer/Counter Register)
значение таймера
регистр OCR0 (Output Compare Register)
значение для сравнения
регистр TIMSK (Timer/Counter Interrupt Mask Register)
OCIE0 (1) -- разрешение прерывания по сравнению
TOIE0 (0) -- разрешение прерывания по переполнению
регистр TIFR (Timer/Counter Interrupt Flag Register)
OCF0 (1) -- флаг прерывания по сравнению
TOV0 (0) -- флаг прерывания по переполнению
регистр TCCR0 (Timer/Counter Control Register), биты:
FOC0 (7) -- ?? когда ШИМ в него надо писать 0, он всегда читается как 0
если в него записать 1, то на выходе поменяется значение
т.е. он форсирует изменение Waveform Generation и может
использоваться как строб (не вызывая прерываний)
WGM00 (6) -- режим Waveform Generation
WGM01 (3) --
0 0 - обычный режим счет
0 1 - ШИМ с корекцией фазы
1 0 - Clear Timer on Compare Match (CTC) - т.е. как только досчитал до
OCR0, так и обнулился.
1 1 - быстрый ШИМ
COM01 (5) -- в каком режиме на выход пина OC0 будет поступать инфо от таймера
COM00 (4) -- соответсвенный DDR должен быть настроен на вывод.
Для не-ШИМ или CTC
0 0 - обычный режим, пин отключен
0 1 - переключение пина
1 0 - сброс пина
1 1 - установка пина
Fast PWM
0 0 - пин отключен
0 1 - reserved
1 0 - сброс пина, когда OC0 = TOP
1 1 - установка пина, когда OC0 = TOP
CS02..0 (2..0) -- предделитель 000=stop 001=1 010=8 011=64 100=256 101=1024
110=внешний источник с пина T0 по спаду
111=внешний источник с пина T0 по росту
==========================================================
АЦП
Обязательно подключить AVCC к питанию!!!
регистр ADMUX (ADC Multiplexer Selection), биты:
REFS1 (7) -- куда подключен источник опорного напряжения
REFS0 (6) --
0 0 - AREF
0 1 - AVCC (с внешним кодером на AREF)
1 0 - reserved
1 1 - внутренние 2.56V (с внешним кодером на AREF)
ADLAR (5) -- если 1, то выравнивание результата измерения ВЛЕВО.
т.е. результат 8 бит в ADCH, а хвост в 2 бита в ADCL
при чтении ADCL, ADCH будет заблокирован от записи, и пока не
прочитаем ADCH, новый резултат не запишеться.
MUX4..0 -- при значениях n=0..7 - номер пина ADCn. В корпусах TQFP и MLF
(4..0) -- страшие значения определяют дифф.включение и усилитель. В DIP НЕТ!
регистр ADCSRA (ADC Control and Status Register A), биты:
ADEN (7) -- включение АЦП
ADSC (6) -- запуск конверсии, и будет "1", пока идет конверсия. по окончанию
станет "0", НО надо подождать еще ОДИН такт АЦП, что бы резултат
записался в ADCH и ADCL
ADATE (5) -- автозапуск конверсии по тригеру (условию) в регистре SFIOR
ADIF (4) -- флаг прерывания окончания конверсии.
ADIE (3) -- разрешение прерывания от АЦП
ADPS2..0 -- предделитель частоты 000=2 001=2 010=4 011=8 100=16 101=32
(2..0) 110=64 111=128
регистр SFIOR (Special FunctionIO Registe), биты:
ADTS2..0 (7..5) -- условия автозапуска коверсии. от какого прерывания
000 - свободный режим, запуск ни от чего не зависит?
001 - от компаратора
010 - внешнее INT0
011 - от таймера0 сравнения
100 - от таймера0 переполнения
101 - от таймера сравнения Match B (???)
110 - от таймера1 переполнения
111 - от таймера1 Capture Event
4 бит -- reserved -- для совместимости надо в него писать "0"
Комментариев нет:
Отправить комментарий