Тахометр на PIC16F84A
|
|
IREK-1984 |
Дата: Чт, 16.02.2012, 14:12 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 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
|
|
|
|
ADMIN |
Дата: Чт, 16.02.2012, 14:50 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Хотелось бы лицезреть комментарии. А также алгоритм, по какому строилась программа. А вообще, лучше для этой цели использовать 16F628, в котором есть модуль захвата/сравнения. На главной странице сайта есть пример работы с ним
|
|
|
|
IREK-1984 |
Дата: Чт, 16.02.2012, 17:05 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 05.02.2012
Статус:
Offline
|
коментарии были, здесь они превратились во что то непонятное и я их стер. короче тут для счета импульсов используется прерывание по порту В 0, а для отсчета времени(1 секунда) прерывание по таймеру . число импульсов в секунду выводится на 3 разрядный 7сег. индикатор с общ. анодом.
Радиоэлектроника
|
|
|
|
ADMIN |
Дата: Чт, 16.02.2012, 17:17 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Есть проект в протеусе?
|
|
|
|
IREK-1984 |
Дата: Чт, 16.02.2012, 18:41 | Сообщение # 5 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 05.02.2012
Статус:
Offline
|
есть. Добавлено (16.02.2012, 18:41) --------------------------------------------- на протеусе чтобы индикатор показывал правильную величину надо уменьшить Tcon (типа константы отсчета времени), но это конечно не важно. я тут думал может как нибудь возможно выводить на дисплей не точное число импульсов, а среднее арифметическое, например приходят 2-3(или больше) результата , а на индикацию пойдет среднее из них. только не знаю как осуществить это.
Радиоэлектроника
|
|
|
|
Klim |
Дата: Пт, 17.02.2012, 09:24 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Попробуй сделать по-человечески. т.е. Взять и выложить исходник с комментами в родном формате и проэкт в шпроте. Тогда будет гораздо проще разобраться и помочь, а то, глядя на код, я быстрее напишу собственную программу, чем буду разбираться в твоей. Сложного там ничего нету. А считать нужно действительно среднеарифметическое. Сделать несколько выборок, обсчитать и вывести на индикатор. Вообщем - выложи исходники - посмотрю. И определись, тебе нужно разобраться как сделать или просто, чтоб работало. Если просто, чтоб работало - я тебе быстро накидаю. А таком виде как у тебя сделано оно работать не будет. При работе с прерываниями необходимо сохранять системные переменные командой Context Save и Context Restore. Для удобства пользуйся утилитой PHMPlugin . Она пол текста пропишет самостоятельно и без ошибок. Очень полезная утилита. Находится на сайте. Ссылка За нее автору руки целовать нужно.
Сообщение отредактировал
Klim - Пт, 17.02.2012, 09:33
|
|
|
|
ADMIN |
Дата: Пт, 17.02.2012, 12:00 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Ну уж прямо-таки без ошибок? Есть там ошибки, сам находил. Все вот не могу собраться и засесть конкретно за новую версию, чтобы все пики (ну, не все, конечно, но побольше этой версии ) поддерживала
|
|
|
|
Klim |
Дата: Пт, 17.02.2012, 12:13 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Ну я пока не встречал там явных ошибок... Но прога реально помогает. Меньше писать надо кода, особенно новичку.
|
|
|
|
anatol |
Дата: Пт, 17.02.2012, 12:40 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Quote (ADMIN) Ну уж прямо-таки без ошибок? А я то думал ну когда этот ГАД (автор т.е.) нарисует и для остальных ПИКов. Время уже много прошло - пора бы новые версии положить.
А если серьезно, то большое спасибо. Экономит много времени - особенно если "борешься" с МК время от времени. Какой бы уровень знаний не был - все равно забывается - и листать описания процов лень, а это ошибки на пустом месте. Одним словом СПАСИБО.
|
|
|
|
IREK-1984 |
Дата: Пт, 17.02.2012, 14:24 | Сообщение # 10 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 05.02.2012
Статус:
Offline
|
вот сделал по человечески, надеюсь теперь все понятно. хочу понять сам, не давно начал программировать с PBPro, этот язык сразу понравился, т.к. с детства увлекался Басиком. изучать сложные языки как Си, асм просто нет времени, ну и нет желания тупо повторять чужие конструкции, хочется сделать по своему. на счет протона мне сказали что он лучше и проще PBPro. Спасибо все кто помогает!!
Радиоэлектроника
|
|
|
|
Klim |
Дата: Пт, 17.02.2012, 14:30 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Посмотрел, сейчас попробую привести в порядок...
Ну для начала я привел все в более-мение божеский вид. Посмотри. Сейчас попробую разобраться в коде.
Сообщение отредактировал
Klim - Пт, 17.02.2012, 14:38
|
|
|
|
IREK-1984 |
Дата: Пт, 17.02.2012, 14:34 | Сообщение # 12 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 05.02.2012
Статус:
Offline
|
а как пользоваться утилитой? я скачал ее, запустил, открылся протон, что дальше.
Радиоэлектроника
|
|
|
|
Klim |
Дата: Пт, 17.02.2012, 14:39 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
А дальше все просто... Там вроде все интуитивно понятно... Если я не ошибаюсь, где-то есть описание работы с этим плугом. Посмотрел, запусти его, там естиь прекрасная встроенная справка на великом и могучем.
Сообщение отредактировал
Klim - Пт, 17.02.2012, 14:40
|
|
|
|
IREK-1984 |
Дата: Пт, 17.02.2012, 14:47 | Сообщение # 14 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 05.02.2012
Статус:
Offline
|
все понял. действительно полезная вещь. для новичков то что надо.
Радиоэлектроника
|
|
|
|
Klim |
Дата: Пт, 17.02.2012, 17:16 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Посмотрел код. Понял, что проще и быстрее будет написать заново. Если очень нужно, могу сегодня вечером накропать.
|
|
|
|