Страница 1 из 2
tiny2313, логика работы порта D
Добавлено: Пт апр 24, 2009 15:50:53
Yurivz
Пытаюсь вывести меандр на пины порта D.
Вывожу 1 в порт, ставлю 2 нопа (чтоб компенсировать два такта уходящие на rjmp), вывожу 0 в порт, jmp'аю на начало.
С битами 0 и 1 порта D прокатывает, а вот с 2 и 3 - почему-то меандр не получается. Исходник в AVR Studio и проект в Proteus 7.4 прилогаю.
Добавлено: Пт апр 24, 2009 16:55:15
ikarab
Дак в Студии же видно чего МК делает и должно быть понятно в чем там дело .
Добавлено: Пт апр 24, 2009 17:50:38
akl
Странное какое-то написание команд. Лень ENTER нажать? Вот так в студии работает
Добавлено: Пт апр 24, 2009 18:01:25
Yurivz
ikarab писал(а):Дак в Студии же видно чего МК делает и должно быть понятно в чем там дело .
Куда именно в студии смотреть? Куда же деваются лишние 3 такта? Почему ноль длится 7ms, а не 4ms ?
ps: Если кто еще не понял, я не профи, я новичок. Соответственно не очень хорошо еще знаю все нюансы AVR Studio, иначеб я наверное не задавал вопросы.
Добавлено: Пт апр 24, 2009 18:12:25
Yurivz
akl писал(а):Странное какое-то написание команд. Лень ENTER нажать?
Когда код написан в одну строку - его проще закоментировать, исключив из компиляции. Там несколько одинаковых кусков, только для разных битов прота D.
Вот так в студии работает
Ну и что поменялось? Как разделение команд (пробелом или переводом строки) влияет на готовый код? Никак. Соответственно и результат одинаков. НЕ работает. В случае с нолевым и первым битом порта D (и со всем портом B) длительность ноля и единицы - 4ре такта процессора (4ms при тактовой частоте 1MHz). Если этот-же код применяется ко вторму и третьему биту порта D - длительность ноля почему-то 7ms. Откуда берутся эти лишние 3ms? Что процессор делает лишних 3 такта?
Добавлено: Пт апр 24, 2009 18:30:19
Neekeetos
Yurivz писал(а):Ну и что поменялось? Как разделение команд (пробелом или переводом строки) влияет на готовый код? Никак. Соответственно и результат одинаков. НЕ работает. В случае с нолевым и первым битом порта D (и со всем портом B) длительность ноля и единицы - 4ре такта процессора (4ms при тактовой частоте 1MHz). Если этот-же код применяется ко вторму и третьему биту порта D - длительность ноля почему-то 7ms. Откуда берутся эти лишние 3ms? Что процессор делает лишних 3 такта?
cbi и sbi выполняются по два такта, нопы - по одному, но у тебя их два, плюс два такта относительный переход на начало цикла, итого 2+2+2+2 = 8 тактов на полный цикл, ты ни про 4 такта ни про 7 не угадал. Потом ты же понимаешь что твой код работает как ты задумал только если дрыгать одним битом, добавляя одновременно другие к длительности ноля у всех будет добавлено по 6 тактов - на обработку других каждого дополнительного.
Добавлено: Пт апр 24, 2009 18:39:01
Yurivz
Neekeetos писал(а):начало цикла, итого 2+2+2+2 = 8 тактов на полный цикл, ты ни про 4 такта ни про 7 не угадал.
Осциллограммы в протеусе смотрел? Судя по всему нет. Открой протеусом приаттаченный в начале проект и посчитай сам. Потом говори угадал я или нет.

Добавлено: Пт апр 24, 2009 18:54:58
Yurivz
Для тех кому лень открыть Proteus - прилагаю картинку, на которой достаточно наглядно отображена суть проблемы.
На картинке даны осциллограммы полученные в протеусе, а справа код, который их сгенерил. Как видно, код отличается только номером бита, который устанавливается и сбрасывается. Однако если я использую бит 2 - ноль затягивается на 3ms, как будто в коде стоят не 2 nop'а, а 5. Вот мне и интересно, что проц делает эти лишние 3 такта? Почему вместо положенных 4х тактов на нулевой полупериод - выползают 7.
Добавлено: Пт апр 24, 2009 19:09:13
Neekeetos
Yurivz писал(а):Neekeetos писал(а):начало цикла, итого 2+2+2+2 = 8 тактов на полный цикл, ты ни про 4 такта ни про 7 не угадал.
Осциллограммы в протеусе смотрел? Судя по всему нет. Открой протеусом приаттаченный в начале проект и посчитай сам. Потом говори угадал я или нет.

