Вопросы начинающих PIC ASM

Поклонники продукции Microchip Technology Inc тусуются тут.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Или halt? То есть reset
Реклама
phalanx
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Re: Вопросы начинающих PIC ASM

Сообщение phalanx »

[uquote="yor",url="/forum/viewtopic.php?p=4599036#p4599036"]Или halt? То есть reset[/uquote]
Жесть... Не в коня корм.
Реклама
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

А если серьёзно, для чего nop используют в программе? Понятно, ничего не делать, пропуск командного цикла, задержка. В каких случаях это может понадобиться, пример можно? Если внешнее устройство, порт не поспевает, надо ПП задержки делать, на nop-ах в цикле или таймерах. Но иногда встречались листинги, один-два nop-а и всё. Чего они там задержат?
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение veso74 »

Действительно в немногих случаях встречал, ниже: NOP напр. в start/stop I2c, чтобы условие было выполнено.

- требование из документации I2c

Изображение

- эксперименты со HW Fast-mode plus I2c в PIC18F06Q40, измеренные данные от логического анализатора

.lst файл:

Код: Выделить всё

..   i2c_start();
*
00052:  BSF    4C8.1
00054:  NOP   
00056:  BSF    4C8.0
00058:  BRA    005A
0005A:  BCF    4C0.1
0005C:  BCF    4C8.1
0005E:  NOP   
00060:  BCF    4C0.0
00062:  BCF    4C8.0
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

Как минимум, для подмены команды при ветвлении, для выравнивания, для того, чтобы подождать, пока какая-то одна аппаратная часть догонит другую.

И не стоит забывать, что ассемблер - это по сути не созданный язык программирования какого-то уровня, а набор инструкций процессора, оформленных в виде языка.
Реклама
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="Martian",url="/forum/viewtopic.php?p=4599207#p4599207"]Как минимум, для подмены команды при ветвлении, для выравнивания[/uquote]Можно этот момент прояснить? Какие команды подменять, если одно условие - значит делать то, другое - это. И про выравнивание. Поиск предлагает выравнивание фото.

А кстати, в проблеме RMW NOP может помочь?
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4599221#p4599221"]И про выравнивание.[/uquote]
Условное ветвление имеет разное время исполнения, в зависимости от необходимости этого самого ветвления. Если код продолжает линейное исполнение, то время равно 1 циклу, а если произошел переход, то 2 циклам. Пустые инструкции позволяют выровнять оба варианта и обеспечить отсутствие джиттера временнОй диаграммы на этом участке.
Так же пустые инструкции позволяют формировать импульсы определенной длительности ногодрыгом. Обычно так делают при коротких импульсах длительностью в несколько машинных циклов.
В 16-разрядной платформе (PIC24/dsPIC) nop-ы применяют для задержек в циклах с RAW-инструкциями. Не путать с RMW.
К ним относятся инструкции с автоинкрементными/автодекрементными адресациями.
[uquote="yor",url="/forum/viewtopic.php?p=4599221#p4599221"]А кстати, в проблеме RMW NOP может помочь?[/uquote] Нет.
Последний раз редактировалось КРАМ Сб июл 06, 2024 11:33:18, всего редактировалось 1 раз.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4599226#p4599226"]линейное исполнение, то время равно 1 циклу, а если произошел переход, то 2 циклам. Пустые инструкции позволяют выровнять оба варианта
Так же пустые инструкции позволяют формировать импульсы определенной длительности ногодрыгом. Обычно так делают при коротких импульсах длительностью в несколько машинных циклов.[/uquote]
Логично.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Код: Выделить всё

incrementing of Timer0 (TMR0 and Prescaler) will also be inhibited 2 instruction cycles (TCY). So if the prescaler is configured as 2, then after a write to the TMR0 register TMR0 will not increment for 4 Timer0 clocks (Figure 11-3). After that, TMR0 will increment every prescaler number of clocks later.
А если предделитель настроен 1:256, пропуск 512 клоксов? И вообще, не противоречат ли они сами себе: с одной стороны, как они говорят раньше, при записи в TMR0 предделитель сбрасывается, а тут он, оказывается, уже настроен 1:2 и при записи в TMR задержка 4 клокса, и он не сбрасывается, получается.
Как бы там ни было, надо, значит, сначала записать TMR, а потом предделитель. И никаких проблем? В смысле пропусков клоксов?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Clock - это единственное число
Clocks - множественное.
Если употребляете англицизмы, то потрудитесь не писать глупости.
Или склоняйте по правилам русского языка, или пишите по английски.
А то ваши клоксы звучат гомерически смешно.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопросы начинающих PIC ASM

Сообщение BOB51 »

https://web.archive.org/web/20080221231 ... c16_11.pdf
страничка 6...
Речь о 4 циклах при внутреннем тактировании.
Собственно предделитель T0 делит с WDT и там конкретно по выбранному МК почитать не помешает. Иногда включая ерраты.
8)
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4600526#p4600526"]А то ваши клоксы звучат гомерически смешно.[/uquote]Смех продлевает жизнь! НО Вам, по-моему, не смешно)) Это грустно
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4600526#p4600526"]клоксы[/uquote]двумерный массив клоков :roll:
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Обнаружил ошибку в предыдущем описании. То сообщение никак удалить не могут.

Придумал способ превращения 8 бит таймера в 16 бит. Основано на динамическом вычислении значения предделителя.
Свойства:
1) точность отсчёта - десятки тиков
2) дискретность отсчёта - 1 тик
3) диапазон 64К тактов, как у 16 бит без делителя
Минусы:
1) большее время инициализации
...

Код: Выделить всё

Дано: 16бит число 0x4321
Значение предделителя=период : макс разрядность предделителя
1) 4321:FF=43 (округлить до целого) ; FF - макс разрядность предделителя
(или 4321 >>8 = 43, надеюсь правильно обозначил сдвиг вправо на 8 разрядов, быстрее, но меньше точность)
2) У результата определить вес старшего единичного разряда
43 ->  max^2 = 40 и взять следующий старший вес = 80 (не корите за корявость выражения)
Предделитель=0x80

Значение таймера=FF-период : предделитель
Кол-во циклов=4321:80=86 (округлить)
Значение TMR=FF-86=79, так как он считает от нуля

Итого имеем
T=preTMR*TMR
80*86=4300
Ошибка 21 тик, что на единицах и десятках миллисекунд очень даже нечувствительно.
Из FF вычитать кол-во циклов, так как таймер считает от нуля.
phalanx
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Re: Вопросы начинающих PIC ASM

Сообщение phalanx »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4599226#p4599226"]...[uquote="yor",url="/forum/viewtopic.php?p=4599221#p4599221"]А кстати, в проблеме RMW NOP может помочь?[/uquote] Нет.[/uquote]
Всю ветку не читал, но для PIC без регистров LAT в некоторых случаях NOP очень даже может помочь. Вот хорошая статья на тему RMW:
https://electrosome.com/read-modify-write-problem-pic/
Когда проблема RMW может возникнуть:
The actual physical state (voltage level) of a pin may be different from the value written to PORT register in certain instances. For example:
- When the output pin is connected to high inductance or capacitance loads.
- When the output pin is connected to LEDs without current limiting resistors.
- When the output pin drives a transistor without base resistor.
- When the output pin is shorted to ground.
И возможные варианты решения проблемы:
...
How to Solve this problem ?
1. Insert a delay after RB7 = 1 such that sufficient time is provided for the charging of capacitor.
...
Этим "delay" как раз и может стать NOP. Но это, повторюсь, справедливо лишь в некоторых случаях, особенно у начинающих :-D. Нормальная схемотехника позволит не прибегать к таким трюкам, это чисто для теории. У первых PIC была еще история связанная с конвеером, где мог потребоваться NOP:
http://www.amber.ssau.ru/download/PIC16_Manual.pdf
п.9.10.2. Последовательность операций с портами ввода/вывода
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Про подавление дребезга и паразитных скачков на сканируемых входах: как-то говорили, и назывались цифры, что при механических кнопках порядка 20мс, на оптодатчиках вроде меньше, но тоже около единиц миллисекунд. Если память не изменяет. А как быть, если период между импульсами (между нажатиями, можно считать) сам по себе 5мс?
Ничего лучше как несколько раз опрашивать входы, сверяя с предыдущим состоянием, я не придумал.
Применена пара свето-фотодиод, между ними пролетает шторка из алюминия, обрезанная ножницами вручную. В сканировании участвует от 7 до 10 команд, безошибочный повтор 5 раз - это получается 35-50мкс. Какова надёжность такого способа?
Можно, наверное, шторку подточить на строгую перпендикулярность краёв, покрасить поглощающей краской, или и так сойдёт?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4601467#p4601467"]А как быть, если период между импульсами (между нажатиями, можно считать) сам по себе 5мс?[/uquote]
Что это за механический датчик с периодом 5 мс? :facepalm:
В любом случае, такой "автомобиль" не поедет.
Оптодатчики дребезга не имеют, в отличии от механических. Там вопрос решается простым гистерезисом триггера Шмитта или компаратора.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4601494#p4601494"]Что это за механический датчик с периодом 5 мс?[/uquote]Где я такое написал? Внимательнее читайте сообщения))

[uquote="КРАМ",url="/forum/viewtopic.php?p=4601494#p4601494"]Оптодатчики дребезга не имеют, в отличии от механических.[/uquote]На криво обрезанной шторке, да при отражениях от неё, могут быть явления, подобные дребезгу. Назовём их "паразитными срабатываниями".
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Martian »

[uquote="yor",url="/forum/viewtopic.php?p=4601467#p4601467"]Про подавление дребезга и паразитных скачков на сканируемых входах: как-то говорили, и назывались цифры, что при механических кнопках порядка 20мс[/uquote] число может быть и трехзначным, зависит от кнопки
КРАМ писал(а):Что это за механический датчик с периодом 5 мс?
геркон? возможно, тот успеет отдребезжать
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Чему вы удивлячетсь, хоть я и не писал об этом, но контакты прерывателя механические, да, вполне себе работают до 6000-8000тыс. оборотов, а это период 5-3мс у 2Ц/2Т мотора.
Ответить

Вернуться в «PIC»