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

ATtiny13 растягивает импульсы в 3 раза

В схеме установлен микроконтроллер ATtiny13

Прошита следующая программа:


.include "tn13def.inc"

.cseg
.org 0

ldi r16,0b00011000
out ddrb,r16

ldi r16,0b00010000
ldi r17,0b00001000

fr:
out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

out portb,r16
out portb,r17

rjmp fr

Которая просто переключает биты в порту ввода-вывода на рабочей частоте микропроцессора.

Согласно документации тактовая частота 9.6МГц

То есть, длительность импульса и паузы должна быть около 100нс

Но осциллограф показвает 300нс (!)

Уже поменял микроконтроллер, ситуация та же.

Что это? У кого-нибудь есть идеи?

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


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

Что это? У кого-нибудь есть идеи?

Что насчет CKDIV8 в Fuse Low Byte ?

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


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

Что насчет CKDIV8 в Fuse Low Byte ?

 

Screenshot_13.png

 

CKDIV сброшен в ноль.

Изменено пользователем SAVC

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


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

CKDIV сброшен в ноль.

Сброшен в ноль - это "запрограммирован".

CKDIV8 - 4 - Divide clock by 8 - 0 (programmed)

У AVR с этим не так просто разобраться.

Попробуйте установить его в "1".

 

The calibrated internal oscillator provides a 4.8 or 9.6 MHz clock source. The frequency is nominal

at 3V and 25°C. If the frequency exceeds the specification of the device (depends on VCC),

the CKDIV8 fuse must be programmed so that the internal clock is divided by 8 during start-up.

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


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

Сброшен в ноль - это "запрограммирован".

 

У AVR с этим не так просто разобраться.

Попробуйте установить его в "1".

 

Попробовал - действительно, частота выросла в 8 раз.

Только теперь по моему осциллографу период тактовой частоты получается 35нс.

Спасибо за подсказку, дело было в этом.

 

Всё, с осциллографом тоже разобрался - была накручена ручка подгона развёртки.

Теперь всё правильно - 100нс

 

Спасибо.

Изменено пользователем SAVC

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


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

Спасибо за подсказку, дело было в этом.

Дополню: ничего не мешает в начале программы делать так

        ldi        temp, (1 << CLKPCE)
        out        CLKPR, temp
        ldi        temp, 0
        out        CLKPR, temp

        ldi        temp, 0x61
        out        OSCCAL, temp

для точной установки частоты. При этом CKDIV8 fuse вам уже не важен будет.

Тут на форуме много раз темы с CLKPR поднимались (1, 2, 3, 4).

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


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

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

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

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

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

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

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

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

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

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