Неадекватный порт PORT.B
|
|
555serg |
Дата: Вт, 01.12.2015, 12:06 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
41
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Доброго времени суток всем участникам форума. Не могу решить одну проблемку. Может кто подскажет, буду очень признателен. Собрал макетную плату на PIC16F876 камне. Начал писать прогу, и сразу же отлаживать все в работе. Половину постав- ленной задачи сделал, но как только приступил к определению поступающего логи- ческого нуля или еденицы на выводе PORTB.5 - столкнулся со стеной. Весь порт PORTB настроен на вход. В свободном, никуда не подключенном выводе PORTB.5 на нем мультиметром обнаруживается 0 вольт. Подключай к этому порту резистор 33К второй вывод которого подтягиваю к плюсу источника питания. Так же подклю- чаю к этому порту резистор номиналом 2К второй вывод которого подключаю к об- щему , минус источника питания. Проблема в том, что на входе PORTB.5 - не 0,2 - 0,3 вольта как это и должно быть, а четко 0 вольт. Ткните носом пожалуйста, где туплю. Прогу прилагаю, все что в данный момент закомментировано, к делу не относится, подскажите что не так с настройками порта PORTB Нужна ваша помощь, спасибо.
|
|
|
|
DAlexV |
Дата: Вт, 01.12.2015, 12:47 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
665
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Цитата '------------------ настройка порт В ---------------------------- 'Declare PortB_Pullups = On 'подключим подтягивающие резисторы к порт В TRISB = 1 ' порт В на вход Цитата 555serg (  ) Весь порт PORTB настроен на вход Ну если верить коду то TRISB = 1 это только PORTB.0 будет входом, а остальные выходы. Правильней будет писать TRISB=$FF или TRISB=%11111111. Поэтому и не работает подтяжка То же касаемо и остальных портов (PORTA)
Успехов
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
Matrix252005 |
Дата: Вт, 01.12.2015, 13:13 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
637
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Добавлю следующее, сразу скажу, не примите за критику, но стиль написания у Вас....
И так...
Вы заремили основную прогу!!!! "On_Interrupt GoTo prer" поставьте его перед " 'GoTo main"
Сейчас проверил в протеусе, вроде бы работает...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
555serg |
Дата: Вт, 01.12.2015, 13:33 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
41
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Спасибо ребята что быстро откликнулись, сейчас буду читать и переваривать.
|
|
|
|
Matrix252005 |
Дата: Вт, 01.12.2015, 13:41 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
637
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Всегда ПЛЗ!!!!
На будущее!!!
Пишите настройки, да и в других переменных либо в НЕХ-ах, либо в бинарнике TRISх=$FF или TRISх=%11111111
Потому что, TRISх = 1 это тоже самое что TRISх = $01 или TRISх = %00000001
Вот и получается, что порт PortB.0 = 1 (тобишь на вход), а остальные на выход...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
555serg |
Дата: Вт, 01.12.2015, 14:10 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
41
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
DALexV и Matrix252005 спасибо. Изменил форму написания на TRISB = %11111111 как вы и посоветовали, напряжение на делителе из резисторов достигло разумных пре- делов 0.31в. Это говорит о том что - буфер в высокоимпедансном (Z) состоянии, и наг- рузочный резистор ничем не шунтируется - порт работает правильно. Да кстати изна- чально у меня была команда PULLUPS = on , но она работала как то неадекватно, и я от нее отказался. Просто подкинул внешние резисторы подтяжки. Теперь я понял почему. В дальнейшем собирался разобраться в этом вопросе, но теперь я вижу решился и он. Еще раз спасибо всем , тем более за такую оперативность. Да и кстати Matrix 252005 а что не так у меня со стилем?
|
|
|
|
Matrix252005 |
Дата: Вт, 01.12.2015, 14:50 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
637
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Цитата 555serg (  ) Да и кстати Matrix 252005 а что не так у меня со стилем? Вы все пишете столбиком, что очень сильно затрудняет читабельность программы. Например:
'---------------------------- ОСНОВНОЙ ЦИКЛ --------------------- 'main:
'If fact_tmr1 = 1 Then ' если имеется факт прерывания от таймера TMR1, то 'fact_tmr1 = 0 ' сбросим факт прерывания, и 'GoSub meandr ' отправляемся в подпрограмму формирования меандра - meandr 'EndIf
И это только кусочек кода, а теперь представьте, когда у Вас код под сотню строчек и еще это не Ваша программа... И как сможете прочесть многоуровневое условие....
Комменты это хорошо, но не когда они занимают много места в коде:
'If s2 = 0 And s2_on = 0 Then ' если кнопка s2 нажата, И как дальше будет понятно отпущена уже более двух пе- ' риодов переполнения таймера TMR0, то 'Inc per_0v_s2 ' увеличиваем на единицу переменную ожидания низкого уровня напряжения (per_0v_s2) 'ElseIf s2 = 1 And s2_on = 1 Then ' или если кнопка s2 отпущена, И с момента последнего нажатия прошло ' менее двух периодов переполнения таймера TMR0, то есть в процессе сканирования ' факт нажатия кнопки s2 s2_on еще не опущен, то 'Inc per_5v_s2 ' увеличиваем на единицу переменную ожидания высокого уровня напряжения (per_5v_s2) 'EndIf
Везде в условиях Вы используете ElseIf, для чего???
'If s3_on = 1 And vkl_s3 = 0 Then .... 'ElseIf s3_on = 1 And vkl_s3 = 1 Then ... 'EndIf
Не проще сделать 2 условия???
Так что, без обид!!!
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
555serg |
Дата: Ср, 02.12.2015, 12:19 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
41
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
Понял, спасибо. Приму к сведению. :)
Добавлено (02.12.2015, 12:14) ---------------------------------------------
Добавлено (02.12.2015, 12:18) --------------------------------------------- Matrix252005 еще проконсультируйте если не трудно. По поводу ElseIF , такой вариант сравнения лучше не использовать при написании программы?
Сообщение отредактировал
555serg - Ср, 02.12.2015, 12:19
|
|
|
|
Matrix252005 |
Дата: Ср, 02.12.2015, 12:33 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
637
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Не могу говорить за всех, но я делаю так (кусок кода написанный на mikroBasic-е!!!):
if (But = 0) and (But1 = false) then But1 = true UART1_Write_text("OK!!!") end if
if (But = 1) and (But1 = true) then But1 = false end if
Я делаю так... Если нужно условие с "если", то просто:
if (P < 0 ) then P = (P + 3) + (2 * A_) inc(A_) else P = (P + 5) + (2 * (A_ - B_)) inc(A_) dec(B_) end if
А там... Кому как нравится...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
555serg |
Дата: Ср, 02.12.2015, 17:20 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
41
Замечания:
±
На сайте с 12.12.2011
Статус:
Offline
|
А я всего лишь думал что вложения ElseIf, Else, делают окончательный код более габаритным, и иногда могут глючить. Еще мне думается, что одноуров- невая схема сравнения в исключительных случаях работает стабильнее. Все равно спасибо за разъяснения.
|
|
|
|
MiXaS |
Дата: Пт, 04.12.2015, 09:07 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
551
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата 555serg (  ) per_0v_s1 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s1 per_0v_s2 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s2 per_0v_s3 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s3 per_0v_s4 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s4 per_0v_s5 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s5 per_0v_s6 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè íèçêîãî óðîâíÿ ñ êíîïêè s6
s1_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s1 s2_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s2 s3_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s3 s4_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s4 s5_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s5 s6_on = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàëè÷èÿ íèçêîãî óðîâíÿ íà âõîäå PORTB.5
timer_buz = 0 ' îáíóëèì ïåðåìåííóþ âðåìåíè âêëþ÷åíèÿ áóçåðà buz_on = 0 ' îáíóëèì ôëàã âêëþ÷åíèÿ áóçåðà
vkl_s1 = 0 ' âíà÷àëå - âûêëþ÷åíî vkl_s2 = 0 ' âíà÷àëå - âûêëþ÷åíî vkl_s3 = 0 ' âíà÷àëå - âûêëþ÷åíî vkl_s4 = 0 ' âíà÷àëå - âûêëþ÷åíî vkl_s5 = 0 ' âíà÷àëå - âûêëþ÷åíî vkl_s6 = 0 ' âíà÷àëå - âûêëþ÷åíî
per_5v_s1 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s1 per_5v_s2 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s2 per_5v_s3 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s3 per_5v_s4 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s4 per_5v_s5 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s5 per_5v_s6 = 0 ' îáíóëèì ïåðåìåííóþ çàäåðæêè ðåãèñòðàöèè âûñîêîãî óðîâíÿ ñ êíîïêè s6
s1_on_prin_resh = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s1, äëÿ åäèíîðàçîâîãî ïîñåùåíèÿ ' ïîäïðîãðàììû ïðèíÿòèÿ ðåøåíèé ( prin_resh ) s2_on_prin_resh = 0 ' s3_on_prin_resh = 0 ' s4_on_prin_resh = 0 ' s5_on_prin_resh = 0 ' s6_on_prin_resh = 0 ' îáíóëèì ïåðåìåííóþ ôàêòà íàæàòèÿ íà êíîïêó s6, äëÿ åäèíîðàçîâîãî ïîñåùåíèÿ ' ïîäïðîãðàììû ïðèíÿòèÿ ðåøåíèé ( prin_resh )
Чтобы не городить огород, есть команда clear, которая очищает оперативную память, т.е в начале кода пишите ее и не надо в ручную каждую переменную обнулять, что в свою очередь сокращает время выполнения кода, время написания кода, а также размер кода.
Цитата 555serg (  ) Да кстати изна-чально у меня была команда PULLUPS = on , но она работала как то неадекватно, и я от нее отказался. За подтяжки отвечает OPTION_REG. Рекомендую почитать ШИТ на камень и прописывать все регистры в ручную? чтобы не использовать протоновские декларации (Pullups; digital_all), у меня они не всегда работали. Из личного опыта работы с протоном, рекомендую сразу настраивать все модули, которые мультиплицированы с портами (ADC, CPP, Comparator, MSSP, .........) В противном случае настройки по умолчанию Вам будут портить жизнь, причем Вы потратите много времени чтобы понять в чем дело. Также рекомендую в начале кода прописывать регистр конфигурации MCU, чтобы быть на 100% уверенным, что Watch Dog выключен, если это не нужно.... выбран необходимый тактовый генератор.
|
|
|
|
Константин |
Дата: Сб, 26.12.2020, 06:51 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 10.05.2013
Статус:
Offline
|
biletedeavion, заходишь на форум с хорошим настроением, а там...Ж.. Половина интернета превращается в помойку, но это их профиль. а нам это зачем. Просьба соблюдать правила форума.
|
|
|
|
xvovanx |
Дата: Сб, 26.12.2020, 22:58 | Сообщение # 13 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
310
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
да это гнусные боты-спамеры форум засирают. Может админам ужесточить регистрацию на форуме, типа при регистрации побольше профильных вопрос-ответов на закон Ома, электроники и т.п. Сразу леваки-рекламщики-казиношники пошли бы по боку...
|
|
|
|