Счётчик импульсов, запарка с программой на PicBasicPro

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

Всем доброе время суток...
прошу помощи....

Собираю девайс на базе Pic16f84 ... а именно счётчик импульсов с динамической индикацией на 7 сегментном 3х разрядном идикаторе ....

Задача девайса:
Проверять состояние порта RA4 и считать кол-во поступивших на него лог. 1 и выводить на индикатор кол-во импульсов...


Программу вроде как написал..


Код: Выделить всё

Segments Var   PORTB
Digits   Var   PORTA

i   Var   Byte
n   Var   Byte
Value   Var   Word
ii    Var   Word

 

   TRISB = $80      ' Set segment pins to output
   TRISA = $f0      ' Set digit pins to output
     Value = 0
mainloop

    For ii = 0 To 9999
        GoSub display    ' Display the value
'*
        if porta.4 = 1 then Value = Value + 1
        if Value = 9999 then Value = 0
                 Next ii
                 GoTo mainloop        ' Do it forever
'*

' Subroutine to send the number (0 - 9999) in Value to LEDs
display
   For i = 0 To 3      ' Loop through 4 digits
      n = Value Dig i   ' Get digit to display
      GoSub display1   ' Display the digit
      Pause 1      ' Leave it on 1 millisecond
   Next i         ' Do next digit
   Return


' Surboutine to display one digit on LED
'  i = digit number
'  n = number to display
display1
   Digits = $ff      ' All digits off to prevent ghosting

   ' Convert binary number in n to segments for LED
   Lookup n, [$40, $79, $24, $30, $19, $12, $02, $78, $00, $10], Segments

   ' Set digit pin i to 0 (on) and the rest of the pins to 1 (off)
   Digits = ~Dcd i

   Return


Но косяк в том, что получилось так что она считает не кол-во лог. 1 , а тупо выполняет цикл For ii = 0 To 9999 когда на порте весит 1, и получается тупо секундомер :))

Пробовал много разных вариантов.... результат тот-же


вот 1 из них

Код: Выделить всё

 ' дополнительные переменные
tmr0 VAR Word
tmr1 VAR Word

' изменение кода взятого в " '*    '* "
'*
    tmr1 = 0
 
       if Value = 9999 then Value = 0
       if porta.4 = 1 then tmr1 = 1
        if porta.4 = 1 then bb
 GoTo mainloop
bb:

        if tmr1 - 0 = 1 then Value = Value + 1
        Next ii
                 GoTo mainloop        ' Do it forever

 '*


В результате пропарился и без результатно.... не алгоритмический у меня склад ума господа =(( тут полюбому есть более простой выход до которого я немогу додуматься......
Аватара пользователя
brown
Родился
Сообщения: 18
Зарегистрирован: Вт фев 03, 2009 23:59:19

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение brown »

На мой взгляд проще организовать прерывание по порту RB0/INT по переходу 0-1 или 1-0 и считать количество онных.

P.S. если занимаетесь PicBasicPro сходите сюда
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Аlex »

Зачем считать импульсы програмно, если МК может это сделать сам, аппаратно ? И времени полно будет на другие задачи, например на индикацию.
ЗЫ: Выкеньте 84-ый ПИК на свалку. И Пикбэйсик тудаже за запулите.
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

ех.. долго объяснять... аппаратный вариант уже исключается, весь прибор в сборе... печатную плату переделывать нет смысла. вешать сопли проводниками тоже не желательно...
а через 3 недели Всероссийская конференция "Шаг в будущее"..... прибор к этому времени надо закончить....

по этому из сложившейся ситуации единственный выход - программный... надо Мозги доработать до выполнения поставленной задачи.....

З.Ы. На 84 и делаю т.к. надо использовать остатки... после последней научки осталось 5 pic16f84 .... на изучение C и Assembler'a нехватает времени.. и руки недоходят...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Аlex »

"Шаг в будущее".....
Улыбнуло :)))

Характер импульсов какой ? Максимальная частота, минимальная длительность импульса ....
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

такс.... маленько расчитал....


impuls.jpg
(32.4 КБ) 494 скачивания


минимальная длительность импульса - 16мс
максимальная длина импульса - 400мс


конкретно о частоте нечё сказать не могу.... она у меня не константа :) частотомера под рукой нет =((
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Аlex »

Ну тогда терпимо.
Настраивай таймер примерно на 1мс, в прерывании проверяй порт на изменение (именно на изменение, а не просто проверяй его), там-же обновляй индикацию.
Задача проста.
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

Пасибо! счас буду пробывать
как закончу и защищусь, то выложу работу целиком с фотками :)
а пока не могу))) идея инновационная :)) ещё сопрут
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

:shock:
мда... ошютил на себе несовершенство бейсика.....
из всех имеющихся команд нет не одной которая проверяет состояние порта и если оно изменяется то вносит в переменную значение.....


короче..... может подскажите как можно описаную мной процедуру реализовать на ASSMBLER'e тупо вставлю асемберскую подпрограмму в код бейсика.......
Аватара пользователя
Антон
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вт июл 25, 2006 06:33:54
Откуда: Казахстан, Алматы
Контактная информация:

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Антон »

Как то тоже собирал счётчик импульсов на пике. смысл был такой сначала задаём количество импульсов которое надо посчитать затем нажимаем кнопку старт, пик открывает транзюк который пропускает через себя импульсы. как токо отсчитает заданое количество закрывает транзистор и сообщает о завершении. исходник можно переделать как угодно если надо могу скинуть проект мплаба и протеуса
[url=http://ne-kurim.ru/schetchik-nekureniya/][img]http://ne-kurim.ru/ncounter/16927-4.png[/img][/url]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Аlex »

короче..... может подскажите как можно описаную мной процедуру реализовать на ASSMBLER'e тупо вставлю асемберскую подпрограмму в код бейсика.......
Нужно опросить порт и сохранить значение до следующего опроса. А потом сравнивать с сохранённым.

Пример на Си:

//************************************************
a=RA0; // читаем бит порта
if(!b && a) // Если b==0 (предыдущее значение) И a==1 (текущее значение)
{
...... // Делаем что-то ...
}
b=a; // сохраняем считаное значение
//************************************************

Этот кусок кода нужно вызывать с определённой переодичностью.
Аватара пользователя
Chiper
Грызет канифоль
Сообщения: 251
Зарегистрирован: Ср окт 07, 2009 18:37:22
Откуда: BMSTU

Re: Счётчик импульсов, запарка с программой на PicBasicPro

Сообщение Chiper »

Всем спасибо, я уже давно закончил этот проект
http://picbasic.ru/publ/stati_i_proekty ... /10-1-0-66
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»