Vasily_A 0 11 февраля Опубликовано 11 февраля · Жалоба прошу помощи, почти день потерял на простейшей проблеме, обошел, но хочу понять где моя ошибка: потребовалось быстро сделать макет платы, которая выдает последовательность сигналов включения и отрабатывает несколько кнопок и светодиодов. под руками оказались остатки проекта примерно 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 от внутреннего тактирования используется. +питания у этого пика один, забыть банк запитать нельзя 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ShAlex 4 11 февраля Опубликовано 11 февраля · Жалоба Ещё на заре PICов везде про чтение-модификация-запись в документации писали. Это те самые bsf и bcf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_A 0 11 февраля Опубликовано 11 февраля · Жалоба я давно очень не писал для пиков, но вроде все ок должно быть, по структуре порта. читается выходная защелка, модифицируется и пишется обратно. тонкости с "перетягиванием" ног нагрузкой, но тут не тот случай... и с портом С проблем нет, в том же чипе пример из той же программы: movlw 0x20 xorwf PORTC,f ; toggle bit 6 TIMER led работает, при этом явная операция чтение-модификация-запись. а здесь: bsf PORTA,1 ; BPOK - тут просто нет реакции на пинах bsf PORTC,2 ; BPOK red smd led off - тут все ок если просто писать в портА "movwf PORTA" - все ок что то я упустил... вроде прочитал, что к портам относится, специально нашел старый вариант пдф-ки, тех же годов, что и пик примененный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 11 февраля Опубликовано 11 февраля · Жалоба 2 часа назад, Vasily_A сказал: тут не тот случай Почему нет, эффект очень похожий? Ещё предложу вариант, что-то неправильно с настройками цифровой-аналоговый. 2 часа назад, Vasily_A сказал: явная операция чтение-модификация-запись Так здесь сразу на весь порт, а не на отдельные выходы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smart_pic 7 11 февраля Опубликовано 11 февраля · Жалоба 6 hours ago, Vasily_A said: светодиоды - на PORTC, выходы платы (их всего 4) на PORTA, вот в этом и кроется пробема Выше вам писали 2 hours ago, ShAlex said: Ещё на заре PICов везде про чтение-модификация-запись в документации писали. Это те самые bsf и bcf. Чтоб такого эффекта не было порт нужно нагружать на нагрузку более 5кОм , а лучше 10кОм. А вы напрямую к порту СД подключили? Хорошо если через низкоомные резисторы. но все равно это не спасает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 11 февраля Опубликовано 11 февраля · Жалоба 13 минут назад, smart_pic сказал: А вы напрямую к порту СД подключили? Читайте внимательно: у ТС светодиоды работают нормально. И с чего Вы взяли, что они подключены без резисторов? Полагаю ТС не совсем деревянный, хотя всякое конечно бывает. 😁 А нагрузку к портам надо подключать согласно цифрам из таблицы даташита. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smart_pic 7 11 февраля Опубликовано 11 февраля · Жалоба 1 hour ago, Smen said: Читайте внимательно: у ТС светодиоды работают нормально. светодиоды работают правильно, только порт от этого работает не правильно при выполнение операции чтение-модификация-запись 1 hour ago, Smen said: И с чего Вы взяли, что они подключены без резисторов? Полагаю ТС не совсем деревянный, хотя всякое конечно бывает. даже если резистор будет 500 Ом порт может воспринимать 0 при выполнение операции чтение-модификация-запись Это известные грабли и бывалые их стороной обходят как в схемотехнике так и программировании. И пока ТС не покажет тут свою схему подключения - то и советы давать бесполезно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_A 0 11 февраля Опубликовано 11 февраля · Жалоба Господа, я не "деревянный". Со светодиодами, которые на PORTC (естественно с резисторами...), с bcf и bsf проблем нет. На выходах PORTA обычные ttl совместимые драйвера в пике (кроме PORTA.4), если верить документации микрочипа и нескольким моим годам их использования с конца 90-х по начало 2000-х. Нагрузка порта А, в моем случае - делитель осциллографа при первичной настройке, или нагрузка примерно эквивалентная нескольким ttl входам в целевом применении. Вопрос остается - почему в 2-х экземплярах PIC16F876 и одном PIC16F876A не работает bcf или bsf? Сами порты исправны, при байтовой записи все с ними ок. Больше у меня этого 16F8хх семейства в дипе не осталось, но вроде они все три новые были, не снятые с устройств (судя по формовке ног заводской и чистой памяти), проверить больше не чем. На совсем древнем проекте (еще на PIC16C84), прошлого тысячелетия, bcf и bsf на PORTA работали, я исходник студенческих лет нашел от заведомо живого устройства... Может ассемблер в условно-современном мплабе (8.3 версия) дурит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smart_pic 7 12 февраля Опубликовано 12 февраля · Жалоба схему выкладывайте , и только после этого возможен разговор. Условия проверки , а также питающие напряжения. НИ РАЗУ, повторюсь ни разу не встречал в пиках 16 серии глюков, не объяснимых документацией и ERRATA. 12 hours ago, Vasily_A said: Может ассемблер в условно-современном мплабе (8.3 версия) дурит Это очень устойчивая версия, также 8.88 и по сей день остаются устойчивыми и отлично работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 12 февраля Опубликовано 12 февраля · Жалоба Если память не изменяет, у 84 пиков PORTA.4 был с открытым стоком. Но это непринципиально - команды-то читают и пишут регистр выходной защелки, которому без разницы, что там на реальных ногах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_A 0 12 февраля Опубликовано 12 февраля · Жалоба схему набросал правда, не знаю зачем, все написано ранее: порт А - выходы на разъем, нагружены на ttl входы в целевом устройстве порт В - входы, кнопки с включенной в пике подтяжкой, один из пинов идет на внешний разъем. порт С - выходы, светодиоды через резисторы про особенности PORTA.4 писал в первом сообщении, учтено подтяжкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 12 февраля Опубликовано 12 февраля · Жалоба On 2/12/2024 at 8:49 PM, Vasily_A said: схему набросал А вы учли, что по умолчанию выводы PORTA настроены как аналоговые входы ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_A 0 12 февраля Опубликовано 12 февраля · Жалоба "А вы учли, что по умолчанию выводы PORTA настроены как аналоговые входы ?" апа... что то я упустил. вроде обычно, в trisa 0x00 записал, и они на выход работают. завтра почитаю повнимательней, я всегда думал что по por ацп и все с ним связанное в отключке... не, не учел... или забыл, или и не знал, а это точно? а почему при выводе байтом работают нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 13 февраля Опубликовано 13 февраля · Жалоба 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'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 13 февраля Опубликовано 13 февраля · Жалоба 11 часов назад, Vasily_A сказал: апа... что то я упустил Так читайте внимательно, что Вам отвечают. 😏 Я Вам высказывал такой вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться