SAVC 1 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба В схеме установлен микроконтроллер 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нс (!) Уже поменял микроконтроллер, ситуация та же. Что это? У кого-нибудь есть идеи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба Что это? У кого-нибудь есть идеи? Что насчет CKDIV8 в Fuse Low Byte ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SAVC 1 24 сентября, 2018 Опубликовано 24 сентября, 2018 (изменено) · Жалоба Что насчет CKDIV8 в Fuse Low Byte ? CKDIV сброшен в ноль. Изменено 24 сентября, 2018 пользователем SAVC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SAVC 1 24 сентября, 2018 Опубликовано 24 сентября, 2018 (изменено) · Жалоба Сброшен в ноль - это "запрограммирован". У AVR с этим не так просто разобраться. Попробуйте установить его в "1". Попробовал - действительно, частота выросла в 8 раз. Только теперь по моему осциллографу период тактовой частоты получается 35нс. Спасибо за подсказку, дело было в этом. Всё, с осциллографом тоже разобрался - была накручена ручка подгона развёртки. Теперь всё правильно - 100нс Спасибо. Изменено 24 сентября, 2018 пользователем SAVC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба Спасибо за подсказку, дело было в этом. Дополню: ничего не мешает в начале программы делать так 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться