Перейти к содержанию
    

Странности с битовыми операциями с PORTA

прошу помощи, почти день потерял на простейшей проблеме, обошел, но хочу понять где моя ошибка:

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

под руками оказались остатки проекта примерно 20-ти летней давности на PIC16F876, он избыточен, но был под руками.

кнопки - на PORTB с встроенной подтяжкой, светодиоды - на PORTC, выходы платы (их всего 4) на PORTA, соответственно максимально просто настроены A C все на выход, B на вход.

вся программа - строк 150 на ассемблере, тупо инициализация, основой цикл с обработкой 3-х кнопок и прерывание таймерное для выдачи частоты 50 или 60 Гц.

быстро написал, логику кнопок и светодиодов сделал, таймер на 50х2\60х2 переключается все ок.

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

пример, на этапе инициализации, до включения прерываний:

        call    delay
        call    delay
        call    delay
        bsf     PORTA,1            ; BPOK
        bsf     PORTC,2            ; BPOK red smd led off
        call    delay
        bsf     PORTA,0            ; BDCOK
        bsf     PORTC,3            ; BDCOK red smd led off

светодиоды отрабатывают правильно, а PORTA не работает...

причем не работает именно с bcf или bsf...

потеряв много времени, решил "костылем" с переменной-дублем PORTA, во все обращениях к порту поменял PORTA на имя переменной (и прерывания пораньше включил):

        call    delay
        call    delay
        call    delay
        bsf     tmp_a,1            ; BPOK
        bsf     PORTC,2            ; BPOK red smd led off
        call    delay
        bsf     tmp_a,0            ; BDCOK
        bsf     PORTC,3            ; BDCOK red smd led off
        call    delay

в прерывании:

        movf    tmp_a,w    
        movwf    PORTA

вот такая "виртуализация" 😞

всё работает так, устройство живет, но почему bcf или bsf не работают?!  я даже нашел еще PIC16F876A, почти тех же лет, та же проблема...

про OC на PORTA.4 помню, альтернативные функции не включались. из всей периферии только TIMER1 от внутреннего тактирования используется. +питания у этого пика один, забыть банк запитать нельзя 🙂

 

 

 

 

 


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё на заре PICов везде про чтение-модификация-запись в документации писали. Это те самые bsf и bcf.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я давно очень не писал для пиков, но вроде все ок должно быть, по структуре порта. читается выходная защелка, модифицируется и пишется обратно. тонкости с "перетягиванием" ног нагрузкой, но тут не тот случай...

и с портом С проблем нет, в том же чипе

пример из той же программы:

        movlw   0x20
        xorwf   PORTC,f         ; toggle bit 6 TIMER led

работает, при этом явная операция чтение-модификация-запись.

а здесь:

        bsf     PORTA,1            ; BPOK - тут просто нет реакции на пинах
        bsf     PORTC,2            ; BPOK red smd led off   - тут все ок

если просто писать в портА  "movwf    PORTA" - все ок

что то я упустил... вроде прочитал, что к портам относится, специально нашел старый вариант пдф-ки, тех же годов, что и пик примененный. 


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Vasily_A сказал:

тут не тот случай

Почему нет, эффект очень похожий?
Ещё предложу вариант, что-то неправильно с настройками цифровой-аналоговый.

 

2 часа назад, Vasily_A сказал:

явная операция чтение-модификация-запись

Так здесь сразу на весь порт, а не на отдельные выходы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Vasily_A said:

светодиоды - на PORTC, выходы платы (их всего 4) на PORTA,

вот в этом и кроется пробема

Выше вам писали

2 hours ago, ShAlex said:

Ещё на заре PICов везде про чтение-модификация-запись в документации писали. Это те самые bsf и bcf.

Чтоб такого эффекта не было порт нужно нагружать на нагрузку более 5кОм , а лучше 10кОм.

А вы напрямую к порту СД подключили?  Хорошо если через низкоомные резисторы. но все равно это не спасает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, smart_pic сказал:

А вы напрямую к порту СД подключили?

Читайте внимательно: у ТС светодиоды работают нормально.
И с чего Вы взяли, что они подключены без резисторов?
Полагаю ТС не совсем деревянный, хотя всякое конечно бывает.

😁
А нагрузку к портам надо подключать согласно цифрам из таблицы даташита.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Smen said:

Читайте внимательно: у ТС светодиоды работают нормально.

светодиоды работают правильно, только порт от этого работает не правильно при выполнение операции чтение-модификация-запись

 

1 hour ago, Smen said:

И с чего Вы взяли, что они подключены без резисторов?
Полагаю ТС не совсем деревянный, хотя всякое конечно бывает.

даже если резистор будет 500 Ом порт может воспринимать 0 при выполнение операции чтение-модификация-запись

Это известные грабли и бывалые их стороной обходят как в схемотехнике так и программировании.

И пока ТС не покажет тут свою схему подключения  - то и советы давать бесполезно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, я не "деревянный". Со светодиодами, которые на PORTC (естественно с резисторами...), с bcf и bsf проблем нет.

На выходах PORTA обычные ttl совместимые драйвера в пике (кроме PORTA.4), если верить документации микрочипа и нескольким моим годам их использования с конца 90-х по начало 2000-х.

Нагрузка порта А, в моем случае - делитель осциллографа при первичной настройке, или нагрузка примерно эквивалентная нескольким ttl входам в целевом применении.

Вопрос остается - почему в 2-х экземплярах PIC16F876 и одном PIC16F876A не работает bcf или bsf? Сами порты исправны, при байтовой записи все с ними ок.

Больше у меня этого 16F8хх семейства в дипе не осталось, но вроде они все три новые были, не снятые с устройств (судя по формовке ног заводской и чистой памяти), проверить больше не чем.

На совсем древнем проекте (еще на PIC16C84), прошлого тысячелетия, bcf и bsf на PORTA работали, я исходник студенческих лет нашел от заведомо живого устройства...

Может ассемблер в условно-современном мплабе (8.3 версия) дурит?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

схему выкладывайте , и только после этого возможен разговор. Условия проверки , а также питающие напряжения.

НИ РАЗУ, повторюсь ни разу не встречал в пиках 16 серии глюков, не объяснимых документацией и ERRATA.

12 hours ago, Vasily_A said:

Может ассемблер в условно-современном мплабе (8.3 версия) дурит

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если память не изменяет, у 84 пиков PORTA.4 был с открытым стоком. Но это непринципиально - команды-то читают и пишут регистр выходной защелки, которому без разницы, что там на реальных ногах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

схему набросал

правда, не знаю зачем, все написано ранее:

порт А - выходы на разъем, нагружены на ttl входы в целевом устройстве

порт В - входы, кнопки с включенной в пике подтяжкой, один из пинов идет на внешний разъем.

порт С - выходы, светодиоды через резисторы

про особенности PORTA.4 писал в первом сообщении, учтено подтяжкой.

2024-02-12_20-36-22.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/12/2024 at 8:49 PM, Vasily_A said:

схему набросал

А вы учли, что по умолчанию выводы PORTA настроены как аналоговые входы ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"А вы учли, что по умолчанию выводы PORTA настроены как аналоговые входы ?"

апа... что то я упустил.

вроде обычно, в trisa 0x00 записал, и они на выход работают. завтра почитаю повнимательней, я всегда думал что по por ацп и все с ним связанное в отключке...

не, не учел... или забыл, или и не знал, а это точно? а почему при выводе байтом работают нормально? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/12/2024 at 11:37 PM, Vasily_A said:

не, не учел... или забыл, или и не знал, а это точно? а почему при выводе байтом работают нормально? 

По документации так.
Раздел I/O Ports

 

Quote

The operation of each pin is selected by clearing/setting the control bits in the ADCON1 register (A/D Control Register1).

Note: On a Power-on Reset, these pins are configured as analog inputs and read as '0'.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, Vasily_A сказал:

апа... что то я упустил

Так читайте внимательно, что Вам отвечают.

😏

Я Вам высказывал такой вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...