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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Тахометр на PIC16F84A
Тахометр на PIC16F84A
IREK-1984 Дата: Чт, 16.02.2012, 14:12  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

Всем привет! помогите пожалуйста устранить одну проблему в тахометре. в реальном устройстве при подаче сигнала например 55Гц индикатор показывает 55 примерно через секунду 56, потом 55 и т.д. для получения числа оборотов в минуту придется умножить на 60 и скачки умножатся на 60. с такой проблемой столкнулся в PBPro поэтому решил попробовать в протоне. вот код.

Device 16F84A
Xtal = 8

DIM Cifra AS Byte
DIM Time AS Word
DIM Imp AS Word
DIM IND AS Word
DIM Tcon AS word

Tcon=520
Time=Tcon

TRISB=%00000001
TRISA=%00000
PORTB=%11111110
OPTION_REG = %10000011
TMR0=5
INTCON = %10110000
DELAYMS 500

On Interrupt Goto myint

START:

Cifra=IND DIG 0 : PORTA=%001 : GOSUB CATOD : DELAYMS 2 : PORTA=%000

IF IND<10 THEN krug

Cifra=IND DIG 1 : PORTA=%010 : GOSUB CATOD : DELAYMS 2 : PORTA=%000

IF IND<100 THEN krug

Cifra=IND DIG 2 : PORTA=%100 : GOSUB CATOD : DELAYMS 2 : PORTA=%000

krug:

GOTO START

CATOD:
PORTB = lookup Cifra,[2,158,36,12,152,72,64,30,0,8] : RETURN

myint:
DISABLE
IF INTCON.1=1 THEN
Imp=Imp+1
INTCON.1=0
endif

if INTCON.2=1 then
Time = Time - 1
if Time = 0 then
Time = Tcon
IND=Imp
Imp=0
endif
TMR0=5
INTCON.2=0
endif

Resume


Радиоэлектроника
Сообщение отредактировал IREK-1984 - Чт, 16.02.2012, 14:14
ЯНДЕКС Дата: 16.02.2012
ADMIN Дата: Чт, 16.02.2012, 14:50  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Хотелось бы лицезреть комментарии. А также алгоритм, по какому строилась программа. А вообще, лучше для этой цели использовать 16F628, в котором есть модуль захвата/сравнения. На главной странице сайта есть пример работы с ним
IREK-1984 Дата: Чт, 16.02.2012, 17:05  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

коментарии были, здесь они превратились во что то непонятное и я их стер. короче тут для счета импульсов используется прерывание по порту В 0, а для отсчета времени(1 секунда) прерывание по таймеру . число импульсов в секунду выводится на 3 разрядный 7сег. индикатор с общ. анодом.

Радиоэлектроника
ADMIN Дата: Чт, 16.02.2012, 17:17  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Есть проект в протеусе?
IREK-1984 Дата: Чт, 16.02.2012, 18:41  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

есть.

Добавлено (16.02.2012, 18:41)
---------------------------------------------
на протеусе чтобы индикатор показывал правильную величину надо уменьшить Tcon (типа константы отсчета времени), но это конечно не важно. я тут думал может как нибудь возможно выводить на дисплей не точное число импульсов, а среднее арифметическое, например приходят 2-3(или больше) результата , а на индикацию пойдет среднее из них. только не знаю как осуществить это.

Прикрепления: RPM1.dsn (67.0 Kb)


Радиоэлектроника
Klim Дата: Пт, 17.02.2012, 09:24  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Попробуй сделать по-человечески. т.е. Взять и выложить исходник с комментами в родном формате и проэкт в шпроте. Тогда будет гораздо проще разобраться и помочь, а то, глядя на код, я быстрее напишу собственную программу, чем буду разбираться в твоей. Сложного там ничего нету. А считать нужно действительно среднеарифметическое. Сделать несколько выборок, обсчитать и вывести на индикатор. Вообщем - выложи исходники - посмотрю.
И определись, тебе нужно разобраться как сделать или просто, чтоб работало. Если просто, чтоб работало - я тебе быстро накидаю. А таком виде как у тебя сделано оно работать не будет. При работе с прерываниями необходимо сохранять системные переменные командой Context Save и Context Restore. Для удобства пользуйся утилитой PHMPlugin . Она пол текста пропишет самостоятельно и без ошибок. Очень полезная утилита. Находится на сайте. Ссылка За нее автору руки целовать нужно.

Сообщение отредактировал Klim - Пт, 17.02.2012, 09:33
ADMIN Дата: Пт, 17.02.2012, 12:00  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Ну уж прямо-таки без ошибок? Есть там ошибки, сам находил. Все вот не могу собраться и засесть конкретно за новую версию, чтобы все пики (ну, не все, конечно, но побольше этой версии smile ) поддерживала
Klim Дата: Пт, 17.02.2012, 12:13  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Ну я пока не встречал там явных ошибок... Но прога реально помогает. Меньше писать надо кода, особенно новичку.
anatol Дата: Пт, 17.02.2012, 12:40  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Quote (ADMIN)
Ну уж прямо-таки без ошибок?

angry
А я то думал ну когда этот ГАД (автор т.е.) нарисует и для остальных ПИКов. Время уже много прошло - пора бы новые версии положить.

А если серьезно, то большое спасибо. Экономит много времени - особенно если "борешься" с МК время от времени. Какой бы уровень знаний не был - все равно забывается - и листать описания процов лень, а это ошибки на пустом месте.
Одним словом СПАСИБО.
IREK-1984 Дата: Пт, 17.02.2012, 14:24  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

вот сделал по человечески, надеюсь теперь все понятно.
хочу понять сам, не давно начал программировать с PBPro, этот язык сразу понравился, т.к. с детства увлекался Басиком. изучать сложные языки как Си, асм просто нет времени, ну и нет желания тупо повторять чужие конструкции, хочется сделать по своему. на счет протона мне сказали что он лучше и проще PBPro. Спасибо все кто помогает!!
Прикрепления: RPM1.rar (25.7 Kb)


Радиоэлектроника
Klim Дата: Пт, 17.02.2012, 14:30  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Посмотрел, сейчас попробую привести в порядок...

Ну для начала я привел все в более-мение божеский вид. Посмотри. Сейчас попробую разобраться в коде.
Прикрепления: RPM1.bas (3.1 Kb)

Сообщение отредактировал Klim - Пт, 17.02.2012, 14:38
ЯНДЕКС Дата: 17.02.2012
IREK-1984 Дата: Пт, 17.02.2012, 14:34  |                                                                                                                Сообщение # 12
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

а как пользоваться утилитой? я скачал ее, запустил, открылся протон, что дальше.

Радиоэлектроника
Klim Дата: Пт, 17.02.2012, 14:39  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

А дальше все просто... Там вроде все интуитивно понятно... Если я не ошибаюсь, где-то есть описание работы с этим плугом.
Посмотрел, запусти его, там естиь прекрасная встроенная справка на великом и могучем. smile

Сообщение отредактировал Klim - Пт, 17.02.2012, 14:40
IREK-1984 Дата: Пт, 17.02.2012, 14:47  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 05.02.2012

Статус: Offline

все понял. действительно полезная вещь. для новичков то что надо.

Радиоэлектроника
Klim Дата: Пт, 17.02.2012, 17:16  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Посмотрел код. Понял, что проще и быстрее будет написать заново. Если очень нужно, могу сегодня вечером накропать.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Тахометр на PIC16F84A
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: