ШИМ Прерывания
- Войдите на сайт для отправки комментариев
Чт, 25/04/2013 - 04:50
void setup() { Serial.begin(9600); pinMode(3, OUTPUT); TIMSK2 &= ~( (1<<OCIE2A) | (1<<OCIE2B) | (1<<TOIE2) ); //TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика TCCR2A &= ~(1<<WGM21) | (1<<WGM20);// Режим работы таймера/счетчика TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора TCCR2B = (TCCR2B & ~( (1 << CS22) | (1 << CS21) ) ) | (1 << CS20) ; for (int i=1; i<=13; i++) pinMode(i, OUTPUT); TCCR2B=TCCR2B&( ~(1<<COM2B1) ) | (1 << COM2B0); TCCR2B=TCCR2B&( ~(1<<COM2A1) ) | (1<<COM2A0); TIMSK2 |= (1<<TOIE2); } ISR(TIMER2_OVF_vect) { } void loop() { int a; while(1) { a=analogRead(A0); delay(50); OCR2B=a/4; OCR2A=127; Serial.print(a); Serial.write("\n"); } }
Выводы 3 и 11 должны давать ШИМ сигнал, но на них ноль.
Страшно большое количество неоднозначных (по смыслу) скобочек и знаков инверсии. Запутались Вы в них где-то.
Предлагаю упростить
Конечно же все дружно понимают, какой камень используется. Все дружно понимают, где лежат даташиты на этот камень. Все дружно тупят и не могут подсказать. Да, мы такие, нас телепатии никто не обучал, увы. Фиг с ним, что при программировании на уровне регистров, есть различия в программировании устройств. Да, именно так, подумали всё, фиг с ним.
Это там кто-то из Мег. Скорей всего, 328, поскольку Ардуины на них штампуют.
Но кажется, что товарищ просто в синтаксисе запутался, поэтому пока камень и не очень важен
В данном вопросе - предполагать - значит просто терять время.
Arduino Duemilanove ATMEGA 328P-PU
Проверьте по ДШ строки 17 и 18, у Вас там ошибка, бит от одного регистра, у сброс их в другом регистре.
Более того, даже если Вы бы выводили их в правильный регистр (TCCR2A), то получили бы отключенные выходы OCR2A, OCR2B, что привело бы к тому же результату, поскольку согласно ДШ запись двух 0 приведет к установке "Normal port operation, OC2B disconnected".
Остальное сильно не смотрел, удачи
Вопрос один ЗАЧЕМ ???
Зачем вам это если вы не понимаете как настраиваются Т/С и как пользоваться регистрами?
Зачем вам это если вы не понимаете что у вас понаписано и за что отвечает тот или иной регистр или бит?
Воспользуйтесь функцией analogWrite().
Если хотите разобраться, то зачем сюда это выкладывать? Вам бы для начала изучить что такое, например, глобальная переменная, функция loop() или цикл for. И только потом уже разбираться с регистрами.