Cчет импульсов
|
|
tolyan249 |
Дата: Чт, 11.10.2007, 14:14 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
198
Замечания:
±
На сайте с 11.10.2007
Статус:
Offline
|
Добрый день. Я только начинаю програмировать в Micro_studio или PICBASIC. Может кто поможет мне надо посчитать импульсы за 250ms и отправить это количество импульсов на com port, нашел что можно измерить длительность импульса,но длительность мне измерять не надо,мне надо посчитать именно их количество за период времени 250ms вот примерно что пытаюсь зделать,но ругаеться на SEROUT w var word izm_imp: w=0 pulsin 0,1,w serout 2,T2400,(w) pause 250 goto izm_imp
если знаешь,помоги.
|
|
|
|
ADMIN |
Дата: Чт, 11.10.2007, 17:07 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Объясню: в хелпе написано, что для использования более понятных выражений(T2400, N4800 и т.д.) нужно вставить строку INCLUDE "modedefs.bas". Сделайте это, в первую очередь и просмотрите этот файл в окне слева. Вы поймете, о чем я говорю. Там декларируются(объявляются) символьные обозначения, используемые в коде. Можно, конечно, написать вместо T2400 цифру 0, но так нагляднее, конечно. Это раз. Во-вторых, у вас переменная в инструкции serout заключена в круглые скобки, когда должны быть квадратные. Ничего не поделаешь, но в следующий раз будьте внимательней. В-третьих, эта команда считает как-раз ширину входного импульса, а не количество импульсов. Порекомендую вам команду COUNT. В-четвертых, в начале программы необходимо настроить порты микроконтроллера. Хоть команда serout и автоматом настраивает порт на выход, все равно, желательно объявлять порты в начале программы. Если вы начинающий, то самое время приучить себя правильно и красиво составлять программу. Code INCLUDE "modedefs.bas" w var word trisb=%00000001 ' RB0 - на вход, остальное - на выход izm_imp: w=0 COUNT portb.0, 250, w serout portb.2, T2400, [w] pause 250 goto izm_imp Кстати, рекомендую вместо цифр 0 и 2 указывать порт по имени. Это более наглядней, чем просто сухие цифры. Удачи.
Сообщение отредактировал
basicpic - Чт, 11.10.2007, 17:19
|
|
|
|
tolyan249 |
Дата: Пт, 12.10.2007, 13:55 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
198
Замечания:
±
На сайте с 11.10.2007
Статус:
Offline
|
Вопрос такой еще можно ли измерить ширину импульса вплоть до 1mks
если знаешь,помоги.
|
|
|
|
ADMIN |
Дата: Пт, 12.10.2007, 14:10 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
даже при кварце 20 МГц разрешение составит минимум 2 мкс.
|
|
|
|
DeveloperX |
Дата: Чт, 25.10.2007, 14:38 | Сообщение # 5 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
А если импульсы нужно считать постоянно? Например для вывода счетчика импульсов на дисплей? вот этот код зажигает светодиод и не тушит его после 10-ти импульсов Code Include "modedefs.bas"
SO con 0 ' Define serial out pin FI con 1 ' Define frequency input pin w var word
HIGH SO
izm_imp: w=0 COUNT FI, 1000, w if w>10 then led pause 250 goto izm_imp
led: LOW SO goto izm_imp и сможет ли 16F84 успевать посчитать имульсы с частотой ~333 Гц??? читал, то предел вычислений-25кГц для 4МГц кварца и 125кГц для 20Мгц. в мануале пишут, что фунция COUNT считает только импульсы, длина которых равна скважности (50%). это правда? Помогите плз...
Сообщение отредактировал
DeveloperX - Чт, 25.10.2007, 18:01
|
|
|
|
Yrok |
Дата: Чт, 25.10.2007, 18:08 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Привет!! 333Гц--это период следования примерно 3 милисек--никаких проблем чтобы посчитать--хоть при кварце 4МГц.(предел помоему 10 Микросекунд при таком кварце). Насчет скважности 50%--думаю что это бред--просто как пример приводилась такая скважность --считать так удобнее когда разбираешься.
|
|
|
|
DeveloperX |
Дата: Чт, 25.10.2007, 18:20 | Сообщение # 7 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
Quote (Yrok) 333Гц--это период следования примерно 3 милисек--никаких проблем чтобы посчитать--хоть при кварце 4МГц.(предел помоему 10 Микросекунд при таком кварце). Помогите плз с программой. Очень хочу разобраться! почему-то светодиод не гаснет. PULSEIN ловит импульсы, а COUNT по-видимому не хочет. Кстати схема такая: вентилятор от кулера проца трехпроводной. сигнальный провод подключил я к PORTB.1. и после включения вентилятора пытаюсь посчитать сделанные обороты.
Сообщение отредактировал
DeveloperX - Чт, 25.10.2007, 19:00
|
|
|
|
ADMIN |
Дата: Пт, 26.10.2007, 06:27 | Сообщение # 8 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
он и не будет его "тушить" после 10 импульсов, поскольку за секунду счета он насчитает 333 импульса. Посудите логически - у вас w постоянно будет равна 333. Лучше этот вопрос решить с помощью прерываний по RA4 на TMR0. Организуйте прерывание с TMR0, указав в настройках внешний генератор (вход RA4), на который и будут подаваться ваши импульсы. После каждого 10 импульса - прерывания. А дальше делайте что хотите. Удачи.
|
|
|
|
DeveloperX |
Дата: Пт, 26.10.2007, 09:42 | Сообщение # 9 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
basicpic, к сожалению я ещё не умею работать с таймерами и прерываниями... а логически: w больше 10 и тушим - по-моему верно? к тому же частота меняется от 0Гц до 333Гц. вообще-то мне нужно считать импульсы постоянно (от датчика скорости, вентилятора кулера) и выводить полученное количество на дисплей. подскажите пожалуйста текст программы, которая по-вашему мнению будет работать и описание схемы подключения. очень надо разобраться...
Сообщение отредактировал
DeveloperX - Пт, 26.10.2007, 09:45
|
|
|
|
Yrok |
Дата: Пт, 26.10.2007, 10:39 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Здравствуйте DeveloperX!!! Ваша программа вполне работоспособная!!! Я немного ее изменил--чтобы сделать более нагляднее--теперь светодиод начинает мигать при входящих импульсах >10 ниже текст программы Quote SO con 0 ' Define serial out pin FI con 1 ' Define frequency input pin w var word HIGH SO izm_imp: w=0 COUNT FI , 1000 , w if w>10 then led pause 250 goto izm_imp led: LOW SO pause 500 HIGH SO goto izm_imp Проверил в протеусе все работает. Есть некоторые мысли почему невыходит у вас: 1) На сигнальном проводе куллера--сигнал имеет не логическую 1 (около 5В) , а коммутируется на землю--тогда надо просто схему изменить 2) Вентилятор крутится слишком медленно <600 оборотов
|
|
|
|
DeveloperX |
Дата: Пт, 26.10.2007, 10:54 | Сообщение # 11 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
Quote (Yrok) 1) На сигнальном проводе куллера--сигнал имеет не логическую 1 (около 5В) , а коммутируется на землю--тогда надо просто схему изменить Подскажите какая схема должна быть при таком раскладе?
|
|
|
|
Yrok |
Дата: Пт, 26.10.2007, 11:40 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Нужно так сказать подтянуть вход к +5 В. Для этого нужно взять резистор от 2 до 10 кОМ--одним концом подключить к +5 В , а другим ко входу PortB.1--т.е. ко входу куда подаются импульсы.
|
|
|
|
DeveloperX |
Дата: Пт, 26.10.2007, 12:50 | Сообщение # 13 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
Yrok, basicpic, изменится ли схема или код программы для использования при считывании импульсов с датчика импульсов автомобиля ваз 2110(6-ти импульсный) для определения пройденного пути (одометра)?
|
|
|
|
Yrok |
Дата: Пт, 26.10.2007, 14:12 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Ну во первых--если на датчик идет один провод то как я тебе сказал с резистором придется делать во вторых--схема и алгоритм программы конечно очень далеки от идеала. Нужно входной буфер мастерить--чтобы фронт сигнала несмазывался, да и программу переделывать--ведь пока ты будешь выводить все это на экран импульсы небудут считаться. Я так понял хочешь бортовой комп смастерить--тогда посмотри здесь http://www.hondamotor.ru/board/index.php?showtopic=42852 Тут уже все готово--собирай , прошивай и наслаждайся. Сам такой собрал--очень доволен. А пики изучать тоже начал из-за желания самому написать--но нетак то просто все это--там много что нужно еще изучить.
Сообщение отредактировал
Yrok - Пт, 26.10.2007, 14:14
|
|
|
|
DeveloperX |
Дата: Пт, 26.10.2007, 15:47 | Сообщение # 15 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
149
Замечания:
±
На сайте с 25.10.2007
Статус:
Offline
|
Quote (Yrok) Нужно входной буфер мастерить--чтобы фронт сигнала несмазывался, да и программу переделывать--ведь пока ты будешь выводить все это на экран импульсы небудут считаться. до бортового компа далеко - хочу всё изучить по пикам в процессе измерения импульсов, температуры и т.д. я где-читал, что вывод осуществляется за 10usec. а это много меньше скважности даже при 333Гц (200 км/ч). или всё-таки обязательно буфер? что он из себя представляет?
|
|
|
|