Перейти к содержанию
    

Заблокировалась ATtiny13A

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

 

post-58763-1451900263_thumb.jpg

 

Я записал новую программу, в которой применил коэф-т деления генератора на 256. Программа записалась и правильно работает, но контроллер перестал читаться и я больше не могу его перепрограммировать. Подскажите, что могло произойти и как избежать этого в дальнейшем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и я больше не могу его перепрограммировать

Попробуйте понизить частоту SCK при программировании до минимума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте затактировать МК от внешнего генератора (не от кварца, а именно от генератора), после чего прочитать и изменить Fuses ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Попробуйте затактировать МК от внешнего генератора (не от кварца, а именно от генератора), после чего прочитать и изменить Fuses ...

 

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

 

Попробуйте понизить частоту SCK при программировании до минимума.

 

Спасибо, помогло! Я программирую программой PonyProg2000, и в файле PonyProg2000.ini с помощью Блокнота изменил строку SPIBusSpeed=NORMAL на SPIBusSpeed=VERYSLOW. После этого все стало замечательно читаться - и Flash, и фьюзы.

Уважаемый adnega, не могли бы объяснить, в чем была причина, ведь раньше все читалось и при скорости NORMAL ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый 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

 

Но я по опыту помню: когда понижал частоту до минимума в малопотребляющих применениях, нужно было перепрошивать на очень низкой частоте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частота ядра должна быть в несколько раз выше частоты 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

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

 

Но я по опыту помню: когда понижал частоту до минимума в малопотребляющих применениях, нужно было перепрошивать на очень низкой частоте.

А вот это не совсем понял. Как именно вы понижали частоту до минимума? Использовали внутренний генератор 128 кГц? Или каким-то иным способом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Запрограммированный бит CKDIV8 (0) делит тактовую частоту на 8 независимо от установки CKSEL. При программировании МК работает от выбранного источника тактирования (в соответствии с установкой и CKSEL и CKDIV8).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это тоже понятно.

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

 

Запрограммированный бит CKDIV8 (0) делит тактовую частоту на 8 независимо от установки CKSEL.

На самом деле запрограммированный CKDIV принудительно устанавливает CLKPS == 0011, что соответствует делителю /8.

Незапрограммированный CKDIV принудительно устанавливает CLKPS == 0000, что соответствует делителю /1.

Можно поменять CLKPS в программе (независимо от бита CKDIV), чтобы получить другую частоту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле запрограммированный 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.

Поэтому может возникать недопонимание особенностей работы МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, в документации к ATtiny2313 написано:

 

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

Кста, в теме обсуждается ATtiny13A. В документации абзац аналогичен приведенному вами для ATtiny2313.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При программировании МК работает от выбранного источника тактирования (в соответствии с установкой и CKSEL и CKDIV8).

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

 

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

Думаю, что fck - это частота непосредственно тактового сигнала (или внутреннего генератора, или внешнего External Clock). Это частота НЕ после делителя (Prescalerа). Т.к. после делителя частота не может быть >12 Мгц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Мне кажется, что Fck == Fcpu.

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

 

Думаю, что fck - это частота непосредственно тактового сигнала (или внутреннего генератора, или внешнего External Clock).

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

Если делители отличны от /1, то и частота будет отлична от тактовой.

 

Это частота НЕ после делителя (Prescalerа). Т.к. после делителя частота не может быть >12 Мгц

Частота контроллера может быть 0-20 МГц при питании 4.5-5.5 В.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

И все, фьюзы не перешить, программу не залить... приехали. И это касается не только тини13 а и остальных тини также.

 

Вредители! ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

И все, фьюзы не перешить, программу не залить... приехали. И это касается не только тини13 а и остальных тини также.

 

Вредители! ;)

Дык, достаточно сбросить CKDIV8 перед установкой RC 128 kHz?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В процессе программирования и в рабочем режиме МК тактируется от выбранного источника (структурная схема в разделе System Clock and Clock Options) и CKDIV8 влияет на коэффициент деления частоты (в соответствии с установкой).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...