Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Picbasic.ru » Скорая помощь начинающим » Помощь в вопросах программирования » Неадекватный порт PORT.B (подскажите где туплю)
Неадекватный порт PORT.B
555serg Дата: Вт, 01.12.2015, 12:06  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 41
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Доброго времени суток всем участникам форума. Не могу решить одну проблемку.
Может кто подскажет, буду очень признателен. Собрал макетную плату на PIC16F876
камне. Начал писать прогу, и сразу же отлаживать все в работе. Половину постав-
ленной задачи сделал, но как только приступил к определению поступающего логи-
ческого нуля или еденицы на выводе PORTB.5 - столкнулся со стеной. Весь порт 
PORTB настроен на вход. В свободном, никуда не подключенном выводе PORTB.5
на нем мультиметром обнаруживается 0 вольт. Подключай к этому порту резистор
33К второй вывод которого подтягиваю к плюсу источника питания. Так же подклю-
чаю к этому порту резистор номиналом 2К второй вывод которого подключаю к об-
щему , минус источника питания. Проблема в том, что на входе PORTB.5  - не 
0,2 - 0,3 вольта как это и должно быть, а четко 0 вольт. Ткните носом пожалуйста,
где туплю.
Прогу прилагаю, все что в данный момент закомментировано, к делу не относится,
подскажите что не так с настройками порта PORTB
Нужна ваша помощь, спасибо.
Прикрепления: Maket_driver_1.bas (35.6 Kb)
ЯНДЕКС Дата: 01.12.2015
DAlexV Дата: Вт, 01.12.2015, 12:47  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата
'------------------ настройка порт В ----------------------------
'Declare PortB_Pullups = On   'подключим подтягивающие резисторы к порт В
TRISB = 1                    ' порт В на вход
Цитата 555serg ()
Весь порт PORTB настроен на вход
Ну если верить коду то TRISB = 1 это только PORTB.0 будет входом, а остальные выходы. Правильней будет писать TRISB=$FF или TRISB=%11111111. Поэтому и не работает подтяжка
То же касаемо и остальных портов (PORTA)

Успехов  wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Matrix252005 Дата: Вт, 01.12.2015, 13:13  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!

Добавлю следующее, сразу скажу, не примите за критику, но стиль написания у Вас....

И так...

Вы заремили основную прогу!!!! "On_Interrupt GoTo prer" поставьте его перед " 'GoTo main"

Сейчас проверил в протеусе, вроде бы работает...


THE TRUTH IS OUT THERE.

С уважением, Николай.
555serg Дата: Вт, 01.12.2015, 13:33  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 41
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Спасибо ребята что быстро откликнулись, сейчас буду читать и переваривать.
Matrix252005 Дата: Вт, 01.12.2015, 13:41  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Всегда ПЛЗ!!!!  wink

На будущее!!! 

Пишите настройки, да и в других переменных либо в НЕХ-ах, либо в бинарнике
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
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

DALexV и Matrix252005 спасибо. Изменил форму написания на TRISB = %11111111
как вы и посоветовали, напряжение на делителе из резисторов достигло разумных пре-
делов 0.31в. Это говорит о том что - буфер в высокоимпедансном (Z) состоянии, и наг-
рузочный резистор ничем не шунтируется - порт работает правильно. Да кстати изна-
чально у меня была команда PULLUPS = on , но она работала как то неадекватно, и 
я от нее отказался. Просто подкинул внешние резисторы подтяжки. Теперь я понял почему.
В дальнейшем собирался разобраться в этом вопросе, но теперь я вижу решился и он.
Еще раз спасибо всем , тем более за такую оперативность.
Да и кстати Matrix 252005 а что не так у меня со стилем?
Matrix252005 Дата: Вт, 01.12.2015, 14:50  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 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 условия???

Так что, без обид!!!  wine


THE TRUTH IS OUT THERE.

С уважением, Николай.
555serg Дата: Ср, 02.12.2015, 12:19  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 41
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

А я всего лишь думал что вложения ElseIf, Else, делают окончательный код
более габаритным, и иногда могут глючить.  Еще мне думается, что одноуров-
невая схема сравнения в исключительных случаях работает стабильнее.
Все равно спасибо за разъяснения. smile
MiXaS Дата: Пт, 04.12.2015, 09:07  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 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 выключен, если это не нужно.... выбран необходимый тактовый генератор.
ЯНДЕКС Дата: 04.12.2015
Константин Дата: Сб, 26.12.2020, 06:51  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Новенький
Сообщений: 5
Репутация: 0   ±
Замечания:   ±
На сайте с 10.05.2013

Статус: Offline

biletedeavion, заходишь на форум с хорошим настроением, а там...Ж..
Половина интернета превращается в помойку, но это их профиль. а нам это зачем.
Просьба соблюдать правила форума.
xvovanx Дата: Сб, 26.12.2020, 22:58  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

да это гнусные боты-спамеры форум засирают. Может админам ужесточить регистрацию на форуме, типа при регистрации побольше профильных вопрос-ответов на закон Ома, электроники и т.п. Сразу леваки-рекламщики-казиношники пошли бы по боку...
Zelenadmh Дата: Сб, 08.07.2023, 03:39  |                                                                                                                Сообщение # 14
Группа: Заблокированные
Ранг:  Начал соображать
Сообщений: 19
Репутация: -3   ±
Замечания:   ±
На сайте с 26.11.2020

Статус: Offline

Привет друзья!

Заправка картриджей Минск – это скрупулезная и ответственная работа, так как от нее зависит рабочий процесс всей компании или распечатка важного документа. Малейшая ошибка или недоделка приведет к перебоям в работе заказчика, и соответственно к потере нашей репутации и прибыли. Для нас на первом месте стоит репутация, которую мы заработали нелегкими и долгими годами труда. Поэтому выполняя очередной заказ на заправку принтера или ксерокса, мы думаем о клиенте и с полной ответственностью можем гарантировать как качество, так и быстрое исполнение работы.Заявку на вызов Вы можете оставить как на сайте, так и по телефону. Так же в Online чате сбоку. Наш оператор обговорит удобное для Вас время, и наши специалисты прибудут точно в срок. Качество наших работ всегда на высшем уровне, так как у нас работает лучшая команда профессионалов!Рады предложить нашим клиентам:Заправка картриджей с выездом на дом и офис.Ремонт и восстоновление картриджей.Прошивка любого лазерного принтера.Настройка принтера (wi-fi, установка драйверов на компьютер).Замена термопленки и роликов захвата бумаги.Купить картридж к любому лазерному картриджу.Для заказа мастера просто позвоните по указанным телефонам или оставьте завку, выбрав свою модель!
Наша контора занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:
1)заправка картриджей минск
2)hp заправка картриджей
3)заправка картриджа canon
4)brother принтер картридж
5)заправка xerox phaser
6)ремонт принтеров минск
Нам будет приятно видеть у нас на сайте НАЖМИТЕ ССЫЛКУ
Всегда рады помочь Вам!С уважением,КОПИМЕДИАГРУПП
чернила ink mate купить минск
чернила epson голубые
шестреня самсунг
тонер для brother dcp 1512r
чип hp 106a
чернила epson 103 оригинал
бушинг samsung
brother dcp 1612wr замените тонер
canon pixma g640 чернила
универсальный тонер samsung
чернила epson 210
заправка картриджа лазерного принтера samsung
oki hentai
kyocera 1035 фотобарабан
canon 470 чернила
oki drivers
kyocera пишет неоригинальный картридж
kyocera ecosys m2040dn замена картриджа
картриджи для принтера kyocera p2335d
замена фотобарабана samsung
тонер samsung 365
заправка тонером картриджей canon
kyocera p3050dn картридж
тонер static control kyocera
чернила для струйного принтера hp
ракель hp купить
kyocera taskalfa 2021 картридж
заправка черных картриджей
заправка картриджей hp рядом
купить оригинальные чернила canon pixma
тонер xerox 3010 купить
тонер colouring kyocera
монохром тонер xerox
чернила epson c13t00s34a
шестерня тефлонового вала 4200
ink mate набор чернил
тонер color hp lj купить минск
чип на картридж hp 106а
xerox 3052 фотобарабан
kyocera m2040dn отработанный тонер
canon mf4410 термопленка
фотобарабан lexmark купить
сброс тонера brother 2030
xerox phaser 6000 чипы
принтер oki
резиновый вал ricoh
oki c9655
заправка картриджей samsung цена
чернила для hp 122
hp tank 315 чернила


чистка вытяжки
vladka9911 Дата: Вс, 12.11.2023, 18:32  |                                                                                                                Сообщение # 15
Группа: Пользователи
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 12.11.2023

Статус: Offline

Согласен
Форум Picbasic.ru » Скорая помощь начинающим » Помощь в вопросах программирования » Неадекватный порт PORT.B (подскажите где туплю)
  • Страница 1 из 1
  • 1
Поиск: