реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Простейшая кнопка на PIC
TimR
сообщение Aug 31 2006, 07:26
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 7-06-06
Пользователь №: 17 852



Привет всем!!!
Пожалуйста помогите разобраться с ерундой. Программа - простейшая кнопка на PIC16F627,
создана в качестве обучаловки. Принцип такой: подаем внешний сигнал 5V на МК (провод естественно общий) на вывод 4 PortB и должен загорается светодиод на PortB,2.
Я уже пробовал задействовать и PortA, и с подтягивающими пробовал - ничего.
Как-то странно, видел много исходников, где "кнопка" делается именно по такому принципу.
В итоге, светодиод либо вообще не загорается, либо горит постоянно. help.gif

(Извиняйте за "нижний пробел" - его как будто нет)
;-----------------------------------------------------------------------------
стандартные установки OptionR, отключение ненужных модулей.
;---------------------------------------------------------------------------------------
Start________btfsc PortB,4 ; если присутствует высокий уровень то
____________goto hight ; переход на hight
____________goto low ; иначе на low
;------------------------------------------------------------
hight________bsf PortB,2 ; "зажечь" 2-й порт
____________call delay ; переход на подпрогу задержки
____________goto Start ; при возврате переход в режим сканирования
;-------------------------------------------
low_________bcf PortB,2 ;
___________ call delay
___________ goto Start
;-------------------------------------------
delay______ задержка........ 1сек
__________ return
;************************
end

Сообщение отредактировал TimR - Aug 31 2006, 07:36
Go to the top of the page
 
+Quote Post
NULL
сообщение Aug 31 2006, 07:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 27-05-05
Из: St.-P
Пользователь №: 5 462



Цитата(TimR @ Aug 30 2006, 21:26) *
;-----------------------------------------------------------------------------
стандартные установки OptionR, отключение ненужных модулей.


А порты на вход - выход настроены корректно?
Go to the top of the page
 
+Quote Post
m_y
сообщение Aug 31 2006, 15:10
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 21-02-05
Из: С-Петербург
Пользователь №: 2 780



Должен быть проинициализирован порт В - бит 4 вход, бит 2 выход в регистре TRISB - соответсвенно TRISB4 - 1, TRISB2 - 0
Go to the top of the page
 
+Quote Post
TimR
сообщение Sep 5 2006, 03:59
Сообщение #4





Группа: Новичок
Сообщений: 12
Регистрация: 7-06-06
Пользователь №: 17 852



Это все сделано. плюс к этому - отключены ненужные модули PICа
Вообще, хотел еще попробовать через модуль компараторов, но опять ничего: все делаю по даташиту но светодиод не горит - может дело в том что вход рассчитан на аналоговый сигнал?
Но просто "на вход" он должен работать.
Было еще так: для зажигания требовался не сигнал 5В, а "общий" - я палец прикладывал к клемме - и работает.
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Sep 5 2006, 06:28
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



;---------------------------------------------------------------------------------------
Start
_____clrwdt
_____btfsc PortB,4
_____bsf portb,2
_____btfss portb,4
_____bcf PortB,2
;
_____goto Start
;************************
end


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Alexsys
сообщение Sep 5 2006, 06:31
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 8-08-06
Из: Москва
Пользователь №: 19 398



Мне кажется дело вот в чем, опрос кнопки нужно производить в бесконечном цикле. При твоем варианте программа при запуске выполняется от начала до конца, после чего процессор ничего не будет делать т.к. вся записанная в него программа выполнена smile.gif . Чтобы сделать бесконечный цикл воткни в свою прогу комманду goto Start перед end.

Сообщение отредактировал Alexsys - Sep 5 2006, 06:34
Go to the top of the page
 
+Quote Post
vanner
сообщение Sep 5 2006, 07:31
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016



Покажи полный код своей программы, тогда можно будет что-то сказать.
Go to the top of the page
 
+Quote Post
upc2
сообщение Sep 5 2006, 09:33
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Вот так ваш код работает

LIST p=16F84 ; PIC16F844 is the target processor

#include "P16F84.INC" ; Include header file

CBLOCK 0x10 ; Temporary storage
pos
dc1
dc2
ENDC
LIST p=16F84 ; PIC16F844 is the target processor

#include "P16F84.INC" ; Include header file

CBLOCK 0x10 ; Temporary storage
ENDC

ORG 0
entrypoint goto start

ORG 4
intvector goto intvector

start clrw ; Zero.

