Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 5«12345»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » подсчет количества импульсов (не могу запустить count)
подсчет количества импульсов
timerlan Дата: Пн, 12.01.2015, 19:28  |                                                                                                                Сообщение # 31
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

Это снова я...

все ещё пытаюсь соединить две части кода, чтобы на выходе был такой алгоритм:

-нажимаем некую кнопку, butt
-на выходе sv0 появляется лог1, до тех пор, пока на входе sens не появится 3 раза пол. сигнал

цикл повторяется...

код:

TRISB = %00000110
ADCON1 = 6
TRISA = %111111

butt var PORTB.1
butt2 var PORTB.2
sens VAR PORTA.0
SV0 VAR PORTB.0
X VAR BYTE
CLEAR
PAUSE 100
PORTB =0
X = 0


main:
if butt=1 then gosub loop
if butt=0 then gosub exit
goto main

LOOP:
if butt=1 then
pause 100
high sv0
endif

IF sens=1 THEN
pause 80
X=X+1
ENDIF

IF X=3 THEN
GOSUB ACT
ENDIF

GOTO LOOP

ACT:
low SV0
RETURN

exit:
low sv0
goto main

Добавлено (12.01.2015, 19:28)
---------------------------------------------
у меня при нажатии butt это происходит, но при повторном нажатии-нет..пока не сбросишь МК..
Вот и вопрос-как этот алгоритм должен выглядеть? весь вечер бъюсь-ничего толкового....кнопку butt2 пытался встроить, чтобы независимо от прочих условий можно было подать лог1 на sv0 при нажатии на butt2, помогите составить древо цикла плиз....

ЯНДЕКС Дата: 12.01.2015
MiXaS Дата: Пн, 12.01.2015, 20:55  |                                                                                                                Сообщение # 32
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата timerlan ()
но при повторном нажатии-нет..пока не сбросишь МК..
 У меня большое подозрение, что у вас что–то с вашим конструктором. Потому как мой код у вас не работает, count, тоже не заработал, хотя работает без проблем, ваш код глючит. ищите собаку в конструкторе. Проверьте есть ли питание на mclr, может ножки где–то не пропаяны. хотя в вашем коде я ошибку нашел, метка exit заканчивается goto, а вызывается gosub.Думаю стек с ума сошел. замение на ретурн
timerlan Дата: Вт, 13.01.2015, 02:58  |                                                                                                                Сообщение # 33
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

у меня уже тоже такие мысли были, сегодня попробую макетку сделать....
ADMIN Дата: Вт, 13.01.2015, 03:04  |                                                                                                                Сообщение # 34
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1117
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Светодиод асегда будет выключен. Что при нажатой, что при отжатой кнопке sv0 сбрасывается в 0. Исправь. И еще: если подпрограмма вызывается gosub, то возвращаться нужно обязательно по return.
timerlan Дата: Пт, 16.01.2015, 17:37  |                                                                                                                Сообщение # 35
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

да, и выход с exit'а сделал через RETURN-эффект тот же..

Добавлено (13.01.2015, 18:07)
---------------------------------------------
ADMIN, а в каком месте sv0 постоянно сбрасывается в 0? чет не вижу..

Добавлено (13.01.2015, 18:37)
---------------------------------------------
чет ваще понять не могу откуда такая последовательность получается....

нажимаю для запуска butt, на выходе sv0, появляется плюс-мотор крутит, магнит 3 раза замыкает геркон на выводе sens, вывод sv0 в лог нуль,...это выполняется нормально...но почему дальше при нажатии butt нет такого же цикла?!!  причем на макетке видно, что PORTB.0 иедва заметно мерцает,когда нажимаешь butt, как будто прога сбрасывает этот вывод или не дает поменять состояние...

вот как этот цикл с условиями должен выглядеть?....

Добавлено (14.01.2015, 03:22)
---------------------------------------------
все оказалось просто!

вот в чем разница:

TRISB = %00000110
ADCON1 = 6
TRISA = %111111

butt var PORTB.1
butt2 var PORTB.2
sens VAR PORTA.0
SV0 VAR PORTB.0
X VAR BYTE
CLEAR
PAUSE 100
portb=0
X = 0


main:
if butt=1 then gosub loop
if butt=0 then gosub exit
goto main

LOOP:
if butt=1 then
pause 100
high sv0
endif

IF sens=1 THEN
pause 80
X=X+1
ENDIF

IF X=3 THEN
GOSUB ACT
ENDIF

goto loop

ACT:
low SV0
pause 200
x=0
RETURN

exit:
low sv0
return

Добавлено (14.01.2015, 03:22)
---------------------------------------------
напрочь забыл про то,что нужно обнулить переменную в конце!

Добавлено (16.01.2015, 17:36)
---------------------------------------------
это снова я...,подслажите, плиз, что не тау в этом коде

TRISB = %11111110

do var PORTB.1
res var PORTB.2
sens VAR PORTB.3
mot VAR PORTB.0
X VAR BYTE
CLEAR
PAUSE 100
portb=0
X = 0


chek:

if do=1 then gosub act
if do=0 then gosub sb

if res=1 then gosub act2
if res=0 then gosub sb
goto chek



act:


if do=1 then
high mot
endif


IF sens=1 THEN
pause 100
X=X+1
ENDIF

IF X=3 THEN
low mot
pause 200
x=0
ENDIF
goto act

act2:

high mot
pause 4000
low mot

return

sb:
pause 200
return

Добавлено (16.01.2015, 17:37)
---------------------------------------------
не хочет, зараза нормальнл обслуживать кнопки...

ivan_fd Дата: Пт, 16.01.2015, 19:07  |                                                                                                                Сообщение # 36
Группа: Модераторы
Ранг:  Специалист
Сообщений: 915
Репутация: 54   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Кнопки, это do и sense??? Схема включения?

Что именно не работает?


Меня все время преследуют умные мысли...но я быстрее!!!
timerlan Дата: Сб, 17.01.2015, 03:02  |                                                                                                                Сообщение # 37
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

да это кнопки и есть после выполнения цикла, вызванного одной кнопкой, другая  не работает и наоборот...
MiXaS Дата: Сб, 17.01.2015, 12:54  |                                                                                                                Сообщение # 38
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата timerlan ()
да это кнопки и естьпосле выплнениния цикла, вызванного одной кнопкой, другаяне работает и наоборот...
ого! Это на каком языке написано?!
ivan_fd Дата: Сб, 17.01.2015, 17:30  |                                                                                                                Сообщение # 39
Группа: Модераторы
Ранг:  Специалист
Сообщений: 915
Репутация: 54   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Схему подключения нарисуйте. А то ничего не понятно.

Меня все время преследуют умные мысли...но я быстрее!!!
ADMIN Дата: Сб, 17.01.2015, 20:01  |                                                                                                                Сообщение # 40
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1117
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Цитата timerlan ()
ADMIN, а в каком месте sv0 постоянно сбрасывается в 0? чет не вижу..
Ну вот:
Цитата timerlan ()
main:
if butt=1 then gosub loop
if butt=0 then gosub exit
goto main
А в подпрограммах loop и exit sv0 сбрасывается в 0.
timerlan Дата: Вс, 18.01.2015, 09:20  |                                                                                                                Сообщение # 41
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

вот примерная схема

Добавлено (18.01.2015, 08:43)
---------------------------------------------
S1 S2-кнопки do и res,  кнопка S3 -sens(это, собственно, и есть геркон)
реле уже и управляет электромотором..

Добавлено (18.01.2015, 08:45)
---------------------------------------------
ADMIN, как же тогда ещё вернуть этот выход порта в состояние нуль вольт?!))

Добавлено (18.01.2015, 09:08)
---------------------------------------------
вот так переделал код:

TRISB = %00001110

do var PORTB.1
res var PORTB.2
sens VAR PORTB.3
mot VAR PORTB.0
X VAR BYTE
CLEAR
PAUSE 100
portb=0
X = 0


chek:

if do=1 then gosub act
if do=0 then gosub sb

if res=1 then gosub act2
if res=0 then gosub sb
goto chek



act:


if do=1 then
high mot
endif

IF sens=1 THEN
pause 100
X=X+1
ENDIF

IF X=3 THEN
low mot
pause 200
x=0
ENDIF
goto act

act2:

high mot
pause 6000
low mot


goto chek

sb:

return

Добавлено (18.01.2015, 09:20)
---------------------------------------------
не могу понять, какого хрена он работает так:

нажимаю res-отрабатывает свою подпрограмму,
нажимаю do-тоже самое, вопросов нет..
нажимаю ещё раз res-ничего не происходить, подпрога вызываемая do теперь всегда нормально работает, вызываемая res больше не работает...в общем, то что вызывает res работает нормально до техпор, пока не будет запущена do, не вижу в упор, что всю программу заставляет так делать..

Прикрепления: 6809789.jpg(64Kb)
shaman Дата: Вс, 18.01.2015, 11:39  |                                                                                                                Сообщение # 42
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 5   ±
Замечания:   ±
На сайте с 07.11.2011

Статус: Offline

День добрый , Timerlan опишите как должна работать программа при нажатии на кнопки .
timerlan Дата: Вс, 18.01.2015, 12:25  |                                                                                                                Сообщение # 43
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

shaman, ну типа так: включаем устройство-мотор молчит, при нажатии кнопки do мотор включается, делает некоторое число(пусть 5, конкретно выяснится на реальном механизме) оборотов, останивливается, ждет дальнейших команд, если опять нажата do-тоже самое, если res то крутит вал некоторе время, чтобы магнит ушел от геркона sens , как то вот так
ivan_fd Дата: Вс, 18.01.2015, 12:39  |                                                                                                                Сообщение # 44
Группа: Модераторы
Ранг:  Специалист
Сообщений: 915
Репутация: 54   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

timerlan,  та программа, что Вы дали работает так как Вы написали. Вот Вы заходите в подпрограмму 
act:  а выхода то из нее нету. Вот потому то больше ничего не работает.

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


Меня все время преследуют умные мысли...но я быстрее!!!
shaman Дата: Вс, 18.01.2015, 12:41  |                                                                                                                Сообщение # 45
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 5   ±
Замечания:   ±
На сайте с 07.11.2011

Статус: Offline

А если к примеру кто то забудет выключить кнопку DO  и нажмет RES  то тогда что будет?????
Форум Picbasic.ru » Программирование МК » PicBasicPro » подсчет количества импульсов (не могу запустить count)
Страница 3 из 5«12345»
Поиск: