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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Заблокировалась ATtiny13A, В чем причина?
asc2000
сообщение Jan 4 2016, 09:41
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Добрый день. Помогите пожалуйста разобраться. Возникла проблема при программировании м-сх ATtiny13A, работающей от внутреннего генератора. Фьюзы у нее были такие, и я их не менял:

Прикрепленное изображение


Я записал новую программу, в которой применил коэф-т деления генератора на 256. Программа записалась и правильно работает, но контроллер перестал читаться и я больше не могу его перепрограммировать. Подскажите, что могло произойти и как избежать этого в дальнейшем?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 4 2016, 09:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 4 2016, 12:41) *
и я больше не могу его перепрограммировать

Попробуйте понизить частоту SCK при программировании до минимума.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 4 2016, 11:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Попробуйте затактировать МК от внешнего генератора (не от кварца, а именно от генератора), после чего прочитать и изменить Fuses ...
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 4 2016, 12:34
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Спасибо за ответы.

Цитата(kovigor @ Jan 4 2016, 15:29) *
Попробуйте затактировать МК от внешнего генератора (не от кварца, а именно от генератора), после чего прочитать и изменить Fuses ...


Пробовал затактировать от внешнего генератора 100 кГц. К сожалению, не помогло, не получалось прочесть ни Flash, ни фьюзы.

Цитата(adnega @ Jan 4 2016, 13:57) *
Попробуйте понизить частоту SCK при программировании до минимума.


Спасибо, помогло! Я программирую программой PonyProg2000, и в файле PonyProg2000.ini с помощью Блокнота изменил строку SPIBusSpeed=NORMAL на SPIBusSpeed=VERYSLOW. После этого все стало замечательно читаться - и Flash, и фьюзы.
Уважаемый adnega, не могли бы объяснить, в чем была причина, ведь раньше все читалось и при скорости NORMAL ?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 4 2016, 16:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 4 2016, 15:34) *
Уважаемый adnega, не могли бы объяснить, в чем была причина, ведь раньше все читалось и при скорости NORMAL ?

Частота ядра должна быть в несколько раз выше частоты SCK при программировании.

Цитата
17.6 Serial Programming:
Depending on CKSEL fuses, a valid clock must be present. The minimum low and high periods
for the serial clock (SCK) input are defined as follows:
Low: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz
High: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz


Но я по опыту помню: когда понижал частоту до минимума в малопотребляющих применениях, нужно было перепрошивать на очень низкой частоте.
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 5 2016, 11:51
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Цитата(adnega @ Jan 4 2016, 20:03) *
Частота ядра должна быть в несколько раз выше частоты SCK при программировании.

Это понятно.

Цитата(adnega @ Jan 4 2016, 20:03) *
17.6 Serial Programming:
Depending on CKSEL fuses, a valid clock must be present. The minimum low and high periods
for the serial clock (SCK) input are defined as follows:
Low: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz
High: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz

Это тоже понятно. Значит, в режиме программирования имеют значение только установки фьюзов CKSEL, и не имеет значения фьюз CKDIV8 ?

Цитата(adnega @ Jan 4 2016, 20:03) *
Но я по опыту помню: когда понижал частоту до минимума в малопотребляющих применениях, нужно было перепрошивать на очень низкой частоте.

А вот это не совсем понял. Как именно вы понижали частоту до минимума? Использовали внутренний генератор 128 кГц? Или каким-то иным способом?
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 5 2016, 12:21
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Цитата(asc2000 @ Jan 5 2016, 14:51) *
... в режиме программирования имеют значение только установки фьюзов CKSEL, и не имеет значения фьюз CKDIV8 ?

Запрограммированный бит CKDIV8 (0) делит тактовую частоту на 8 независимо от установки CKSEL. При программировании МК работает от выбранного источника тактирования (в соответствии с установкой и CKSEL и CKDIV8).
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 5 2016, 12:32
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 5 2016, 14:51) *
Это тоже понятно.

Тогда, может, проясните, что такое fck в документации?

Цитата(Александр1 @ Jan 5 2016, 15:21) *
Запрограммированный бит CKDIV8 (0) делит тактовую частоту на 8 независимо от установки CKSEL.