movwf PORTB ; Ensure PORTB is zero before we enable it.
bsf STATUS,RP0 ; Select Bank 1
movlw 0xF0 ; Set port B bits 0-3 as outputs
movwf TRISB ; Set TRISB register.

bcf STATUS,RP0 ; Select Bank 0



;Main loop
loop
btfsc PORTB,4
goto bhight
goto blow

bhight
bsf PORTB,2 ;
call delay ;
goto loop ;

blow
bcf PORTB,2 ;
call delay;
goto loop;

delay movlw 18 ; Outer loop iteration count
movwf dc1
dl1 clrf dc2 ; Initialize inner loop
dl2 nop
nop
decfsz dc2,F
goto dl2
decfsz dc1,F
goto dl1
return

END


У моего компилятора были претензии к PortB и к именам low , hight
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
TimR
сообщение Sep 7 2006, 16:52
Сообщение #9





Группа: Новичок
Сообщений: 12
Регистрация: 7-06-06
Пользователь №: 17 852



Сначало Всем огромное спасибо!

=L.A.=, такой же код был написан с самого начала, но выходило все то же: при приближении пальца частота "загораний" светодиода увеличивалась.

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

Alexsys, возможно вы и правы, проверю.

upc2, спасибо. Ошибка, скорее всего, в неправильности моей электрической схемы (хорошо что Вы привели схему). А фишка с low и hight - это интересно, но у меня таких проблем не было.


Попробую с учетом всех предложений.
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Sep 9 2006, 05:16
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(TimR @ Sep 7 2006, 20:52) *
=L.A.=, такой же код был написан с самого начала, но выходило все то же: при приближении пальца частота "загораний" светодиода увеличивалась.


Патамушта надо ПОДВЕШИВАТЬ вход к питанию. Или внешним резистором или внутренним в ПИКе


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Мёбиус
сообщение Sep 12 2006, 06:25
Сообщение #11





Группа: Новичок
Сообщений: 2
Регистрация: 12-09-06
Пользователь №: 20 298



Цитата(=L.A.= @ Sep 9 2006, 08:16) *
Цитата(TimR @ Sep 7 2006, 20:52) *

=L.A.=, такой же код был написан с самого начала, но выходило все то же: при приближении пальца частота "загораний" светодиода увеличивалась.


Патамушта надо ПОДВЕШИВАТЬ вход к питанию. Или внешним резистором или внутренним в ПИКе


Типа ОФФ - просто встретил можно сказать знакомого - вот так бродишь по ИНЕТу и нет-нет да и наткнёшься на знакомый НИК. Привет =L.A.= от NSS (conference from www.microchip.ru) smile.gif
Go to the top of the page
 
+Quote Post
Atashi
сообщение Sep 12 2006, 12:31
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



Цитата(TimR @ Sep 7 2006, 20:52) *
=L.A.=, такой же код был написан с самого начала, но выходило все то же: при приближении пальца частота "загораний" светодиода увеличивалась.

у пиков есть одна пакость: при переключении одного бита сначала считывается состояние всего порта, потом внутрях переставляется бит, а после этого весь байт отправляется наружу.
так вот в Вашем порте Б имеется вход прерывания, из-за него может чепуха получаться. зафиксируйте его.

Сообщение отредактировал Atashi - Sep 12 2006, 12:32
Go to the top of the page
 
+Quote Post
Atashi
сообщение Sep 13 2006, 11:53
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



Цитата(Atashi @ Sep 12 2006, 15:31) *
Цитата(TimR @ Sep 7 2006, 20:52) *

=L.A.=, такой же код был написан с самого начала, но выходило все то же: при приближении пальца частота "загораний" светодиода увеличивалась.

у пиков есть одна пакость: при переключении одного бита сначала считывается состояние всего порта, потом внутрях переставляется бит, а после этого весь байт отправляется наружу.
так вот в Вашем порте Б имеется вход прерывания, из-за него может чепуха получаться. зафиксируйте его.

ps. однажды пришлось делать даже вот так: создать переменную, менять бит в ней, а потом отправлять. это чтоб избежать "паразитного" считывания.
от ошибок избавились!

Сообщение отредактировал Atashi - Sep 13 2006, 11:54
Go to the top of the page
 
+Quote Post
Денис v
сообщение Oct 12 2006, 16:14
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 5-08-06
Пользователь №: 19 348



Цитата(upc2 @ Sep 5 2006, 15:33) *
Вот так ваш код работает
...
У моего компилятора были претензии к PortB и к именам low , hight


А что это за симулятор? Какая программа делает такие красивые картинки?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016