Ну открыл, судя по 16 тактам на цикл шпротеус глючит. Так что спи спокойно дорогой товарищ, все работает.
Добавлено: Пт апр 24, 2009 19:30:54
Yurivz
Neekeetos писал(а):Ну открыл, судя по 16 тактам на цикл шпротеус глючит. Так что спи спокойно дорогой товарищ, все работает.
Вот собственно такое подозрение у меня тоже закрадывалось... Учитывая что я еще только начинаю изучать AVR, а протеус глюками меня уже достал. Но для надежности хотелось бы быть уверенным, что это именно глюк протеуса, а не хитрая логика отработки порта D связанная с альтернативными функциями пинов к примеру. Увы это в реальном железе я проверить немогу за неимением реального железного осциллографа.
Добавлено: Пт апр 24, 2009 20:00:02
Neekeetos
Yurivz писал(а):Neekeetos писал(а):Ну открыл, судя по 16 тактам на цикл шпротеус глючит. Так что спи спокойно дорогой товарищ, все работает.
Вот собственно такое подозрение у меня тоже закрадывалось... Учитывая что я еще только начинаю изучать AVR, а протеус глюками меня уже достал. Но для надежности хотелось бы быть уверенным, что это именно глюк протеуса, а не хитрая логика отработки порта D связанная с альтернативными функциями пинов к примеру. Увы это в реальном железе я проверить немогу за неимением реального железного осциллографа.
Чисто теоретически можно собрать внешний тактовый генератор выдрав его из китайского будильника. Там частота 1 герц - можно считать такты в реальном времени просто привесив светодиод на порт

. А так лучше всего смотреть это все в аврстудии - там симулятор с точностью до тактов, как пишет так и есть. На счет протеуса - даже не знаю, раньше все точно эмулировалось , модель 2313 наверно кривая..
Добавлено: Пт апр 24, 2009 20:01:31
ikarab
Я вам ВО ВТОРОМ посте написал что в СТУДИИ все можно увидеть раз вы в ней делаете код.
Добавлено: Пт апр 24, 2009 20:18:11
Neekeetos
ikarab писал(а):Я вам ВО ВТОРОМ посте написал что в СТУДИИ все можно увидеть раз вы в ней делаете код.
КАПСИТЬ - делу вредить, каков был вопрос у создателя темы? Правильно - вопроса не было, соотв. и ответ про такты в авр студии не в тему, как собственно и любой другой

Добавлено: Сб апр 25, 2009 07:26:40
Yurivz
ikarab писал(а):Я вам ВО ВТОРОМ посте написал что в СТУДИИ все можно увидеть раз вы в ней делаете код.
Я второй раз спрашиваю. Как и где это смотреть в студии?
Правильно - вопроса не было
Вопрос есть. Откуда берется задержка в 3 такта при использовании 2го и 3го битов порта D ?
Добавлено: Сб апр 25, 2009 08:50:50
akl
Проверял так. Никаких неучтенных задержек нет.
Добавлено: Сб апр 25, 2009 09:23:33
Yurivz
akl писал(а):Проверял так. Никаких неучтенных задержек нет.
Благодарю. Значит суть моей проблемы - очередной баг протеуса.
Добавлено: Сб апр 25, 2009 22:58:03
BCluster
Протеус один большоой баг )
Добавлено: Вс апр 26, 2009 00:53:45
ibiza11
BCluster писал(а):Протеус один большоой баг )
+100000
Добавлено: Ср апр 29, 2009 22:24:20
systemmind
Вопрос немного не по теме, но касающийся 2313. Я делаю диплом с использованием этого микроконтроллера. Скажите, какова величина выходных токов у портов МК??
Добавлено: Ср апр 29, 2009 22:47:51
GP1
Максимальный ток линии ввода/вывод - 40 мА
Макс.ток выводов Vcc и GND - 200 мА