На самом деле запрограммированный CKDIV принудительно устанавливает CLKPS == 0011, что соответствует делителю /8.
Незапрограммированный CKDIV принудительно устанавливает CLKPS == 0000, что соответствует делителю /1.
Можно поменять CLKPS в программе (независимо от бита CKDIV), чтобы получить другую частоту.
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 5 2016, 13:11
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Цитата(adnega @ Jan 5 2016, 15:32) *
На самом деле запрограммированный CKDIV принудительно устанавливает CLKPS == 0011, что соответствует делителю /8.
Незапрограммированный CKDIV принудительно устанавливает CLKPS == 0000, что соответствует делителю /1.
Можно поменять CLKPS в программе (независимо от бита CKDIV), чтобы получить другую частоту.

Да, в документации к ATtiny2313 написано:
Цитата
Тhe 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 8 at start up. This feature should be used if
the selected clock source has a higher frequency than the maximum frequency of the
device at the present operating conditions. Note that any value can be written to the
CLKPS bits regardless of the CKDIV8 Fuse setting.

А для ATtiny13 только:
Цитата
Interrupts must be disabled when changing prescaler setting to make sure the write procedure is
not interrupted.hee setting. The Application software must ensure that a sufficient division factor
is chosen if the selected clock source has a higher frequency than the maximum frequency of
the device at the present operating conditions. The device is shipped with the CKDIV8 fuse
programmed.

Поэтому может возникать недопонимание особенностей работы МК.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 5 2016, 13:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Александр1 @ Jan 5 2016, 16:11) *
Да, в документации к ATtiny2313 написано:

А для ATtiny13 только:

Кста, в теме обсуждается ATtiny13A. В документации абзац аналогичен приведенному вами для ATtiny2313.
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 5 2016, 15:33
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Цитата(Александр1 @ Jan 5 2016, 16:21) *
При программировании МК работает от выбранного источника тактирования (в соответствии с установкой и CKSEL и CKDIV8).

Насчет CKSEL согласен, а относительно влияния на процесс SPI-программирования фьюза CKDIV8 - не могли бы привести цитату из даташита?

Цитата(adnega @ Jan 5 2016, 16:32) *
Тогда, может, проясните, что такое fck в документации?

Думаю, что fck - это частота непосредственно тактового сигнала (или внутреннего генератора, или внешнего External Clock). Это частота НЕ после делителя (Prescalerа). Т.к. после делителя частота не может быть >12 Мгц
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 5 2016, 15:57
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 5 2016, 18:33) *
Насчет CKSEL согласен, а относительно влияния на процесс SPI-программирования фьюза CKDIV8 - не могли бы привести цитату из даташита?

Мне кажется, что Fck == Fcpu.
Fcpu получается путем деления выбранного источника тактового сигнала на соответствующий предделитель, который меняется в зависимости от CKDIV8.

Цитата(asc2000 @ Jan 5 2016, 18:33) *
Думаю, что fck - это частота непосредственно тактового сигнала (или внутреннего генератора, или внешнего External Clock).

Но тактовый сигнал в любом случае проходит через делители.
Если делители отличны от /1, то и частота будет отлична от тактовой.

Цитата(asc2000 @ Jan 5 2016, 18:33) *
Это частота НЕ после делителя (Prescalerа). Т.к. после делителя частота не может быть >12 Мгц

Частота контроллера может быть 0-20 МГц при питании 4.5-5.5 В.
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jan 5 2016, 23:06
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



CKDIV8 это просто какая-то "засада" зачем его ATMEL установил по умолчанию - непонятно.
Засада для тех, кто например пользуется USBASP в качестве программатора.

Выбрав фьюзами частоту от внутреннего RC 128 кГц, без задней мысли, получаем тактовую 128/8=16 кГц, программатор должен работать уже с тактовой не более 8 кГц а USBASP этого не умеет, умеет минимум на 16-ти.
И все, фьюзы не перешить, программу не залить... приехали. И это касается не только тини13 а и остальных тини также.

Вредители! wink.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 6 2016, 07:37
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Ga_ry @ Jan 6 2016, 02:06) *
CKDIV8 это просто какая-то "засада" зачем его ATMEL установил по умолчанию - непонятно.
Засада для тех, кто например пользуется USBASP в качестве программатора.

