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

Статус: Offline

всем доброго времени суток! столкнулся с такой траблой-нужно посчитать количество импульсов на герконе за 3-4 секунды и когда нужное наберется-подать лог. 1 на акой либо вывод микроконтроллера.

вроде, команда COUNT как раз это и делает, но то ли я её синтаксис не пойму, то ли что-то не так делаю..в общем МК-16F877A, 4Мгц
и код:

W VAR BYTE
PORTB = %00000001

IN VAR PORTB.0
OUT VAR PORTB.7

MAIN:
COUNT IN, 3000, W

IF W = 4 THEN
HIGH OUT
ELSE
LOW OUT
ENDIF


GOTO MAIN

на входе in собственно, геркон(при замыкании дает полож. импульс), на out нужно повесить единицу при 4 импульсах за 3 секунды(это как минимум, вообще время не лимитировано), но у меня ничего не появляется на выходе, как не пробовал вариации с кодом, помогите примерчиком, плиз, кто победил когда-то....
ЯНДЕКС Дата: 03.01.2015
MiXaS Дата: Вс, 04.01.2015, 01:15  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Судя по–всему Вы новичок, поэтому бы еще несколько фото Вашей схемы. Но для начала, обратите внимание, что Вы не определили порт. TRISB = 1 я не нашел.
timerlan Дата: Вс, 04.01.2015, 06:36  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

MiXaS, да, спасибо, порт определил,
и переписал код так

W VAR BYTE
TRISB = %01111111

IN VAR PORTB.0
OUT VAR PORTB.7

PAUSE 200
CLEAR
LOW OUT

MAIN:
COUNT IN, 3000, W

IF W = 4 THEN
HIGH OUT
ELSE
LOW OUT
ENDIF


GOTO MAIN

контроллер подал признаки жизни, но как-то странно работает-не всегда срабатывает от 4-х нажатий подряд, если сработал, то PORTB.7 светится нескольо секунд и гаснет,дальше на вход реагирует только после сброса/перезапуска МК. отлаживаю на девелоп плате ql200, так что схемы особо и нет,да и из МК всего-то два порта используются

Добавлено (04.01.2015, 06:36)
---------------------------------------------
и ещё заметил-после 4-х нажатий выход OUT появляется с задержой на сеунду-две..

ADMIN Дата: Вс, 04.01.2015, 11:57  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Скорее всего не всегда получается ровно 4 нажатия, так как дребезг контактов дает, скорее всего больше импульсов. Я бы написал >=4
MiXaS Дата: Вс, 04.01.2015, 12:00  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Не вижу какой кварц стоит на плате и какой прописан в коде. Для проверки правильности тактовой частоты, пропишите define... на 4 МГц, напишите простой код мигания светодиода с периодом 10 секунд. И возьмите секундомер. Дальше, думаю, понятно что надо сделать. Честно говоря уже 2 года не использую этот компилятор, я перешел на протон, но там вроде, тоже нужно объявлять symbol in = PORTB.0, могу ошибаться, уточните! Вот еще вопрос, а чем импульсы формируете? Кнопкой? Вы уверены, что в течении 3 секунд наживаете 4 раза?

Добавлено (04.01.2015, 12:00)
---------------------------------------------
пока писал ответ, Максим опередил. Для чистоты эксперимента я обычно дисплей использую

timerlan Дата: Вс, 04.01.2015, 12:03  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

кварц на 4 Мгц, да по поводу сомнений в тактовой и работоспособности-и такой мигалкой часто проверяю макеты!))))

неужеди, частоту кварца, равную 4Мгцнужно объявлять?
MiXaS Дата: Вс, 04.01.2015, 12:16  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Думаю, через аппаратные прерывания было бы правильнее

Добавлено (04.01.2015, 12:08)
---------------------------------------------
В протоне у меня был печальный опыт, написано в инструкции, что по умолчанию 4 МГц, но работало криво, пока не прописал, что кварц на 4 МГц. Думаю нестабильная работа связана с рассинхронизацией кода и кнопики.

Добавлено (04.01.2015, 12:16)
---------------------------------------------
Я бы сделал через прерывание. Как только появляется сигнал на портб.0, идем в подпрограмму, и инкрементируем переменную w. а дальше как у вас и есть. проверка переменной, как только наполнилась, зажечь выход, обнуль потом. Ну можно еще допилить программую защиту от дребезга контактов, хотя на мой взгляд к этой проблеме нужно подходить комплексно: аппаратно и программно.

timerlan Дата: Вс, 04.01.2015, 12:29  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

MiXaS, может код, хоть каркасный накидать?? я никогда с прерываниями не работал, на PBP сам уже перетащу

буду премного благодарен
MiXaS Дата: Вс, 04.01.2015, 15:04  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

ща, комп запущу, а то с планшета замучаюсь
MiXaS Дата: Вс, 04.01.2015, 15:56  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Ну написал для Вас код и с моделировал в протеусе. Все работает, думаю ничего сложного нет. Читайте даташит, тем более что он есть на русском для Вашего камня
Прикрепления: Timerlan.dsn(84Kb) · TIMERLAN.hex(1Kb) · Timerlan.pbp(2Kb)
timerlan Дата: Пн, 05.01.2015, 14:05  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

ага, спасибо,MiXaS! сейчас попробую!

Добавлено (05.01.2015, 14:05)
---------------------------------------------
чето не хочет, щас буду ковыряться!

MiXaS Дата: Пн, 05.01.2015, 15:42  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

У меня в протеусе работает. залейте мой hex. У меня нет возможности в железе тестить
timerlan Дата: Вс, 11.01.2015, 16:53  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

да, именно хекс то я и заливал!..сейчас пробую разобраться, отпишусь в любом случае))

Добавлено (11.01.2015, 16:52)
---------------------------------------------
в, общем победил этот вопрос, но немного другим методом biggrin

Добавлено (11.01.2015, 16:53)
---------------------------------------------
сделано было так:

TRISB = %00000000
ADCON1 = 6
TRISA = %111111

BUTT VAR PORTA.0

SV0 VAR PORTB.0
SV1 VAR PORTB.1
SV2 VAR PORTB.2
SV3 VAR PORTB.3
SV4 VAR PORTB.4
SV5 VAR PORTB.5
SV6 VAR PORTB.6
SV7 VAR PORTB.7

X VAR BYTE

CLEAR
PAUSE 100

LOW SV0
LOW SV1
LOW SV2
LOW SV3
LOW SV4
LOW SV5
LOW SV6
LOW SV7

LOW PORTC.0

X=0

LOOP:



IF BUTT=1 THEN
PAUSE 90
X=X+1
ENDIF

IF X=1 THEN
PAUSE 90
HIGH SV0
ENDIF

IF X=2 THEN
PAUSE 90
HIGH SV1
ENDIF

IF X=3 THEN
PAUSE 90
HIGH SV2
ENDIF

IF X=4 THEN
PAUSE 90
HIGH SV3
ENDIF

IF X=5 THEN
PAUSE 90
HIGH SV4
ENDIF

IF X=6 THEN
PAUSE 90
HIGH SV5
ENDIF

IF X=7 THEN
PAUSE 90
HIGH SV6
ENDIF

IF X=8 THEN
PAUSE 90
HIGH SV7
ENDIF


IF X=8 THEN
HIGH PORTC.0
ENDIF

IF X=9 THEN
PAUSE 90
X=0
RETURN
ENDIF


GOTO LOOP

ADMIN Дата: Вс, 11.01.2015, 16:58  |                                                                                                                Сообщение # 14
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А теперь попробуй упростить.  Также заметил ошибку.... Оператор Return - куда он возвращает? Он там не нужен
timerlan Дата: Вс, 11.01.2015, 18:59  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 90
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

ну,по моему замыслу в начало программы..сейчас уточню,как он работает...

Добавлено (11.01.2015, 17:24)
---------------------------------------------
только попробовал через GOSUB и GOTO, не работает....ADMIN, а как тогда правильно будет сделать возврат в начало проги по выполнению условия?

Добавлено (11.01.2015, 18:59)
---------------------------------------------
насчет упростить-вижу только возможность применения PORTB=%00000000....

Форум Picbasic.ru » Программирование МК » PicBasicPro » подсчет количества импульсов (не могу запустить count)
Страница 1 из 512345»
Поиск: