Непонятки с частотой ATtiny13
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
Всем привет! Подскажите такой вопрос. Начал изучать Tiny13, купил пару штук в Чип и Дипе в корпусе Soic-8. Закинул код с ШИМ программатором XGecu T48. По заводу шли фъюзы 0xFF 0x6A, выставил 0x7A -(CKDIV8=1) что должно было выставить частоту на 9.6мГц. Подключившись осциллографом, по шиму понял что частота не верная. Для проверки основной частоты закинул код с циклом PORTB |= (1<<PB4); PORTB &= ~(1<<PB4). По итогу если выстaвить CKDIV8=0 Тини работает на частоте 150кГц. Если перейти на частоту 4,8мГц. при CKDIV8=1 частота 600кГц, а при CKDIV8=0 частота 75кГц. В общем что я упускаю, где еще один делитель на 8 ? но его не должно быть. Пробовал на другой тиньке из той же партии. Что я делаю не так ?
- Реклама
- Сообщения: 599
- Зарегистрирован: Ср янв 06, 2010 10:01:46
Как же так?
Вы дали море нахрен никому не нужной информации, типа модели программатора, где покупали, типа корпуса и т.д.
Но ни кода, ни методики измерения частоты вы не привели. На какую помощь вы вообще рассчитывали?
Что может быть:
1. Неверно измерена частота
2. Частота меняется в коде (CKDIV8, настройки таймеров ШИМА и т.д.)
Вы дали море нахрен никому не нужной информации, типа модели программатора, где покупали, типа корпуса и т.д.
Но ни кода, ни методики измерения частоты вы не привели. На какую помощь вы вообще рассчитывали?
Что может быть:
1. Неверно измерена частота
2. Частота меняется в коде (CKDIV8, настройки таймеров ШИМА и т.д.)
Надо для начала хотя бы хорошо с документацией на МК ознакомиться...
Да задать верную начальную конфигурацию аппаратных ресурсов.
А потом уж "контейнер гнать" на результат.

Да задать верную начальную конфигурацию аппаратных ресурсов.
А потом уж "контейнер гнать" на результат.
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
Код: Фъюзы: Осциллограмма общий и вывод PB4:
Как правильно измерять частоту МК ?
Как правильно измерять частоту МК ?
- Вложения
-
- осц.jpg
- (194.08 КБ) 82 скачивания
-
- фъюзы.png
- (23.68 КБ) 83 скачивания
-
- код.png
- (23.98 КБ) 97 скачиваний
Последний раз редактировалось Igoryan4ik Чт июн 20, 2024 19:47:11, всего редактировалось 3 раза.
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
код в картинке с кривой ссылкой... там перфоленты изображение? 
- Реклама
Это розыгрыш? (Насчёт кода на Си)
Ни настроек ни начальной инициализации МК.
Ткнулось "по умолчанию и фузам" и желаем точные характеристики получить (не прочитав, что при заданных фузах и прочем... в результате на выходах будет)...

Ни настроек ни начальной инициализации МК.
Ткнулось "по умолчанию и фузам" и желаем точные характеристики получить (не прочитав, что при заданных фузах и прочем... в результате на выходах будет)...
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
[uquote="Igoryan4ik",url="/forum/viewtopic.php?p=4593019#p4593019"]Что я делаю не так ?[/uquote] Не изучив теорию, схватились за паяльник... Ну, решим ща этот вопрос. Завтра будет другой. В итоге, здесь будет в очередной раз криво перепечатана книжка "Микроконтроллеры AVR. Вводный курс" (Д. Мортон, 2006)
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
Этого кода достаточно для проверки на кокой частоте работает МК. Какая инициализация еще нужна. везде в примерах работы этого хватает. Я не запускаю шим или други функции.
В сундуке кота есть по тинькам книга на русском.
По умолчанию у 13й частота RC генератора 9,6мегагерца.
Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера)
Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно.

Про "переключение от 4,8 мегагерц" вообще бред - ибо там калибровочная константа автоматически не загружается (читаем хоть иногда документацию!) так что примитив без соответствующих настроек инициализации железа не гарантирует стабильно-устойчивой работы RC генератора.
По умолчанию у 13й частота RC генератора 9,6мегагерца.
Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера)
Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно.
Про "переключение от 4,8 мегагерц" вообще бред - ибо там калибровочная константа автоматически не загружается (читаем хоть иногда документацию!) так что примитив без соответствующих настроек инициализации железа не гарантирует стабильно-устойчивой работы RC генератора.
Последний раз редактировалось BOB51 Чт июн 20, 2024 21:44:06, всего редактировалось 1 раз.
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
Потому и надо книгу... код написал, а что код, где код, как мк работает - этого понимания нет 
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
[uquote="BOB51",url="/forum/viewtopic.php?p=4593380#p4593380"]В сундуке кота есть по тинькам книга на русском.
По умолчанию у 13й частота RC генератора 9,6мегагерца.
Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера)
Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно.
[/uquote]
Да согласен но я отключил делитель на 8. По осциллограмме видно что длительность высокого уровня 320нс это период такта МК на выполнение команды ORI и это 3,125мГц но не 9,6
По умолчанию у 13й частота RC генератора 9,6мегагерца.
Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера)
Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно.
Да согласен но я отключил делитель на 8. По осциллограмме видно что длительность высокого уровня 320нс это период такта МК на выполнение команды ORI и это 3,125мГц но не 9,6
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
На картинке Вашего кода эта команда не нарисована
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
[uquote="Martian",url="/forum/viewtopic.php?p=4593384#p4593384"]На картинке Вашего кода эта команда не нарисована[/uquote]
А это не оно разве PORTB |= (1<<PB4)
А это не оно разве PORTB |= (1<<PB4)
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
Нет. Это - Си.
Нарисуйте картинку ассемблерного листинга после компиляции.
Нарисуйте картинку ассемблерного листинга после компиляции.
Точно рассчитать время выполнения команд программы можно только при работе под чистым ассемблером.
Или применяя аппаратные средства таймеров.
Так что... Изучите для начала матчасть (хотя бы поверхностно)

Или применяя аппаратные средства таймеров.
Так что... Изучите для начала матчасть (хотя бы поверхностно)
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
Ок спасибо буду смотреть ассемблер
Добавлено after 40 minutes 16 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4593386#p4593386"]Нет. Это - Си.
Нарисуйте картинку ассемблерного листинга после компиляции.[/uquote]
После компиляции в Microchip Studio файл LSS. Это получается что на команду PORTB |= (1<<PB4) уходит 3 команды ассемблера и каждая длится по такту: IN чтение порта , ORI лог или, OUT запись в порт. итого 3 такта. Тогда получается длительность высокого уровня 320нс это 3 такта МК по 106нс. итого примерно 9.4 мГц Так ?
Добавлено after 40 minutes 16 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4593386#p4593386"]Нет. Это - Си.
Нарисуйте картинку ассемблерного листинга после компиляции.[/uquote]
После компиляции в Microchip Studio файл LSS. Это получается что на команду PORTB |= (1<<PB4) уходит 3 команды ассемблера и каждая длится по такту: IN чтение порта , ORI лог или, OUT запись в порт. итого 3 такта. Тогда получается длительность высокого уровня 320нс это 3 такта МК по 106нс. итого примерно 9.4 мГц Так ?
- Вложения
-
- LSS.txt
- (3.02 КБ) 122 скачивания
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
Почти. Дело в том, что на выполнение команды может уйти и более одного такта, это зависит от архитектуры микроконтроллера, частного случая выполнения команды, и, возможно, иных условий.
https://microsin.net/programming/avr/command-timing.html писал(а):Таблицу соответствия между командами микроконтроллера и количеством тактов можно найти в даташите на микроконтроллер, см. раздел Instructions Set Summary в конце даташита. В последнем столбце таблицы #Clocks указано число тактов, за которое выполняется команда. Если там стоит одна цифра - например 2, тогда все понятно, команда выполняется 2 такта. Но иногда там стоит 1/2 или 1/2/3. Это означает для примера 1/2, что команда может выполнится за 1 или 2 такта, что зависит от условия выполнения команды.
- Сообщения: 7
- Зарегистрирован: Ср июн 19, 2024 22:51:21
Понятно, разобрался. Спасибо всем за помощь, буду поглядывать на ассемблер. но кодить все же на С проще.
Данунафиг. Ассемблер - для крайних случаев, коих на самом деле мало. Писать программный кот НАДО на Си. А считать временные интервалы по тактам - это позапрошлый век. Для счёта времени есть таймеры.
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Дано: симисторный регулятор Овен для вентилятора. Он обнаруживает переход сети через 0, отмеряет время для регулировки мощности, включает импульс управления симистором, а в момент перехода через 0 отключает. Проблема в том, что отключать надо бы чуть раньше. В итоге регулятор работает неустойчиво.
Было решено добавить tiny13, чтобы укорачивать импульсы. И нарисовалась проблема с tiny13 на ровном месте. Устройство из палки и верёвки почему-то не работает. Часть импульсов пропущено. Понимаю, что можно сделать по-другому, но мне надо понять, в чём дело.
Красный луч - это входные импульсы частотой 100 Гц на порту PB3, жёлтый луч - выходные импульсы с порта PB0.
Добавлено after 22 minutes 21 second:
Всё, разобрался сам. Не срабатывает, когда фронт попадает после первого if, но до следующего while. Сделал ожидание обоих уровней, заработало.
Было решено добавить tiny13, чтобы укорачивать импульсы. И нарисовалась проблема с tiny13 на ровном месте. Устройство из палки и верёвки почему-то не работает. Часть импульсов пропущено. Понимаю, что можно сделать по-другому, но мне надо понять, в чём дело.
Красный луч - это входные импульсы частотой 100 Гц на порту PB3, жёлтый луч - выходные импульсы с порта PB0.
Добавлено after 22 minutes 21 second:
Всё, разобрался сам. Не срабатывает, когда фронт попадает после первого if, но до следующего while. Сделал ожидание обоих уровней, заработало.
- Вложения
-
- 20230511_203205.gif
- (19.6 КБ) 64 скачивания
-
- scratch.c
- (965 байт) 81 скачивание


