|
Влияние регистра CLKPR (Clock Prescale Register) в режиме программирования, ATtiny |
|
|
|
Jan 22 2016, 14:27
|
Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763

|
Уважаемые форумчане, помогите разобраться. Как известно, в ATtiny регистр CLKPR задает коэф-т деления и определяет системную тактовую частоту. Если фьюз CKDIV8 запрограммирован, то четыре младших разряда регистра CLKPR равны 0011, а если не запрограммирован, то они равны 0000. Т.к. регистр CLKPR относится к энергозависимой памяти (SRAM), то при отключении питания его содержимое по идее должно сбрасываться в начальное состояние, которое определяется значением фьюза CKDIV8 и которое не зависит от той программы, которая записана в Flash-память м-контроллера. Проблема собственно в следующем: есть м-сх ATtiny13A, работающая от внутреннего генератора 9,6 МГц. Фьюз CKDIV8 запрограммирован и его состояние я не менял. Сначала (со старой программой) ATtiny13A прекрасно программировалась и читалась программатором. Затем я записал новую программу, в которой применил коэф-т деления генератора на 256 (младшие разряды регистра CLKPR равны 1000). Программа записалась и правильно работала, но контроллер перестал читаться и я не мог его перепрограммировать. Когда же я уменьшил частоту SCK программатора, то м-сх опять стала читаться и программироваться. После этого я снова записал старую программу, в которой не было деления частоты генератора на 256, и снова м-сх стала читаться программатором с высокой частотой SCK. Вопрос: почему ?
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Jan 22 2016, 22:49
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Хм... Я бы поостерегся утверждать, что "Reset" _после_ подачи питания приводит к тем же результатам, что и сам факт сброса по питанию. Т.е. если программа все ж стартовала и проинициализировала регистр CLKPR - могу допустить, что последующий внешний сброс не изменит состояние. Не проверял, поэтому не уверен (хотя проверить, в общем-то, дело недолгое, состояние CLKPR отправить на ноги и посмотреть, что там появляется). Как обойти - понятно, удерживать активный сброс от момента включения до начала программирования.
|
|
|
|
|
Jan 23 2016, 21:18
|
Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763

|
Цитата(rx3apf @ Jan 23 2016, 16:38)  Я вижу, что именно так написано, например, в даташите на ATmega168, но для tiny13 в даташите Rev. 2535J–AVR–08/10 - явного указания не увидел. Или читаю невнимательно ? Впрочем, все равно при случае проверю... Да, я тоже заметил этот интересный момент. В даташитах, например, ATtiny2313, ATtiny25, ATtiny48 в разделе, в котором описываются биты CLKPS регистра CLKPR, сказано: The CKDIV8 Fuse determines the initial value of the CLKPS bits. If CKDIV8 is unprogrammed, the CLKPS bits will be reset to “0000”. If CKDIV8 is programmed, CLKPS bits are reset to “0011”, giving a division factor of eight at start up. А в соответствующем разделе даташита ATtiny13 этой фразы нет.
|
|
|
|
|
Jan 23 2016, 21:42
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Странно, а у меня в Rev 2535D (Preliminary 2004-ого года) почему-то есть. Скрин места сразу над таблицей расшифровки делителей CLKPR. Более новую ревизию не смотрел. На тему CLKPR в даташите нет особых уточнений, что он может инициализироваться только при включении питания. Применяя аналогию с другими регистрами, "initial value" регистра можно толковать как постоянно выставляемую при включении питания и ЛЮБОМ сбросе. В эррате есть какое-то упоминание о проблемах с программированием при фьюзах, задающих очень короткое startup-time. Может из-за этого проблемы.
Сообщение отредактировал GetSmart - Jan 23 2016, 22:11
Эскизы прикрепленных изображений
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|