реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Таймер1 в ATtiny45, не работает PWM на OC1B
ivainc1789
сообщение Aug 14 2008, 04:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Случился полный затык с 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.
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 14 2008, 08:43
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Вы бы привели еще и код который работает, тот что с OC1A, а так, можно посоветовать только проверить биты в регистрах, которые у вас в студии получаются и с даташитом сравнить, наверняка гдето ошиблись.
И что за макросы такие у вас?
Код
  SETUP(OC1Apin,OUT0);
  SETUP(OC1Bpin,OUT0);


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
biDE
сообщение Aug 14 2008, 09:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 1-02-06
Из: Одесса
Пользователь №: 13 863



Цитата(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 и далее должно быть исправлено.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Aug 14 2008, 13:23
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(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 своя метода. И отсутствие достоверной официальной информации просто удручает...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016