Всем привет! Подскажите такой вопрос. Начал изучать 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 ? но его не должно быть. Пробовал на другой тиньке из той же партии. Что я делаю не так ?
Как же так? Вы дали море нахрен никому не нужной информации, типа модели программатора, где покупали, типа корпуса и т.д. Но ни кода, ни методики измерения частоты вы не привели. На какую помощь вы вообще рассчитывали? Что может быть: 1. Неверно измерена частота 2. Частота меняется в коде (CKDIV8, настройки таймеров ШИМА и т.д.)
Надо для начала хотя бы хорошо с документацией на МК ознакомиться... Да задать верную начальную конфигурацию аппаратных ресурсов. А потом уж "контейнер гнать" на результат.
Это розыгрыш? (Насчёт кода на Си) Ни настроек ни начальной инициализации МК. Ткнулось "по умолчанию и фузам" и желаем точные характеристики получить (не прочитав, что при заданных фузах и прочем... в результате на выходах будет)...
Не изучив теорию, схватились за паяльник... Ну, решим ща этот вопрос. Завтра будет другой. В итоге, здесь будет в очередной раз криво перепечатана книжка "Микроконтроллеры AVR. Вводный курс" (Д. Мортон, 2006)
Этого кода достаточно для проверки на кокой частоте работает МК. Какая инициализация еще нужна. везде в примерах работы этого хватает. Я не запускаю шим или други функции.
В сундуке кота есть по тинькам книга на русском. По умолчанию у 13й частота RC генератора 9,6мегагерца. Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера) Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно. Про "переключение от 4,8 мегагерц" вообще бред - ибо там калибровочная константа автоматически не загружается (читаем хоть иногда документацию!) так что примитив без соответствующих настроек инициализации железа не гарантирует стабильно-устойчивой работы RC генератора.
Последний раз редактировалось BOB51 Чт июн 20, 2024 21:44:06, всего редактировалось 1 раз.
В сундуке кота есть по тинькам книга на русском. По умолчанию у 13й частота RC генератора 9,6мегагерца. Внутреннее тактирование (если ничего не трогать в фузах) будет 9,6/8=1, 2МГц далее считаем такты команд (хотя бы примерно) согласно соответствующей документации по системе команд МК семейства АВР... (Явно не под Си, а в распечатке листинга ассемблера) Или используем аппаратный таймер с соответствующими настройками - более точный интервал получить можно.
Да согласен но я отключил делитель на 8. По осциллограмме видно что длительность высокого уровня 320нс это период такта МК на выполнение команды ORI и это 3,125мГц но не 9,6
Точно рассчитать время выполнения команд программы можно только при работе под чистым ассемблером. Или применяя аппаратные средства таймеров. Так что... Изучите для начала матчасть (хотя бы поверхностно)
Нет. Это - Си. Нарисуйте картинку ассемблерного листинга после компиляции.
После компиляции в Microchip Studio файл LSS. Это получается что на команду PORTB |= (1<<PB4) уходит 3 команды ассемблера и каждая длится по такту: IN чтение порта , ORI лог или, OUT запись в порт. итого 3 такта. Тогда получается длительность высокого уровня 320нс это 3 такта МК по 106нс. итого примерно 9.4 мГц Так ?
Почти. Дело в том, что на выполнение команды может уйти и более одного такта, это зависит от архитектуры микроконтроллера, частного случая выполнения команды, и, возможно, иных условий.
Таблицу соответствия между командами микроконтроллера и количеством тактов можно найти в даташите на микроконтроллер, см. раздел Instructions Set Summary в конце даташита. В последнем столбце таблицы #Clocks указано число тактов, за которое выполняется команда. Если там стоит одна цифра - например 2, тогда все понятно, команда выполняется 2 такта. Но иногда там стоит 1/2 или 1/2/3. Это означает для примера 1/2, что команда может выполнится за 1 или 2 такта, что зависит от условия выполнения команды.
Данунафиг. Ассемблер - для крайних случаев, коих на самом деле мало. Писать программный кот НАДО на Си. А считать временные интервалы по тактам - это позапрошлый век. Для счёта времени есть таймеры.
_________________ Морд - ни лап. Мат, око и дар. А колом? Массам кот или торт? Тротил и ток массам!
Дано: симисторный регулятор Овен для вентилятора. Он обнаруживает переход сети через 0, отмеряет время для регулировки мощности, включает импульс управления симистором, а в момент перехода через 0 отключает. Проблема в том, что отключать надо бы чуть раньше. В итоге регулятор работает неустойчиво.
Было решено добавить tiny13, чтобы укорачивать импульсы. И нарисовалась проблема с tiny13 на ровном месте. Устройство из палки и верёвки почему-то не работает. Часть импульсов пропущено. Понимаю, что можно сделать по-другому, но мне надо понять, в чём дело.
Красный луч - это входные импульсы частотой 100 Гц на порту PB3, жёлтый луч - выходные импульсы с порта PB0.
Добавлено after 22 minutes 21 second: Всё, разобрался сам. Не срабатывает, когда фронт попадает после первого if, но до следующего while. Сделал ожидание обоих уровней, заработало.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения