Pic + энкодет - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic + энкодет
Pic + энкодет
MiXaS Дата: Чт, 25.11.2010, 18:18  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Доброго времени суток!

У кого-нибудь был опыт работы с энкодером??
Как его опрашивать? Может есть инструкция какая?

Ну и чтобы новую тему не создавать задам еще один вопрос: Кто-нибудь работал с Микрухой TDA 7318??
Заранее спасибо!!!

ЯНДЕКС Дата: 25.11.2010
brown Дата: Чт, 25.11.2010, 19:02  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Работал с ТДА7313... На сайте есть мой проект http://www.picbasic.ru/load/7-1-0-90 . Посмотрите должно помочь, так как между 13 и 18 , по моему, разница не большая.
А по оптическому энкодеру я давал пример здесь http://www.picbasic.ru/forum/5-568-1


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
MiXaS Дата: Пт, 03.12.2010, 11:51  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Спасибо!!! Ща гляну!!!

Добавлено (03.12.2010, 11.51.58)
---------------------------------------------
По энкодеру. http://www.picbasic.ru/forum/5-568-1
Использую механический энкодер (два контакта). по ссылке лежит код под протон, я его заточил под Basic pro и обнаружел не корректную работу. В одну строну(допустим в право) вращаю работает! В другую сторону Volume =00, сбрасывается в 0, снова круча в право 00,01,03...63. Уважаемый brown не могли бы Вы подсказать со схемой.

brown Дата: Пт, 03.12.2010, 19:52  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

У меня этот код работал, может что то напутали при переводе на РВР.
Схема простая: один контакт к PORTB.0, другой к PORTB.1 , третий - земля, корпус. И конечно должны включены внутренние резисторы подтяжки.
Посмотрел свои наброски - есть еще версия без прерывания.

;в начале проги запоминаем состояние порта.
bak_port= PORTB.0 'запомнить состояние порта валкодера
.......................

......................
'Опрос состояния валкодера
If bak_port=1 And PORTB.0=0 Then 'проверка перепада 1->0
If PORTB.1=1 Then 'проверка направления врашения
bak_port= PORTB.0
IF vol=63 Then exit
vol=vol +1
Else
bak_port= PORTB.0
IF vol=0 Then exit
vol=vol -1
EndIf
Else
bak_port= PORTB.0
EndIf
exit:
......................
......................


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
MiXaS Дата: Сб, 04.12.2010, 12:11  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Quote (brown)
один контакт к PORTB.0, другой к PORTB.1 , третий - земля, корпус.

Именно так и подключил, но только поставил два резистора, один на плюс и на порт В.0, другой на порт В.1.

Может в этом Косяк???

Quote (brown)
И конечно должны включены внутренние резисторы подтяжки.

Это выглядет так?? OPTION_REG.7=0

brown Дата: Сб, 04.12.2010, 13:01  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Если OPTION_REG.7=0 , то навесные резисторы можно убрать.
Покажите код, может там косяк.


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
MiXaS Дата: Сб, 04.12.2010, 15:01  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Хорошо! Сейчас попробую, а потом выложу код
MiXaS Дата: Сб, 04.12.2010, 16:58  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Блин!! Я уже мертвый!!! cool НЕ могу понять как работает код!!!
Вот код!

@ DEVICE pic16F877, HS_OSC ; Наверно стоит XT_OSC, а это не высокочастотный кварц
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
define OSC 20
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
'-------------------------------------------------------------------------------
' Vareables
'-------------------------------------------------------------------------------
Flag var Byte 'Переменная выбора
Klav var Byte 'Номер кнопки
row var Byte '
'===============================================================================
'------------------------------------------------------ -------------------------
' Инициализация
'-------------------------------------------------------------------------------
'@ device WDT_OFF

ADCON1 = 7 'Все порты цифровые
ADCON0.0 = 0 'АЦП выключен
SSPCON.5 = 0 'Модуль SSP выкл., порты цифровые
TRISB = %00000111 'Порты 0..3 на вход
OPTION_REG=%00001000'On pull-up PORTB,прерывания по спаду RB0/INT,
OPTION_REG.7=0 'пределитель перед WDT
TRISA = %00000 'На выход
TRISC = %00000000 'На выход
'INTCON.7=0 'Disable interapt
INTCON = %10010000 'Разрешение внешнего прерывания
'pause 100 ' Wait for LCD to startup
Cls ' Clear the LCD
'*******************************************************************************
' MAIN
'-------------------------------------------------------------------------------
' Опрос кнопок
'-------------------------------------------------------------------------------
Vol var Byte

Vol=50
On Interrupt goto intRB0
press:

For row=0 To 3
PORTB= (DCD (row +4))^$ff 'Установка порта № строка+4 в 0

If PORTB.3=0 Then
pauseus 20
If PORTB.3=0 Then
Klav=row
GoTo klaviatura
EndIf
EndIf
If PORTB.2=0 Then
pauseus 20
If PORTB.2=0 Then
Klav=row +4
GoTo klaviatura
EndIf
EndIf
Next row
GoTo press
'Обработка переменной клавиатуры
klaviatura:
Lcdout $Fe, 1, "number key=", DEC1 Klav
GoTo press

'-------------------------------------------------------------------------------
' Обработка внешнего прерывания по входу порта В0
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Disable 'Запрешение прерываний перед обработчиком
intRB0:
'INTCON = %00000000 'Запрет прерываний битами

If PORTb.1=1 Then
PAUSE 50
If Vol=63 Then vih

Vol=Vol + 1

else
IF vol=0 Then VIH
PAUSE 50
vol=vol -1
EndIF

'Сюда можно вставить тестовые команды
Lcdout $Fe, $C0, "Volume=", DEC2 Vol
Vih:
INTCON = %10010000 'Разрешение внешнего прерывания и сброс флага
Resume
Enable 'Разрешение прерываний после обработчика
'-------------------------------------------------------------------------------
End

Когда добавляю pause работает чуток стабильнее, но только в одну строну (в -), а в плюс работает рывками, то +2, то -2.

Даташит энкодера ниже.
Я уже все варианты подключения перепробовал, так как не могу понять как работает код. Последний, более ли менее рабочий: A-PORTB.0, C-GROUNG, B-PORTB.1

Прикрепления: Dataseet_.pdf(116Kb)
brown Дата: Сб, 04.12.2010, 19:46  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Quote (MiXaS)
более ли менее рабочий: A-PORTB.0, C-GROUNG, B-PORTB.1

Да, по даташиту так.
Единственное что приходит на ум: у меня оптика, у вас механика - т. е. присутствует дребезг контактов, что косвенно подтвеждается
Quote (MiXaS)
Когда добавляю pause работает чуток стабильнее

Значить нужно попробывать ввести антидребезговые паузы, как в фрагменте с клавой:
If PORTB.3=0 Then
pauseus 20
If PORTB.3=0 Then
или использовать оператор BUTTON
Но! по прерыванию PORTB.0 что делать?


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал brown - Сб, 04.12.2010, 19:59
ivan_fd Дата: Сб, 04.12.2010, 21:18  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Попробуйте подключить энкодер вот так:

Прикрепления: 9996726.gif(7Kb)


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Сб, 04.12.2010, 21:22
MiXaS Дата: Сб, 04.12.2010, 21:25  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Quote (brown)
Значить нужно попробывать ввести антидребезговые паузы, как в фрагменте с клавой: If PORTB.3=0 Then pauseus 20 If PORTB.3=0 Then или использовать оператор BUTTON Но! по прерыванию PORTB.0 что делать?

Я уже тоже думал использовать Button, но потом посчитал эту затею глупой. Если и Ваши мысли в этом направлении, то нужно попробовать.

А если использовать транзистор? На базу повесить энкодер, а на Порт коллектор??
Не подскажете, дребезг сгладится?? Или может конденсаторы 0,1 мкф на землю и на порт???

Добавлено (04.12.2010, 21.21.59)
---------------------------------------------

Quote (ivan_fd)
Попробуйте подключить энкодер вот так:

Что-то постер пустой

Добавлено (04.12.2010, 21.24.35)
---------------------------------------------
О!!! Наверно у меня с компом что-то!!
ivan_fd!! Спасибо!!

Добавлено (04.12.2010, 21.25.30)
---------------------------------------------
ivan_fd у Вас есть библиотеки на протеус?? Я в своем не нашел энкодер!!!

brown Дата: Сб, 04.12.2010, 21:53  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Стоит попробывать схему с конденсаторами.
http://www.picbasic.ru/forum/19-171-4964-16-1279645686 Ссылка на книгу, с которой вырезана страница
Прикрепления: encoder.djvu(37Kb)


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал brown - Сб, 04.12.2010, 22:32
ivan_fd Дата: Сб, 04.12.2010, 21:57  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote
ivan_fd у Вас есть библиотеки на протеус?? Я в своем не нашел энкодер!!!

В Протеусе нету Энкодера... cry


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Сб, 04.12.2010, 21:58
MiXaS Дата: Вс, 05.12.2010, 12:22  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Quote (brown)
Стоит попробывать схему с конденсаторами.

спасибо!! сейчас буду пробовать

Добавлено (05.12.2010, 01.50.00)
---------------------------------------------
Уважаемые brown и ivan_fd!!! Большое СПАСИБО!!!! За то, что не отавили мою тему без внимания и за АКТИВНУЮ ПОМОЩЬ!

Завтра подпаяю кондеры, отпишусь!!

Добавлено (05.12.2010, 12.22.19)
---------------------------------------------
Всё! Добавил кондеры, как показал ivan_fd, убрал pause 50 и дело пошло!

Резисторы не ставил, потому что включил подтягивающие резисотры.

Всем спасибо!

brown Дата: Вс, 05.12.2010, 13:24  |                                                                                                                Сообщение # 15
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

MiXaS, если заработало, то может протестите без прерывания - смотри пост №4.
Порт В.0 часто бывает занят под другие нужды с прерыванием, а так подцепляешь к другим свободным портам и ...


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал brown - Вс, 05.12.2010, 15:39
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic + энкодет
Страница 1 из 212»
Поиск: