Уважаемые форумчане!
Подскажите, как можно организовать подсчет количества импульсов в единицу времени. На сайте есть пример универсального модуля для работы с перефирией через ADC. Может подскажете как сделать модуль для подсчета импульсов (расходомер, спидометр, тахометр и т.д.)?
Расходомер
Сообщений 1 страница 12 из 12
Поделиться12012-05-10 11:07:27
Поделиться22012-05-10 11:30:34
на форуме 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, при компиляции выскакивает ошибка.
Поделиться32012-05-10 11:50:30
Вот есть схема частотного расходомера, но не на баскоме. Можно ли это переветси на баском? Требуется вывод информации на Экран от сотового.
Поделиться42012-05-10 18:35:53
TAlex, а вы уверены, что она работает или нашли нечто похожее в инете и думаете, что подойдет?
Поделиться52012-05-10 18:42:02
TAlex, а вы уверены, что она работает или нашли нечто похожее в инете и думаете, что подойдет?
Как утверждают авторы данных статей, то да. Но у меня код на баскоме не работает Ссылка
Поделиться62012-05-11 00:36:53
Хуже некуда рыться в чужом коде, особенно если обвязка/железо не копируете.
Сложного в подсчете импульсов - не вижу, быстрее бы сами разобрались под свои мощности и написали, за одно и Бэйсик изучили.
Поделиться82012-05-11 20:11:41
Ну и какие сложности? даже схема есть. 1800 импульсов на литр, между двумя импульсами утекает 1/1800 литра
Считаем время между двумя импульсами, делим (1/1800) на получившееся время, получаем мгновенный расход.
По прерыванию увеличиваем переменную, умножаем (1/1800) на переменную, получаем общий расход.
делим общее количество на общее время - получаем средний расход
Выводим все на LCD
Отредактировано demonizer (2012-05-11 20:12:50)
Поделиться92012-05-12 10:22:58
А почему код не компилируется?
Поделиться102012-05-12 10:53:03
Допиши в начале программы
$regfile = "m8def.dat"
И все скомпилируется
Размер кода 2,8kB
Демонстрационная версия BASCOM не скомпилирует более 2kB, кажется.
И второе, 32768 кварц подключается к XTAL1 и XTAL2, но не пишется $crystal = 32768 !!!
Он конфигурируется включением Config Clock = Soft и работает только на них.
Для работы программы в этом случае используется внутренний RC-генератор, он как раз и конфигурируется $crystal = [сколько-то там мегагерц]
Поделиться112012-05-12 10:59:22
Демонстрационная версия BASCOM не скомпилирует более 2kB, кажется.
Не более 4kB.
Поделиться122012-05-12 11:32:33
Ну, значит проблема в $crystal = 32768