Например TDA7294

Форум РадиоКот • Просмотр темы - помогите опросить энкодер
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 13:06:50

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 46 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 10, 2010 00:09:31 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
ooogo писал(а):
я сколько не мучался, пока кондюки по 0,1 мкФ не припоял к контактам энкодера, дребезг никак побороть не мог, но конечно при быстром вращении пропускает. Наверное самый хороший вариант - это валкодер из шаговика! :)

0,1 мкФ - дофига, у меня 0,01 мкФ и все работает. Конечно, неплохо бы знать, какой у тебя энкодер, у меня, например, 24 импульса на оборот. Скорость вращения прикинул - максимум 2 оборота в секунду буду крутить => tи > 5-10 мс. дребезг навскидку длится меньше миллисекунды. Надо постоянную времени выбрать больше времени дребезга, и хотя бы втрое меньше длительности импульса при макс. скорости вращения. У меги внутренняя подтяжка около 50 кОм, с кондерами 0,01 мкФ получается постоянная времени 0,5 мс - пока нормально работает.
И еще - если у тебя энкодер старый, снятый с убитого музцентра или микроволновки, наверняка контакты окислились, в этом случае у него не то что дребезг, там просто голимый неконтакт будет, который никакими программными ухищрениями не проймешь. Старый энкодер надо разобрать, протереть контакты ватной палочкой со спиртом и смазать WD-40, - будет как новый. Еще лучше смазать консистентной смазкой, но я к сожалению не знаю, какая подойдет для контактов, потому мажу вэдэшкой, с ней конечно износ несколько ускоряется :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 10, 2010 08:23:19 
Это не хвост, это антенна
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 20:51:02
Сообщений: 1306
Рейтинг сообщения: 0
у меня энкодер новый, но совсем китайский :) купил за 50 руб. для экспериментов.
Цитата:
0,1 мкФ - дофига, у меня 0,01 мкФ и все работает.
пробовал 0,01 визуально ориентируясь на ЖКИ чуть чуть хуже работает появляются глюки, при 0,1 мкФ глюков не видно, но видно пропуски при быстром вращении, наверное надо что-то среднее подбирать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 09:52:28 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
сделал опрос по перрыванию на RB6 (я пики програмирую)

void interrupt enc (void){

//прерывание по RB5-RB7
if ( RBIF ==1 ) { RBIF = 0;

if (RB1 == 1) enc_data++;
else {enc_data--; }

}} // конец обработки прерываний

так вот : этот код очень криво работает,то в + считает,то в - считает
пропускает некоторые щелчки энкодера
подскажите пожалуйсто,как его можно оптимизировать?
дребезг у меня подавляеться аппаратно,на выводах энкодера висят конденсаторы по 0,1мкф
спасибо :)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 10:31:11 
Это не хвост, это антенна
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 20:51:02
Сообщений: 1306
Рейтинг сообщения: 0
vovik15 писал(а):
сделал опрос по перрыванию на RB6 (я пики програмирую)

