ivainc1789 0 14 августа, 2008 Опубликовано 14 августа, 2008 · Жалоба Случился полный затык с ATtiny45, подключенной Драконом к Студии 4.14b589. В кристалл зашита программа для установки таймера1 в режим PWM на вывод OC1B (32MHz/4/256=31250Hz=Fpwm): __C_task void main(void) { SETUP(OC1Apin,OUT0); SETUP(OC1Bpin,OUT0); TCCR1 = BIN(00000000); GTCCR = BIN(01100010); TCNT1 = 0; OCR1A = 20; OCR1B = 100; OCR1C = 255; PLLCSR = BIN(10000110);Delay(200*us); while(!CHKBIT(PLLCSR,PLOCK)); TCCR1 |= 0x03; while(1); } Однако в результате на выводе OC1B видим лог.0. Начал разбираться. Протестировал работу OC1A манипуляцией битов COM1A1 и COM1A0 в TCCR1 прямо из Студии. Все работает как и описано в даташите. Те же самые действия с OC1B (меняем COM1B1 и COM1B0 в GTCCR) не приводят к появлению частоты на OC1B. Генерация частоты здесь появляется только если включить канал OC1A теми же COM1A1 и COM1A0 в TCCR1!!!! Не понимаю, как такое может быть? Ведь waveform generators отдельные для обоих каналов судя по даташиту... Фузы все по умолчанию, т.е. режим совместимости таймера1 с ATtiny15 не установлен. Использую компилятор IAR v5.10A. Проверил листинг: 21 TCCR1 = BIN(00000000); \ 00000004 E000 LDI R16, 0 \ 00000006 BF00 OUT 0x30, R16 22 GTCCR = BIN(01100010); \ 00000008 E602 LDI R16, 98 \ 0000000A BD0C OUT 0x2C, R16 Вроде в адресах регистров нет ошибок. Напоследок, заменил кристалл. Все то же самое. Сейчас в полной растерянности... Нужна PWM именно на OC1B и только там, др. выводы используются как general IO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 14 августа, 2008 Опубликовано 14 августа, 2008 · Жалоба Вы бы привели еще и код который работает, тот что с OC1A, а так, можно посоветовать только проверить биты в регистрах, которые у вас в студии получаются и с даташитом сравнить, наверняка гдето ошиблись. И что за макросы такие у вас? SETUP(OC1Apin,OUT0); SETUP(OC1Bpin,OUT0); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
biDE 0 14 августа, 2008 Опубликовано 14 августа, 2008 · Жалоба Протестировал работу OC1A манипуляцией битов COM1A1 и COM1A0 в TCCR1 прямо из Студии. Все работает как и описано в даташите. Те же самые действия с OC1B (меняем COM1B1 и COM1B0 в GTCCR) не приводят к появлению частоты на OC1B. Генерация частоты здесь появляется только если включить канал OC1A теми же COM1A1 и COM1A0 в TCCR1!!!! Не понимаю, как такое может быть? Ведь waveform generators отдельные для обоих каналов судя по даташиту... Сам сталкивался с этим эффектом - описан в даташите, раздел Errata ATtiny45. Посмотрите ревизию вашего МК. У меня были МК ревизии С. В rev.D и далее должно быть исправлено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivainc1789 0 14 августа, 2008 Опубликовано 14 августа, 2008 · Жалоба Сам сталкивался с этим эффектом - описан в даташите, раздел Errata ATtiny45. Посмотрите ревизию вашего МК. У меня были МК ревизии С. В rev.D и далее должно быть исправлено. А вот еррату то я посмотреть и не догадался... И плату сделал... И поплатился. Что примечательно, такого количества багов нет ни в Тини25, ни в Тини85. А с этими ревизиями просто ужас какой-то. Прямо-таки тайна. Официальной инфы от Атмела я так и не дождался в свое время. Наверное, сделано специально, чтобы конечный покупатель не смог определить номер ревизии при покупке... Моя имеет такие строки на брюхе: 4H2 172A B2 1P 0527 E3 По еррате ревизия может быть В или С. А вообще доступны D,E,F,G. Обычно ставят букву ревизии в конце второй строки на TQFP. На QFN32 все совсем по-другому. У меня есть образцы, где из букв только "KOREA-A", остальное цифры. Здесь же, на DIP8 своя метода. И отсутствие достоверной официальной информации просто удручает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться