Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Таймер1 в ATtiny45
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ivainc1789
Случился полный затык с 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
Вы бы привели еще и код который работает, тот что с OC1A, а так, можно посоветовать только проверить биты в регистрах, которые у вас в студии получаются и с даташитом сравнить, наверняка гдето ошиблись.
И что за макросы такие у вас?
Код
  SETUP(OC1Apin,OUT0);
  SETUP(OC1Bpin,OUT0);
biDE
Цитата(ivainc1789 @ Aug 14 2008, 07:44) *
Протестировал работу OC1A манипуляцией битов COM1A1 и COM1A0 в TCCR1 прямо из Студии. Все работает как и описано в даташите. Те же самые действия с OC1B (меняем COM1B1 и COM1B0 в GTCCR) не приводят к появлению частоты на OC1B. Генерация частоты здесь появляется только если включить канал OC1A теми же COM1A1 и COM1A0 в TCCR1!!!! Не понимаю, как такое может быть? Ведь waveform generators отдельные для обоих каналов судя по даташиту...


Сам сталкивался с этим эффектом - описан в даташите, раздел Errata ATtiny45.
Посмотрите ревизию вашего МК. У меня были МК ревизии С. В rev.D и далее должно быть исправлено.
ivainc1789
Цитата(biDE @ Aug 14 2008, 13:24) *
Сам сталкивался с этим эффектом - описан в даташите, раздел Errata ATtiny45.
Посмотрите ревизию вашего МК. У меня были МК ревизии С. В rev.D и далее должно быть исправлено.


А вот еррату то я посмотреть и не догадался... И плату сделал... И поплатился. Что примечательно, такого количества багов нет ни в Тини25, ни в Тини85.

А с этими ревизиями просто ужас какой-то. Прямо-таки тайна. Официальной инфы от Атмела я так и не дождался в свое время. Наверное, сделано специально, чтобы конечный покупатель не смог определить номер ревизии при покупке...

Моя имеет такие строки на брюхе:

4H2 172A

B2 1P

0527 E3

По еррате ревизия может быть В или С. А вообще доступны D,E,F,G.

Обычно ставят букву ревизии в конце второй строки на TQFP. На QFN32 все совсем по-другому. У меня есть образцы, где из букв только "KOREA-A", остальное цифры. Здесь же, на DIP8 своя метода. И отсутствие достоверной официальной информации просто удручает...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.