А прерывание по какому событию? должно быть на смену уровней
вот эта строчка что делает?
Код:
if ( RBIF ==1 ) { RBIF = 0;


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 10:41:12 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7212
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Судя по всему сбрасывает флаг прерывания. Но вот посмотрел код... vovik15, пожалуйста, почитайте внимательно первую страницу этой темы.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 14:17:06 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
ooogo писал(а):
vovik15 писал(а):
сделал опрос по перрыванию на RB6 (я пики програмирую)

А прерывание по какому событию? должно быть на смену уровней
вот эта строчка что делает?
Код:
if ( RBIF ==1 ) { RBIF = 0;

эта строчка сбрасавает флаг по прерыванию RB6


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 15:00:35 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
vovik15, сделайте примерно так (пример для энкодера подключенного к RB6,RB7):

Код:
void interrupt isr (void){
//...
if ( RBIF && RBIE ) {    //прерывание по RB4-RB7
if (!RB6){
enc_data++;
}
if (!RB7){
enc_data--;
}
RBIE = 0;        //Запрет прерываний от энкодера
RBIF = 0;
}
//...
}
void main (void){
//...
while (!(RB7 && RB6)){}    //Ожидание установки энкодера в "нейтраль"
__delay_ms(5);
RBIF = 0;
RBIE = 1;                         //Разрешение прерываний от энкодера
//...
}

Прерывание должно быть настроено на отрицательный фронт.
В общем случае в прерывании всегда нужно проверять не только флаг прерывания, но и бит разрешения! Иначе, если у Вас используется более одного источника прерываний, и какое-то из них запрещено, оно все равно будет обработано, если возникнет прерывание от другого источника. Обычно в пиках для прерываний делают такую конструкцию:
Код:
void interrupt isr (void){
if ( RBIF && RBIE ){
Rb_Handler();               //Обработчик RB4:RB7
return;
}
if ( T0IF && T0IE ){
Tmr0_Handler();           //Обработчик TMR0
return;
}
//... и т.д.
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 15:22:55 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 96
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4470
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Самый простой пример опроса - это вешаем первый выход энкодера на внешнее прерывание.
А второй выход на проверяемый пин. (к примеру PA6)
В обработчике прерывания сразу же проверяем вторую ногу и принимаем решение. Если на второй ноге есть ток, то значит выполняем одно действие (крутится в одну сторону), а если на ней тока нет, то принимаем другое действие (крутится в другую сторону)
Код:
INT_0:
in      r16,         SREG
push    r16
sbic    PinA,        6
rjmp    DECREMENT
inc     r17
pop     r16
out     SREG,        r16
reti
DECREMENT:
dec     r17
pop     r16
out     SREG,        r16
reti

Только вот дребезг надо будет кондёрами устранить.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 16:20:53 
Это не хвост, это антенна
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 20:51:02
Сообщений: 1306
Рейтинг сообщения: 0
vovik15 писал(а):
ooogo писал(а):
vovik15 писал(а):
сделал опрос по перрыванию на RB6 (я пики програмирую)

А прерывание по какому событию? должно быть на смену уровней
вот эта строчка что делает?
Код:
if ( RBIF ==1 ) { RBIF = 0;

эта строчка сбрасавает флаг по прерыванию RB6

разве в пиках флаг прерывания аппаратно не сбрасывается?
Ваш код тоже будет работать только настройте правильно событие вызывающее прерывание, оно должно быть по спадающему фронту.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 17:02:23 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
ooogo писал(а):
разве в пиках флаг прерывания аппаратно не сбрасывается?

Нет, не сбрасывается, т.к. вектор прерывания всего один, поэтому источник, вызвавший прерывание определяется программно, следовательно флаг прерывания тоже сбрасывать надо "вручную".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 17:47:00 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
stas00n писал(а):
vovik15, сделайте примерно так (пример для энкодера подключенного к RB6,RB7):

Код:
void interrupt isr (void){
//...
if ( RBIF && RBIE ) {    //прерывание по RB4-RB7
if (!RB6){
enc_data++;
}
if (!RB7){
enc_data--;
}
RBIE = 0;        //Запрет прерываний от энкодера
RBIF = 0;
}
//...
}
void main (void){
//...
while (!(RB7 && RB6)){}    //Ожидание установки энкодера в "нейтраль"
__delay_ms(5);
RBIF = 0;
RBIE = 1;                         //Разрешение прерываний от энкодера
//...
}

Прерывание должно быть настроено на отрицательный фронт.
В общем случае в прерывании всегда нужно проверять не только флаг прерывания, но и бит разрешения! Иначе, если у Вас используется более одного источника прерываний, и какое-то из них запрещено, оно все равно будет обработано, если возникнет прерывание от другого источника. Обычно в пиках для прерываний делают такую конструкцию:
Код:
void interrupt isr (void){
if ( RBIF && RBIE ){
Rb_Handler();               //Обработчик RB4:RB7
return;
}
if ( T0IF && T0IE ){
Tmr0_Handler();           //Обработчик TMR0
return;
}
//... и т.д.
}


ЭТОТ КОД К СОЖАЛЕНИЮ НЕ РАБОТАЕТ :( ХОТЯ И ЕОМПИЛИРУЕТЬСЯ
только что пи прошивал,проверял


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 17:52:26 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
прикрепите сюда вложением, посмотрим. И схему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 21:11:53 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
привожу исходный код и схему
индикация вызываеться из майна,и работает отлично,поэтому я не стал указывать ее на схеме, и убрал ее из кода


Вложения:
схема и прошивка.rar [42.25 KiB]
Скачиваний: 878
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Сб янв 22, 2011 23:14:35 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
как в этом проекте http://labkit.ru/html/tembrobloki?id=88 опрашивается ЧЕТЫРЕ энкодера. К сожалению исходников нет ((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Вт янв 25, 2011 10:31:15 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
stas00n писал(а):
ooogo писал(а):
разве в пиках флаг прерывания аппаратно не сбрасывается?

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

_________________
С уважением,
Виктор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Чт янв 27, 2011 04:10:54 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
vovik15, по идее должно работать, все правильно. У меня работает и в MPLAB SIM, и в протеусе. Проверь в реальном железе.


Вложения:
encod.zip [12.11 KiB]
Скачиваний: 841
main.c [1.03 KiB]
Скачиваний: 1098
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Чт янв 27, 2011 06:08:52 
Держит паяльник хвостом

Карма: 7
Рейтинг сообщений: 17
Зарегистрирован: Сб сен 11, 2010 17:32:42
Сообщений: 903
Рейтинг сообщения: 0
у себя сделал так
в главном цикле проверяется, если один из выводов энкодера сработал,ждем 1мс, приращиваем счетчик, при переполнении счетчика устанавиваем флаг нажатости ноги энкодера и наоборот, задержка при отпускании. может конечно много кода зато без дребезга. вот только очень быструю прокрутку конечно не обрабатывает :(

_________________
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Чт янв 27, 2011 15:55:53 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
огромное вам спаибо
ище вопрос: я слышал что для пик есть библиотека задержек
скажите пожалуйсто где ее взять,и как с ней работать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Чт янв 27, 2011 16:25:17 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
Какой компилятор у Вас? Смотрите примеры и мануал. обычно бывает что-то вроде delay.h, delay.c. Нужно подключить эти модули. В PICC все нужные модули подключаются через htc.h:
Код:
#include <htc.h>
#define _XTAL_FREQ            4000000
//...
__delay_ms(10);    // Задержка 10 мс
__delay_us(250);   // Задержка 250 мкс


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: помогите опросить энкодер
СообщениеДобавлено: Чт янв 27, 2011 16:36:49 
Опытный кот

Карма: 4
Рейтинг сообщений: 1
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Сообщений: 764
Рейтинг сообщения: 0
у меня компилятор hi tech 9.70


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 46 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y