Страница 1 из 1

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

Добавлено: Ср мар 17, 2010 23:19:46
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

 '*


В результате пропарился и без результатно.... не алгоритмический у меня склад ума господа =(( тут полюбому есть более простой выход до которого я немогу додуматься......

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

Добавлено: Чт мар 18, 2010 22:44:07
brown
На мой взгляд проще организовать прерывание по порту RB0/INT по переходу 0-1 или 1-0 и считать количество онных.

P.S. если занимаетесь PicBasicPro сходите сюда

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

Добавлено: Чт мар 18, 2010 23:13:04
Аlex
Зачем считать импульсы програмно, если МК может это сделать сам, аппаратно ? И времени полно будет на другие задачи, например на индикацию.
ЗЫ: Выкеньте 84-ый ПИК на свалку. И Пикбэйсик тудаже за запулите.

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

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

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

З.Ы. На 84 и делаю т.к. надо использовать остатки... после последней научки осталось 5 pic16f84 .... на изучение C и Assembler'a нехватает времени.. и руки недоходят...

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

Добавлено: Чт мар 18, 2010 23:23:49
Аlex
"Шаг в будущее".....
Улыбнуло :)))

Характер импульсов какой ? Максимальная частота, минимальная длительность импульса ....

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

Добавлено: Чт мар 18, 2010 23:46:39
Chiper
такс.... маленько расчитал....


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


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


конкретно о частоте нечё сказать не могу.... она у меня не константа :) частотомера под рукой нет =((

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

Добавлено: Чт мар 18, 2010 23:54:24
Аlex
Ну тогда терпимо.
Настраивай таймер примерно на 1мс, в прерывании проверяй порт на изменение (именно на изменение, а не просто проверяй его), там-же обновляй индикацию.
Задача проста.

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

Добавлено: Чт мар 18, 2010 23:58:59
Chiper
Пасибо! счас буду пробывать
как закончу и защищусь, то выложу работу целиком с фотками :)
а пока не могу))) идея инновационная :)) ещё сопрут

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

Добавлено: Пт мар 19, 2010 01:25:19
Chiper
:shock:
мда... ошютил на себе несовершенство бейсика.....
из всех имеющихся команд нет не одной которая проверяет состояние порта и если оно изменяется то вносит в переменную значение.....


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

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

Добавлено: Пт мар 19, 2010 09:25:25
Антон
Как то тоже собирал счётчик импульсов на пике. смысл был такой сначала задаём количество импульсов которое надо посчитать затем нажимаем кнопку старт, пик открывает транзюк который пропускает через себя импульсы. как токо отсчитает заданое количество закрывает транзистор и сообщает о завершении. исходник можно переделать как угодно если надо могу скинуть проект мплаба и протеуса

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

Добавлено: Пт мар 19, 2010 09:57:14
Аlex
короче..... может подскажите как можно описаную мной процедуру реализовать на ASSMBLER'e тупо вставлю асемберскую подпрограмму в код бейсика.......
Нужно опросить порт и сохранить значение до следующего опроса. А потом сравнивать с сохранённым.

Пример на Си:

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

Этот кусок кода нужно вызывать с определённой переодичностью.

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

Добавлено: Чт дек 30, 2010 10:06:22
amida

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

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