Помогите разобраться с директивой BCF

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы

Сообщение Родэрик »

Shk_Alex писал(а):
Почему, если я прописываю оба выхода сразу командой MOVWF, светятся оба, а если по одному - только последний?
Судя по мануалу команда не должна влиять на другие биты!
Когда ты делаешь второй bsf, идёт считывание с ножек всего порта и там где ты предыдущим bsf поставил "1" считывается ноль, поскольку за пару мкс. через твои 180 ом высокий уровень на той ноге просто не успел проявиться, в итоге так как считался ноль, то ноль и будет записан в защёлку. Что ж тут непонятного, именно об этом тебе ребята выше и написали.
Даже если ты несколько bsf сделаешь в одном порту, сработает только последний и даже 10 нопов паузы тут не помогут, увеличь номинал сопротивления, убери ёмкость с ноги, если вдруг она там стоит и ты забыл об этом упомянуть итд.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25540
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Родэрик писал(а):просто не успел проявиться
Причем тут "не успел"? :facepalm: Он там НИКОГДА НЕ УСПЕЕТ. Нет никакой емкости в нагрузке. Светодиод - чисто активный импеданс.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

А чего спорить? Увеличить резисторы до 1-2 кОм и всё сразу станет ясно.
Друг Кота
Аватара пользователя
Сообщения: 25540
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Положим, это ясно и сейчас. Просто кто-то (не будем указывать пальцами) не умеет читать даташит... :wink:
Из приведенного графика (выше) легко посчитать, что сопротивление канала Р-канального мосфета у МК равно примерно 0,6В/5мА=120 Ом. На котором при 20 мА упадет 0,120 кОм*20 мА=2,4 Вольта. То есть как раз в районе порога переключения...
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

КРАМ писал(а):....А он ее и настроил. Отсутствие корректной конфигурации никак не влияет на самопроизвольный сброс отдельных разрядов. Неверно настроенный пин просто не будет работать.
Автор все настроил правильно...
Где по тексту программы?
Может быть, всё-таки, документацию посмотрите...
В частности, стр.63 http://ww1.microchip.com/downloads/en/D ... -print.pdf
Изображение
стр.34
Изображение
------
P.S.
Ради интереса, сейчас "поиздевался" над PIC16F876 в плане нагрузки на выходы и выполнения команд bcf PORTB,x и bsf PORTB,x.
"Плевать он хотел" на нагрузку. Всё работает.
------
P.P.S.
Для любителей RMW:
При выполнении команд bcf PORTx,x и bsf PORTx,x не производится чтение состояния выхода (именно об этом и спрашивал ТС).
Не путайте эти команды с, к примеру, btfsc PORTx,x или xorwf PORTx,F
Реклама
Открыл глаза
Сообщения: 50
Зарегистрирован: Ср сен 24, 2014 11:14:53
Откуда: Москва

Сообщение Shk_Alex »

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

Об этом же написано, например, в примечании стр 34, которую вы привели.

Далее:
КРАМ писал(а):
Shk_Alex писал(а): Возник соответственно вопрос, получается я не смогу в процессе исполнения программы менять направление пина? Если это так, то я очень расстроен, я очень надеялся, что это возможно....
Естественно, что это возможно. Конфигурационное слово не настраивает направление пинов.
Albert_V писал(а): Необходимо сразу после старта программы указать какие выводы у вас должны быть выходами, .......... и, только после этого, можете приступать к "нормальной работе".
Ааааааааааа :shock:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Как правило, высший приоритет настройки выводов имеет "периферия", а не значение в TRISх.
Всё это указано в разделе I/O PORTS BLOCK DIAGRAM документации на контроллер.
----
P.S.
Так же, настоятельно рекомендую читать SUMMARY OF REGISTERS ASSOCIATED WITH ххххххх.
Друг Кота
Аватара пользователя
Сообщения: 25540
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Albert_V писал(а): P.S.
Ради интереса, сейчас "поиздевался" над PIC16F876 в плане нагрузки на выходы и выполнения команд bcf PORTB,x и bsf PORTB,x.
"Плевать он хотел" на нагрузку. Всё работает.
------
P.P.S.
Для любителей RMW:
При выполнении команд bcf PORTx,x и bsf PORTx,x не производится чтение состояния выхода (именно об этом и спрашивал ТС).
Не путайте эти команды с, к примеру, btfsc PORTx,x или xorwf PORTx,F
Даже и не знаю как Вам объяснять....
ВСЕ БИТОВЫЕ КОМАНДЫ исполняются через RMW. Абсолютно все и во всех ныне известных архитектурах всех производителей.
Иначе получить адресацию бита невозмлжно даже теоретически.
Если в контроллере есть LAT, бага не будет, даже если выводить в PORT, потому что вывести в этих контроллерах в PORT невозможно...
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

КРАМ писал(а):...Даже и не знаю как Вам объяснять.....
Я уже начинаю сомневаться, что вы правильно понимаете что такое RMW.
Я симуляторами, принципиально, не пользуюсь. Пишу программы на asm под конкретное "железо".
Отладку делаю на реальном "железе" по "кускам программ".
Очень редко пользуюсь внутрисхемным debugger-ом.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Shk_Alex писал(а):Какая-то ерунда.
Для работы компаратора и аналогового входа нужно, что бы пин работал на вход а у меня в trisc настроен выход!!!
В случае RMW это не имеет значения. Тонкость в том что RMW это чтение-модификация-запись. А при чтении порта всегда считывается реальное состояние пинов. Независимо как они настроены на вход или выход. Это есть в даташите.
Вот что первое под руку попалось.
http://www.cornerstonerobotics.org/curr ... roblem.pdf
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

КРАМ писал(а): Даже и не знаю как Вам объяснять....
ВСЕ БИТОВЫЕ КОМАНДЫ исполняются через RMW. Абсолютно все и во всех ныне известных архитектурах всех производителей.
Иначе получить адресацию бита невозмлжно даже теоретически.
Если в контроллере есть LAT, бага не будет, даже если выводить в PORT, потому что вывести в этих контроллерах в PORT невозможно...
Тогда может стоить упомянуть вывод через фантомный регистр в особо тяжёлых случаях для искоренения влияния RMW?
Последний раз редактировалось scorpi_0n Пн дек 14, 2015 17:03:25, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Да причём тут чтение?!!!!!!
ТС, в первом посте, спрашивал про ВЫХОДЫ а не входы!!!
ИМХО: Если мы сейчас "нагрузим" ТС "по-полной", он может вообще отказаться от программирования.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Albert_V писал(а):Да причём тут чтение?!!!!!!
Как причём? Битовые операции это всегда чтение-модификация- запись.
Уж пусть лучше сразу и навсегда разберётся.
Хотя в данном случае я больше склоняюсь к неотключенной периферии.
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

scorpi_0n писал(а):...Битовые операции это всегда чтение-модификация- запись....
Т.е., вы хотите сказать, что при выполнение команды, к примеру, bsf PORTC,1 вначале происходит чтение порта?
Да, отвлекитесь вы уже от PIC16C5x и их "ровестников".
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

А 684 от них далеко не ушёл.
Reading the PORTA register (Register 4-1) reads the
status of the pins, whereas writing to it will write to the
PORT latch. All write operations are read-modify-write
operations. Therefore, a write to a port implies that the
port pins are read, this value is modified and then
written to the PORT data latch.
The ANSEL register is used to configure the Input
mode of an I/O pin to analog. Setting the appropriate
ANSEL bit high will cause all digital reads on the pin to
be read as ‘0’ and allow analog functions on the pin to
operate correctly.
The state of the ANSEL bits has no affect on digital
output functions. A pin with TRIS clear and ANSEL set
will still operate as a digital output, but the Input mode
will be analog. This can cause unexpected behavior
when executing read-modify-write instructions on the
affected port.
А вообще это всё легко проверяется. Настраиваем пин на вывод замыкаем его на землю чем либо выполняем bsf убираем замыкание и проверяем уровень на пине.
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

scorpi_0n писал(а):...А вообще это всё легко проверяется...
Про проверку с PIC16F876 я говорил выше.
:tea:
Встал на лапы
Аватара пользователя
Сообщения: 130
Зарегистрирован: Чт янв 05, 2012 23:47:20
Откуда: BY

Сообщение Ferrum-1827 »

Как-то странно спорить с тем, что RMW эффект есть и описан на том же микрочипе в разных вариантах и исполнениях Изображение
Изображение
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Да и не надо спорить.
Просто, тут путают команды контроллера и всё превращается в "кашу".
Но! ТС спрашивал только про выполнение команды bsf PORTx,x.
У PIC16F684 эта команда выполняется без RMW.
-----
P.S.
Может быть, у кого-то проблема с симулятором? :dont_know:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Albert_V писал(а): У PIC16F684 эта команда выполняется без RMW.
Стр. по PIC16F684. Внизу в документации ищем I/O Ports. Открываем стр. №2 и видим там такую запись :
All write operations (such as BSF and BCF instructions) are read-modify-write operations.
:dont_know:
Друг Кота
Аватара пользователя
Сообщения: 25540
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Albert_V писал(а): У PIC16F684 эта команда выполняется без RMW.
Это ложное утверждение.
Еще раз.
НИКАКАЯ битовая команда не может быть выполнена без RMW. Это элементарно объясняется тем, что память имеет байтовую организацию и никакой бит не может быть записан отдельно. Ни в каком контроллере. Ни в 4-х, ни в 8-ми, ни в 128-ми разрядном. Ни у какого производителя.
У контроллеров Микрочипа, содержащих защелку с буфером (регистр LAT) принципиально невозможно выполнить запись в порт минуя эту защелку. Формальная запись в PORT на самом деле выполняется как запись в LAT, просто потому, что никаких других регистров там нет.
Albert_V писал(а): Я уже начинаю сомневаться, что вы правильно понимаете что такое RMW.
Боюсь что это Вы не понимаете, увы... :dont_know:
Вы не найдете способ изменить бит в ОЗУ иначе,чем прочитав весь байт, изменив бит и записав назад результат.
Если Вы знаете такой способ - ознакомьте нас с ним.
Ответить

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