Выбрав фьюзами частоту от внутреннего RC 128 кГц, без задней мысли, получаем тактовую 128/8=16 кГц, программатор должен работать уже с тактовой не более 8 кГц а USBASP этого не умеет, умеет минимум на 16-ти.
И все, фьюзы не перешить, программу не залить... приехали. И это касается не только тини13 а и остальных тини также.

Вредители! wink.gif

Дык, достаточно сбросить CKDIV8 перед установкой RC 128 kHz?
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 6 2016, 09:01
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Цитата(asc2000 @ Jan 5 2016, 18:33) *
Насчет CKSEL согласен, а относительно влияния на процесс SPI-программирования фьюза CKDIV8 - не могли бы привести цитату из даташита?

В процессе программирования и в рабочем режиме МК тактируется от выбранного источника (структурная схема в разделе System Clock and Clock Options) и CKDIV8 влияет на коэффициент деления частоты (в соответствии с установкой).
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jan 6 2016, 14:31
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Цитата(adnega @ Jan 6 2016, 09:37) *
Дык, достаточно сбросить CKDIV8 перед установкой RC 128 kHz?

Достаточно, конечно же, так и надо делать!
Но ведь человек то считает раз по умолчанию - значит все должно быть хорошо, правильно и без подвоха.
Эту мелочь насчет CKDIV8 с первого раза можно и не разглядеть, понадеявшись на благоразумие авторитетного производителя и т.д. и т.п. а тут оно боком выходит.
Думаю хотя бы один раз каждый наступил на эти грабли с фьюзами для тини от Атмела и частотой 128к.

Правда на каком-то форуме один механизатор штуки 3-4 тини13 "задвинул" таким образом и только потом пришел на форум сказать, что ему какие-то ТИНИ бракованные попались и где купить нормальные небракованные. biggrin.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 6 2016, 15:44
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Ga_ry @ Jan 6 2016, 17:31) *
Думаю хотя бы один раз каждый наступил на эти грабли с фьюзами для тини от Атмела и частотой 128к.

Фьюзы - это вообще отдельный разговор. Без HW-программатора легко понаделать "кирпичиков".
Благо, я еще со времен ATtiny11 сделал себе HW-программатор и очень дотошно ставил и снимал галочки в PonyProg,
т.к. была возможна путаница с точностью до наоборот.
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 6 2016, 23:56
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Цитата(adnega @ Jan 4 2016, 20:03) *
Depending on CKSEL fuses, a valid clock must be present. The minimum low and high periods
for the serial clock (SCK) input are defined as follows:
Low: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz
High: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz

Цитата(adnega @ Jan 5 2016, 19:57) *
Мне кажется, что Fck == Fcpu.
Fcpu получается путем деления выбранного источника тактового сигнала на соответствующий предделитель, который меняется в зависимости от CKDIV8.

Но ведь для fck >= 12 MHz единственный возможный коэффициент деления предделителя - это 1 (т.е. без деления частоты), т.к. даже для коэф-та 2 получается, что частота источника тактового сигнала >= 24 MHz, а это недопустимо для ATtiny13. Следовательно, fck - это частота непосредственно самого источника тактового сигнала, а не после предделителя.

Цитата(Александр1 @ Jan 6 2016, 13:01) *
В процессе программирования и в рабочем режиме МК тактируется от выбранного источника (структурная схема в разделе System Clock and Clock Options) и CKDIV8 влияет на коэффициент деления частоты (в соответствии с установкой).


Но, во-первых, из структурной схемы в разделе System Clock and Clock Options непосредственно не видно, что CKDIV8 влияет именно в режиме программирования.
Во-вторых, в разделе Serial Programming сказано, что на процесс SPI-программирования влияют установки фьюзов CKSEL1 и CKSEL2, но ничего не сказано о влиянии фьюза CKDIV8.

Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 7 2016, 06:22
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 7 2016, 02:56) *
Но ведь для fck >= 12 MHz единственный возможный коэффициент деления предделителя - это 1 (т.е. без деления частоты), т.к. даже для коэф-та 2 получается, что частота источника тактового сигнала >= 24 MHz, а это недопустимо для ATtiny13. Следовательно, fck - это частота непосредственно самого источника тактового сигнала, а не после предделителя.

Ничего не понял, что вы пытаетесь сказать.
Подаем с генератора 20 МГц с предделителем /1, получаем необходимость минимум 3 тактов CPU в SCK для каждого уровня при программировании (т.е. 20/(3+3) => не более 3.333 МГц).
Устанавливаем предделитель /2, получаем необходимость минимум 2 тактов CPU в SCK для каждого уровня при программировании (т.е. (20/2)/(2+2) => не более 2.5 МГц).

