шим attin261..
- Войдите на сайт для отправки комментариев
Сб, 28/04/2012 - 19:49
И снова здравствуйте!
была очень хорошая тема про fastpwm аттини13, хотел аналогично заюзать attiny261. Но - не выходит..
Помогите по аналогии?
здача: fast pwm, /256=122,5гц, PB1 пин.
TCCR1A = (1 << PWM1A) | (1 << PWM1B) | (1 << COM1A0); // non inverting fast pwm OC1A
//выбор предделителя
TCCR1B = (1 << CS13) | (1 << CS10); //делитель 256, частота 8000000/256/255=122,5гц
TCCR1D = (1 << PWM1A) | (1 << PWM1B);
TCCR1E = (1 << OC1OE1);
//TIMSK = (1<<OCIE0A);
//скважность канала
OCR1C = 255;
OCR1A = 127;
asm("sei"); //разрешить прерывания
Ну как то так
На всякий случай (в порядке параноидального бреда - в принципе, этот бит должен быть сброшен при старте):
PLLCSR &=~(1<<PCKE); // выбираем системный генератор (CK) в качестве источника тактов - синхронный режим работы таймера.
Далее - где вы взяли значения битов для выбора режима? Я нашел в дейташите на тиньку261 табличку 16-19, которая утверждает, что режим fast PWM включается комбинацией битов PWM1x = 1 и WGM11...10 = 00.
Строка TCCR1D = (1 << PWM1A) | (1 << PWM1B);
Но в этом регистре нет битов с именами PWM1A и PWM1B.
И вообще - почему первый таймер? Почему не нулевой? Уж больно первый таймер в этой тиньке навороченный...
А вот это что такое страшное:
TCCR1A = (0x2 << COM1A0) | (0x1 << PWM1A); //FastPwm PB1
В битовых операциях всегда единички двигают. Двойка может использоваться только для шифрования своих потаенных мыслей (2 соответствует 1<<1)
Строка
PLLCSR = (1 << PCKE) | (1 << PLLE);
Согласно дейташиту это переход на работу таймера от внешнего генератора - оно вам надо?
TCCR1B = (0x1 << CS10) | (0x1 << CS13); //=8000000/255/256 = 122.5hz
и
millis = millis + 7; //счетчик миллисекунд
122,5 Гц - это одно прерывание каждые 1000/122,5 = 8,16 мсек
необходимо плюсовать хотя бы восьмерку
Привет! Все перечитал, поужасался откровенной глупости своей )) 0x2 простительно - ибо спер у кого то и не заметил вначале, но часок назад все же глаз зацепился. По другим критикам вроде понял, что к чему, и хочу занулить результы и перейти на нулевой таймер БЕЗ шима на ноге.
8mhz/62=125khz. 125khz в сравнении с OCR1C=125 дают четко килогерц (на самом деле 8, я так и не понял почему).
Давайте попробуем запустить timer0? первый и правда навороченный..
-- Горжусь собой - запустил прерывание int0 по lowlevel, поняв кусочек даташита ))))