Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Схемы » Расходомер


Расходомер

Сообщений 1 страница 12 из 12

1

Уважаемые форумчане!
Подскажите, как можно организовать подсчет количества импульсов в единицу времени. На сайте есть пример универсального модуля для работы с перефирией через ADC. Может подскажете как сделать модуль для подсчета импульсов (расходомер, спидометр, тахометр и т.д.)?

0

2

на форуме Bascom AVR нашел код

Код:
'JP duval  4/01/2005 -----------------------------------------------------------
' -----------------[flowmeter for ULM ultralight  aircrafts]-------------------
'what I know
' tank capacity 29 liters
' consumption for 1 hour about 6 or 7 litres
'the flowmeter DIGMESA FHKSC 932-8501give me 1800 pulses per litre
' 29*1800=52200 pulses available, for security we work only with 48000
'******************************************************************
' use of Int1 = PortD.3

'VCC-------------^^^^^^^---------portd.3
'                        R= 4.7K
$hwstack = 100  'only for version 1.11.7.7 and higher
$swstack = 80       'only for version 1.11.7.7 and higher
$framesize = 50    'only for version 1.11.7.7 and higher 
' -----[variables]----------------------------------------
Dim J As Byte , K As Byte , Flag As Bit
Dim Volume As Word , Calculating_volume As Word , Staying_volume As Word
Dim Barre As Word , Barre_number As Byte
Dim Tank As String * 8
Dim Diff_volume As Word
Dim Average As Byte , Total_average As Byte
Dim Seconde As Byte
Dim Ci As Long
'----[design of the bar]----------
Deflcdchar 5 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 4 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30
Deflcdchar 3 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28
Deflcdchar 2 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24
Deflcdchar 1 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16
Deflcdchar 0 , 32 , 4 , 6 , 3 , 24 , 12 , 4 , 32
Deflcdchar 6 , 32 , 4 , 12 , 24 , 3 , 6 , 4 , 32
' -------[ config ]-----------------------------------
'config must be writen on 1 line
Config Lcdmode = Port       ' config  4 bit
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Config Clock = Soft
Config Portb = Input       'for noise
Config Portd = Input
Config Int1 = Rising
Enable Interrupts
Enable Int1
On Int1 Suiteint1
Cursor Off , Noblink
'----[main]----------------------------------------------------------------------------------
'---initialisation-----------
Seconde = _sec
Volume = 48000       'nomber of pulse to count
Diff_volume = Volume       'for average
K = 0
Flag = 0
Cls
Locate 1 , 13 : Lcd "L/h"
' ----[lighting of the level bar]----------------------------------------
For J = 2 To 16
   Locate 2 , J : Lcd Chr(5)
Next

Do
        If Seconde <> _sec Then
'-------[instant consumption]---------------------------------
         Waitms 400
         Diff_volume = Diff_volume - Volume       '# between previous volume and now
         Average = Diff_volume
         Total_average = Average + Total_average       'add of Average
         Diff_volume = Volume       'for the next second
         Incr K       'for the  ponderation
         If K = 10 Then
             Ci = Total_average * 1000       ' CI= Instant Consumption
             'here I prever use word than single for calculation
             Ci = Ci / 1800       'transform in litre
             Ci = Ci * 360       'per hour
             Ci = Ci / 100       'formated
             Locate 1 , 1 : Lcd "                 "
             If Flag = 0 Then
              Tank = Str(ci)       'Tank is a string it is use as generic variable
               If Ci < 100 Then
                 Tank = Format(tank , "0.0")
                  Locate 1 , 10 : Lcd Tank
               Else
                 Tank = Format(tank , "00.0")
                  Locate 1 , 9 : Lcd Tank
                End If
               Locate 1 , 13 : Lcd "L/h"
             End If
             Total_average = 0 : K = 0       'initialisation after 10 seconds
         End If
 '------[volume staying inthe tank]---------------------------
         If Staying_volume = Volume Then Goto Encore       'security
         Calculating_volume = Volume / 180       'Transform in litre
        Tank = Str(calculating_volume)       'use of the string
        Tank = Format(tank , "00.0")
         Locate 1 , 16 : Lcd Chr(0)       ' a small change in right side of 1st line
         Locate 1 , 1 : Lcd "V:" ; Tank
          Waitms 400
          Locate 1 , 16 : Lcd Chr(6)       ' a small change in right side of 1st line
          Staying_volume = Volume       'initialisation for the next second
'------[ bargraph]------------------------------------------------
         Barre = Volume / 600       '1 bar =333 ml (checked)
           Barre_number = Barre Mod 5       'the owner character to display at the end of bargraph
           Barre = Barre / 5       'the number of full character to display
        Locate 2 , 1 : Lcd "R"
        If Barre > 1 Then
         For J = 2 To Barre
           Locate 2 , J : Lcd Chr(5)       'the full character
         Next
        Elseif Barre = 1 Then
           Locate 2 , 2 : Lcd Chr(5)
        Elseif Barre = 0 Then
               Flag = 1
               Locate 2 , 1 : Lcd "                "
               Waitms 300
               Locate 2 , 1 : Lcd "----RESERVE-----"
               Waitms 300

      End If
        '----[Usage of owner characters 5,4,3,1 bar]--------------------
         Barre = Barre + 1
         If Barre_number > 0 Then
             Locate 2 , Barre : Lcd Chr(barre_number)
         Else
             Locate 2 , Barre : Lcd " "       'owner character very special ? ! :-)
         End If
         If Volume < 1201 Then       'big alarm !
            Disable Int1
            Exit Do
         End If
Encore:
         Seconde = _sec
End If

Loop
Cls
Do
   Locate 2 , 1 : Lcd "                "
   Waitms 300
   Locate 2 , 1 : Lcd "----RESERVE-----"
   Waitms 300
Loop

End       'end program
'----------------------------------------------------------------------------------------

Suiteint1:       ' dйcrement on interruption-------------
Decr Volume
Return
Return

Здесь отсутствует кристал он mega 8. Когда ставлю частоту кварца 32768, при компиляции выскакивает ошибка.

0

3

Вот есть схема частотного расходомера, но не на баскоме. Можно ли это переветси на баском? Требуется вывод информации на Экран от сотового.

0

4

TAlex, а вы уверены, что она работает или нашли нечто похожее в инете и думаете, что подойдет?

0

5

RDW написал(а):

TAlex, а вы уверены, что она работает или нашли нечто похожее в инете и думаете, что подойдет?

Как утверждают авторы данных статей, то да. Но у меня код на баскоме не работает Ссылка

0

6

Хуже некуда рыться в чужом коде, особенно если обвязка/железо не копируете.
Сложного в подсчете импульсов - не вижу, быстрее бы сами разобрались под свои мощности и написали, за одно и Бэйсик изучили. ;)

0

7

http://uploads.ru/t/a/m/v/amvMT.jpg
http://uploads.ru/t/i/S/f/iSfgj.jpg

0

8

Ну и какие сложности? даже схема есть. 1800 импульсов на литр, между двумя импульсами утекает 1/1800 литра
Считаем время между двумя импульсами, делим (1/1800) на получившееся время, получаем мгновенный расход.
По прерыванию увеличиваем переменную, умножаем (1/1800) на переменную, получаем общий расход.
делим общее количество на общее время - получаем средний расход
Выводим все на LCD

Отредактировано demonizer (2012-05-11 20:12:50)

0

9

А почему код не компилируется?

0

10

Допиши в начале программы
$regfile = "m8def.dat"
И все скомпилируется

Размер кода 2,8kB
Демонстрационная версия BASCOM не скомпилирует более 2kB, кажется.

И второе, 32768 кварц подключается к XTAL1 и XTAL2, но не пишется $crystal = 32768 !!!
Он конфигурируется включением Config Clock = Soft и работает только на них.
Для работы программы в этом случае используется внутренний RC-генератор, он как раз и конфигурируется $crystal = [сколько-то там мегагерц]

0

11

demonizer написал(а):

Демонстрационная версия BASCOM не скомпилирует более 2kB, кажется.

Не более 4kB.

0

12

Ну, значит проблема в $crystal = 32768

0


Вы здесь » Программирование ATMEL в BASCOM. » Схемы » Расходомер