Цитата(asc2000 @ Jan 7 2016, 02:56) *
Но, во-первых, из структурной схемы в разделе System Clock and Clock Options непосредственно не видно, что CKDIV8 влияет именно в режиме программирования.
Во-вторых, в разделе Serial Programming сказано, что на процесс SPI-программирования влияют установки фьюзов CKSEL1 и CKSEL2, но ничего не сказано о влиянии фьюза CKDIV8.

Вот если бы было сказано, что CKDIV8 не влияет в режиме программирования, и устанавливается принудительно предделитель /1, то это был бы факт.
Сейчас же все логично: CKDIV8 и предделитель ведут себя документировано и одинаково в штатном режиме и режиме программирования.
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 7 2016, 12:56
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Цитата(adnega @ Jan 7 2016, 10:22) *
Вот если бы было сказано, что CKDIV8 не влияет в режиме программирования, и устанавливается принудительно предделитель /1, то это был бы факт.
Сейчас же все логично: CKDIV8 и предделитель ведут себя документировано и одинаково в штатном режиме и режиме программирования.

Может быть и так.

Но напомню, что данная ветка форума начиналась с другого вопроса: почему программатором перестали читаться фьюзы и записанная программа?
Ведь я не менял CKDIV8, а только применил в своей программе коэффициент деления 256 установкой регистра CLKPR. Неужели эти установки сохраняются и в режиме программирования? В даташите я не нашел никакого объяснения по этому поводу.

Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 7 2016, 17:01
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(asc2000 @ Jan 7 2016, 15:56) *
Ведь я не менял CKDIV8, а только применил в своей программе коэффициент деления 256 установкой регистра CLKPR. Неужели эти установки сохраняются и в режиме программирования?

Если программа успеет записать CLKPR, то частота понизится и программировать на высокой частоте SCK не получится.
Если успеть подключиться программатором (а программа при этом останавливается?) до записи делителя /256, то программировать можно на высокой частоте SCK.
Go to the top of the page
 
+Quote Post
asc2000
сообщение Jan 7 2016, 20:52
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 5-08-10
Пользователь №: 58 763



Цитата(adnega @ Jan 7 2016, 21:01) *
Если программа успеет записать CLKPR, то частота понизится и программировать на высокой частоте SCK не получится.

Кажется, начинает проясняться. Как известно, SPI-программирование происходит при низком уровне на входе RESET. А в даташите сказано: "During reset, all I/O Registers are set to their initial values...". Т.к. CLKPR является одним из I/O Registers, то он также должен установиться в начальное значение. Я почему-то считал, что начальное значение - это 0, но получается, что это не всегда так. И вот тут опять непонятно: ведь CLKPR относится к энергозависимой памяти (SRAM), и при отключении питания его содержимое должно сбрасываться, и этот регистр должен устанавливаться в 0 ? Каким же образом в нем все же сохраняются его установки?

Сообщение отредактировал asc2000 - Jan 7 2016, 21:25
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 8 2016, 18:25
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



В имеющемся под рукой экземпляре даташита на tiny13 начальное состояние битов прескалера не указано, вместо этого идет ссылка на таблицу значений прескалера. На эту же таблицу ссылается и упоминание CKDIV8. Сложив 2 и 2, можно предположить, что при CKDIV8=0 прескалер будет делить на 8 сразу же после сброса и его действие может распространяться и на программирование тоже. Да, в даташитах от Atmel регулярно приходится "догадываться"...
Go to the top of the page
 
+Quote Post
nagisa
сообщение Apr 11 2016, 08:39
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-02-13
Пользователь №: 75 777



Цитата(asc2000 @ Jan 4 2016, 17:41) *
Я записал новую программу, в которой применил коэф-т деления генератора на 256. Программа записалась и правильно работает, но контроллер перестал читаться и я больше не могу его перепрограммировать. Подскажите, что могло произойти и как избежать этого в дальнейшем?

из опыта, следует уделять особое внимание наличию блокировочной емкости по питанию МК
сам сталкивался со случайной прошивкой лишних фьюзов из-за помех.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 06:28
Рейтинг@Mail.ru


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