Pic + энкодет
|
|
MiXaS |
Дата: Чт, 25.11.2010, 18:18 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Доброго времени суток! У кого-нибудь был опыт работы с энкодером?? Как его опрашивать? Может есть инструкция какая? Ну и чтобы новую тему не создавать задам еще один вопрос: Кто-нибудь работал с Микрухой TDA 7318?? Заранее спасибо!!!
|
|
|
|
brown |
Дата: Чт, 25.11.2010, 19:02 | Сообщение # 2 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Если OPTION_REG.7=0 , то навесные резисторы можно убрать. Покажите код, может там косяк.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
MiXaS |
Дата: Сб, 04.12.2010, 15:01 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Хорошо! Сейчас попробую, а потом выложу код
|
|
|
|
MiXaS |
Дата: Сб, 04.12.2010, 16:58 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Блин!! Я уже мертвый!!! НЕ могу понять как работает код!!! Вот код! @ 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
|
|
|
|
brown |
Дата: Сб, 04.12.2010, 19:46 | Сообщение # 9 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Попробуйте подключить энкодер вот так:
Сообщение отредактировал
ivan_fd - Сб, 04.12.2010, 21:22
|
|
|
|
MiXaS |
Дата: Сб, 04.12.2010, 21:25 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Стоит попробывать схему с конденсаторами. http://www.picbasic.ru/forum/19-171-4964-16-1279645686 Ссылка на книгу, с которой вырезана страница
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал
brown - Сб, 04.12.2010, 22:32
|
|
|
|
ivan_fd |
Дата: Сб, 04.12.2010, 21:57 | Сообщение # 13 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote ivan_fd у Вас есть библиотеки на протеус?? Я в своем не нашел энкодер!!! В Протеусе нету Энкодера...
Сообщение отредактировал
ivan_fd - Сб, 04.12.2010, 21:58
|
|
|
|
MiXaS |
Дата: Вс, 05.12.2010, 12:22 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
MiXaS, если заработало, то может протестите без прерывания - смотри пост №4. Порт В.0 часто бывает занят под другие нужды с прерыванием, а так подцепляешь к другим свободным портам и ...
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал
brown - Вс, 05.12.2010, 15:39
|
|
|
|