asc2000 0 22 января, 2016 Опубликовано 22 января, 2016 · Жалоба Уважаемые форумчане, помогите разобраться. Как известно, в ATtiny регистр CLKPR задает коэф-т деления и определяет системную тактовую частоту. Если фьюз CKDIV8 запрограммирован, то четыре младших разряда регистра CLKPR равны 0011, а если не запрограммирован, то они равны 0000. Т.к. регистр CLKPR относится к энергозависимой памяти (SRAM), то при отключении питания его содержимое по идее должно сбрасываться в начальное состояние, которое определяется значением фьюза CKDIV8 и которое не зависит от той программы, которая записана в Flash-память м-контроллера. Проблема собственно в следующем: есть м-сх ATtiny13A, работающая от внутреннего генератора 9,6 МГц. Фьюз CKDIV8 запрограммирован и его состояние я не менял. Сначала (со старой программой) ATtiny13A прекрасно программировалась и читалась программатором. Затем я записал новую программу, в которой применил коэф-т деления генератора на 256 (младшие разряды регистра CLKPR равны 1000). Программа записалась и правильно работала, но контроллер перестал читаться и я не мог его перепрограммировать. Когда же я уменьшил частоту SCK программатора, то м-сх опять стала читаться и программироваться. После этого я снова записал старую программу, в которой не было деления частоты генератора на 256, и снова м-сх стала читаться программатором с высокой частотой SCK. Вопрос: почему ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 22 января, 2016 Опубликовано 22 января, 2016 · Жалоба AVR Studio говорит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 22 января, 2016 Опубликовано 22 января, 2016 (изменено) · Жалоба ... то при отключении питания его содержимое по идее должно сбрасываться в начальное состояние, которое определяется значением фьюза CKDIV8 и которое не зависит от той программы, которая записана в Flash-память м-контроллера. При подаче сигнала Reset (внешний и внутренний). А т.к. программирование всегда начинается с подачи Reset, то содержимое CLKPR не должно влиять на программирование. Точнее на частоту клока программатора. Изменено 22 января, 2016 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 22 января, 2016 Опубликовано 22 января, 2016 · Жалоба Хм... Я бы поостерегся утверждать, что "Reset" _после_ подачи питания приводит к тем же результатам, что и сам факт сброса по питанию. Т.е. если программа все ж стартовала и проинициализировала регистр CLKPR - могу допустить, что последующий внешний сброс не изменит состояние. Не проверял, поэтому не уверен (хотя проверить, в общем-то, дело недолгое, состояние CLKPR отправить на ноги и посмотреть, что там появляется). Как обойти - понятно, удерживать активный сброс от момента включения до начала программирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 23 января, 2016 Опубликовано 23 января, 2016 (изменено) · Жалоба Если только предположить, что разработчики накосячили. Т.к. этот регистр, как и многие другие обязан сбрасываться в стартовое состояние всегда при сбросе, т.к. он задаёт частоту ядра и всего остального. Стартовое значение указывается в комплит даташите. Очевидно, что и по включению питания и по какому-либо сбросу запускаться программа должна одинаково. Но можно пофантазировать, что регистр мог инициализироваться не при активации Reset, а при дезактивации. Как говорил Ленин: практика - критерий истины. Но важно её ещё правильно "интерпретировать", если это аналог чёрного ящика. Изменено 24 января, 2016 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба Смущает то, что состояние младших четырех битов объявлено "see bit description". А по логике, там должно бы быть только два варианта в зависимости от фьюза CKDIV8. Когда в очередной раз буду с tiny13 играться - проверю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба А по логике, там должно бы быть только два варианта в зависимости от фьюза CKDIV8. Там так и написано. Значение бит будет либо 0000 либо 0011. В переводе на делитель 1/1 или 1/8. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба Я вижу, что именно так написано, например, в даташите на ATmega168, но для tiny13 в даташите Rev. 2535J–AVR–08/10 - явного указания не увидел. Или читаю невнимательно ? Впрочем, все равно при случае проверю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asc2000 0 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба Я вижу, что именно так написано, например, в даташите на 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 этой фразы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 23 января, 2016 Опубликовано 23 января, 2016 (изменено) · Жалоба Странно, а у меня в Rev 2535D (Preliminary 2004-ого года) почему-то есть. Скрин места сразу над таблицей расшифровки делителей CLKPR. Более новую ревизию не смотрел. На тему CLKPR в даташите нет особых уточнений, что он может инициализироваться только при включении питания. Применяя аналогию с другими регистрами, "initial value" регистра можно толковать как постоянно выставляемую при включении питания и ЛЮБОМ сбросе. В эррате есть какое-то упоминание о проблемах с программированием при фьюзах, задающих очень короткое startup-time. Может из-за этого проблемы. Изменено 23 января, 2016 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asc2000 0 24 января, 2016 Опубликовано 24 января, 2016 · Жалоба Посмотрел, да действительно в предварительной версии даташита (Preliminary 2004-ого года) эта фраза была. А в даташите за 2010 год (Rev 2535J–AVR–08/10) этого уже нет. Почему-то решили убрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться