Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 15
  • 1
  • 2
  • 3
  • 14
  • 15
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Cчет импульсов (счет импульсов)
Cчет импульсов
tolyan249 Дата: Чт, 11.10.2007, 14:14  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 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


если знаешь,помоги.
ЯНДЕКС Дата: 11.10.2007
ADMIN Дата: Чт, 11.10.2007, 17:07  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Вопрос такой еще можно ли измерить ширину импульса вплоть до 1mks

если знаешь,помоги.
ADMIN Дата: Пт, 12.10.2007, 14:10  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

даже при кварце 20 МГц разрешение составит минимум 2 мкс.
DeveloperX Дата: Чт, 25.10.2007, 14:38  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 149
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Привет!!
333Гц--это период следования примерно 3 милисек--никаких проблем чтобы посчитать--хоть при кварце 4МГц.(предел помоему 10 Микросекунд при таком кварце).
Насчет скважности 50%--думаю что это бред--просто как пример приводилась такая скважность --считать так удобнее когда разбираешься.
DeveloperX Дата: Чт, 25.10.2007, 18:20  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 149
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

он и не будет его "тушить" после 10 импульсов, поскольку за секунду счета он насчитает 333 импульса. Посудите логически - у вас w постоянно будет равна 333. Лучше этот вопрос решить с помощью прерываний по RA4 на TMR0. Организуйте прерывание с TMR0, указав в настройках внешний генератор (вход RA4), на который и будут подаваться ваши импульсы. После каждого 10 импульса - прерывания. А дальше делайте что хотите. Удачи.
DeveloperX Дата: Пт, 26.10.2007, 09:42  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 149
Репутация: 1   ±
Замечания:   ±
На сайте с 25.10.2007

Статус: Offline

basicpic, к сожалению я ещё не умею работать с таймерами и прерываниями...
а логически: w больше 10 и тушим - по-моему верно?
к тому же частота меняется от 0Гц до 333Гц.
вообще-то мне нужно считать импульсы постоянно (от датчика скорости, вентилятора кулера) и выводить полученное количество на дисплей.
подскажите пожалуйста текст программы, которая по-вашему мнению будет работать и описание схемы подключения.
очень надо разобраться...

Сообщение отредактировал DeveloperX - Пт, 26.10.2007, 09:45
Yrok Дата: Пт, 26.10.2007, 10:39  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 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
Репутация: 1   ±
Замечания:   ±
На сайте с 25.10.2007

Статус: Offline

Quote (Yrok)
1) На сигнальном проводе куллера--сигнал имеет не логическую 1 (около 5В) , а коммутируется на землю--тогда надо просто схему изменить

Подскажите какая схема должна быть при таком раскладе?
ЯНДЕКС Дата: 26.10.2007
Yrok Дата: Пт, 26.10.2007, 11:40  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Нужно так сказать подтянуть вход к +5 В.
Для этого нужно взять резистор от 2 до 10 кОМ--одним концом подключить к +5 В , а другим ко входу PortB.1--т.е. ко входу куда подаются импульсы.
DeveloperX Дата: Пт, 26.10.2007, 12:50  |                                                                                                                Сообщение # 13
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 149
Репутация: 1   ±
Замечания:   ±
На сайте с 25.10.2007

Статус: Offline

Yrok, basicpic, изменится ли схема или код программы для использования при считывании импульсов с датчика импульсов автомобиля ваз 2110(6-ти импульсный) для определения пройденного пути (одометра)?
Yrok Дата: Пт, 26.10.2007, 14:12  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 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
Репутация: 1   ±
Замечания:   ±
На сайте с 25.10.2007

Статус: Offline

Quote (Yrok)
Нужно входной буфер мастерить--чтобы фронт сигнала несмазывался, да и программу переделывать--ведь пока ты будешь выводить все это на экран импульсы небудут считаться.

до бортового компа далеко - хочу всё изучить по пикам в процессе измерения импульсов, температуры и т.д.
я где-читал, что вывод осуществляется за 10usec. а это много меньше скважности даже при 333Гц (200 км/ч).
или всё-таки обязательно буфер? что он из себя представляет?
Форум Picbasic.ru » Программирование МК » PicBasicPro » Cчет импульсов (счет импульсов)
  • Страница 1 из 15
  • 1
  • 2
  • 3
  • 14
  • 15
  • »
Поиск: