Заголовок сообщения: Re: Помогите разобраться с директивой BCF
Добавлено: Пн дек 14, 2015 10:37:45
Нашел транзистор. Понюхал.
Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35 Сообщений: 157 Откуда: не с Уфы
Рейтинг сообщения:0
Shk_Alex писал(а):
Почему, если я прописываю оба выхода сразу командой MOVWF, светятся оба, а если по одному - только последний? Судя по мануалу команда не должна влиять на другие биты!
Когда ты делаешь второй bsf, идёт считывание с ножек всего порта и там где ты предыдущим bsf поставил "1" считывается ноль, поскольку за пару мкс. через твои 180 ом высокий уровень на той ноге просто не успел проявиться, в итоге так как считался ноль, то ноль и будет записан в защёлку. Что ж тут непонятного, именно об этом тебе ребята выше и написали. Даже если ты несколько bsf сделаешь в одном порту, сработает только последний и даже 10 нопов паузы тут не помогут, увеличь номинал сопротивления, убери ёмкость с ноги, если вдруг она там стоит и ты забыл об этом упомянуть итд.
Положим, это ясно и сейчас. Просто кто-то (не будем указывать пальцами) не умеет читать даташит... Из приведенного графика (выше) легко посчитать, что сопротивление канала Р-канального мосфета у МК равно примерно 0,6В/5мА=120 Ом. На котором при 20 мА упадет 0,120 кОм*20 мА=2,4 Вольта. То есть как раз в районе порога переключения...
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
....А он ее и настроил. Отсутствие корректной конфигурации никак не влияет на самопроизвольный сброс отдельных разрядов. Неверно настроенный пин просто не будет работать. Автор все настроил правильно...
Где по тексту программы? Может быть, всё-таки, документацию посмотрите... В частности, стр.63 http://ww1.microchip.com/downloads/en/DeviceDoc/41202F-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
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Shk_Alex
Заголовок сообщения: Re: Помогите разобраться с директивой BCF
Добавлено: Пн дек 14, 2015 15:39:09
Открыл глаза
Зарегистрирован: Ср сен 24, 2014 11:14:53 Сообщений: 50 Откуда: Москва
Рейтинг сообщения:0
Какая-то ерунда. Для работы компаратора и аналогового входа нужно, что бы пин работал на вход а у меня в trisc настроен выход!!!
Об этом же написано, например, в примечании стр 34, которую вы привели.
Далее:
КРАМ писал(а):
Shk_Alex писал(а):
Возник соответственно вопрос, получается я не смогу в процессе исполнения программы менять направление пина? Если это так, то я очень расстроен, я очень надеялся, что это возможно....
Естественно, что это возможно. Конфигурационное слово не настраивает направление пинов.
Albert_V писал(а):
Необходимо сразу после старта программы указать какие выводы у вас должны быть выходами, .......... и, только после этого, можете приступать к "нормальной работе".
Как правило, высший приоритет настройки выводов имеет "периферия", а не значение в TRISх. Всё это указано в разделе I/O PORTS BLOCK DIAGRAM документации на контроллер. ---- P.S. Так же, настоятельно рекомендую читать SUMMARY OF REGISTERS ASSOCIATED WITH ххххххх.
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 невозможно...
Я уже начинаю сомневаться, что вы правильно понимаете что такое RMW. Я симуляторами, принципиально, не пользуюсь. Пишу программы на asm под конкретное "железо". Отладку делаю на реальном "железе" по "кускам программ". Очень редко пользуюсь внутрисхемным debugger-ом.
Какая-то ерунда. Для работы компаратора и аналогового входа нужно, что бы пин работал на вход а у меня в trisc настроен выход!!!
В случае RMW это не имеет значения. Тонкость в том что RMW это чтение-модификация-запись. А при чтении порта всегда считывается реальное состояние пинов. Независимо как они настроены на вход или выход. Это есть в даташите. Вот что первое под руку попалось. http://www.cornerstonerobotics.org/curr ... roblem.pdf
Даже и не знаю как Вам объяснять.... ВСЕ БИТОВЫЕ КОМАНДЫ исполняются через RMW. Абсолютно все и во всех ныне известных архитектурах всех производителей. Иначе получить адресацию бита невозмлжно даже теоретически. Если в контроллере есть LAT, бага не будет, даже если выводить в PORT, потому что вывести в этих контроллерах в PORT невозможно...
Тогда может стоить упомянуть вывод через фантомный регистр в особо тяжёлых случаях для искоренения влияния RMW?
Последний раз редактировалось scorpi_0n Пн дек 14, 2015 17:03:25, всего редактировалось 1 раз.
Да причём тут чтение?!!!!!! ТС, в первом посте, спрашивал про ВЫХОДЫ а не входы!!! ИМХО: Если мы сейчас "нагрузим" ТС "по-полной", он может вообще отказаться от программирования.
Как причём? Битовые операции это всегда чтение-модификация- запись. Уж пусть лучше сразу и навсегда разберётся. Хотя в данном случае я больше склоняюсь к неотключенной периферии.
...Битовые операции это всегда чтение-модификация- запись....
Т.е., вы хотите сказать, что при выполнение команды, к примеру, bsf PORTC,1 вначале происходит чтение порта? Да, отвлекитесь вы уже от PIC16C5x и их "ровестников".
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 убираем замыкание и проверяем уровень на пине.
Да и не надо спорить. Просто, тут путают команды контроллера и всё превращается в "кашу". Но! ТС спрашивал только про выполнение команды bsf PORTx,x. У PIC16F684 эта команда выполняется без RMW. ----- P.S. Может быть, у кого-то проблема с симулятором?
Это ложное утверждение. Еще раз. НИКАКАЯ битовая команда не может быть выполнена без RMW. Это элементарно объясняется тем, что память имеет байтовую организацию и никакой бит не может быть записан отдельно. Ни в каком контроллере. Ни в 4-х, ни в 8-ми, ни в 128-ми разрядном. Ни у какого производителя. У контроллеров Микрочипа, содержащих защелку с буфером (регистр LAT) принципиально невозможно выполнить запись в порт минуя эту защелку. Формальная запись в PORT на самом деле выполняется как запись в LAT, просто потому, что никаких других регистров там нет.
Albert_V писал(а):
Я уже начинаю сомневаться, что вы правильно понимаете что такое RMW.
Боюсь что это Вы не понимаете, увы... Вы не найдете способ изменить бит в ОЗУ иначе,чем прочитав весь байт, изменив бит и записав назад результат. Если Вы знаете такой способ - ознакомьте нас с ним.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения