Например TDA7294

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





Текущее время: Ср апр 17, 2024 01:39:07

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


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



Начать новую тему Ответить на тему  [ Сообщений: 90 ]    , 2, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 14:40:49 
Встал на лапы

Зарегистрирован: Пт мар 04, 2011 13:06:42
Сообщений: 108
Откуда: Украина, Ахтырка
Рейтинг сообщения: 0
Я знаю что МК "тупорылее" от логики. 595 может до 100мгц работать.
Меня интересует какая тактовая будет от МК если тактовый генератор на 4мгц.
Если память не изменяет мне то AVR изменяет состояние порта за 2такта и еще ~ 2такта теряется на циклы.
по подсчетам F SPI = ~1мгц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 14:57:54 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13492
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Могу измерить дома от 20.
Код на асме. Вот:
Спойлер
Код:
;----------
;  Перекодировка и вывод данных на индикаторы
;  Первым идёт последний бит большого индикатора
;  Направление данных  |  Адреса в буфере
;                      |
;  >---------->       |
;  |                   |
;  ^----------<       |  08   09   0A   0B   0C   0D
;              |       |
;  >----------^       |  00 01 02 03     04 05 06 07
;----------
print:
  ; первые 6 байт читаем без инверсии, остальные инвертируем
  ldi r16,14                      ; Счетчик байт
  ldiX display_buf+14             ; В X адрес буфера индикаторов (на конец)
  lds r19,point_maskH             ; Берём маски точек
  lds r20,point_maskL
  pr0:
    ld r17,-X                     ; Читаем байт и декрементируем указатель X
    ldi2Z digits                  ; В Z указатель на таблицу перекодировки
    add16Z r17                    ; Смещение по таблице перекодировки
    lpm r17,Z                     ; Читаем "рисунок" символа
    mov r21,r19                   ; Накладываем маску с точками
    andi r21,0b10000000
    or r17,r21
    cpi r16,9                     ; Прошли 6 символов?
    brcc pr1
      com r17                     ; Если да - инвертируем
    pr1:
    ldi r18,8                     ; Счетчик битов
    pr2:
      cbi ds_port,ds_bit          ; Линию данных в 0
      rol r17                     ; Бит в C
      brcc pr3                    ; Если бит = 0 перепрыгиваем
        sbi ds_port,ds_bit        ; Иначе линию в 1
      pr3:
      push_sh_cp                  ; Сдвиговый импульс
      dec r18
      brne pr2                    ; Не прошло 8 бит? Зацикливаем
    rol r20                       ; Сдвигаем временные регистры с масками
    rol r19                       ; с учётом переноса
    dec r16                       ; Не прошло 14 байт? Зацикливаем
    brne pr0
  push_st_cp                      ; Все данные прошли, дёргаем защёлку
ret


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 15:02:55 
Встал на лапы

Зарегистрирован: Пт мар 04, 2011 13:06:42
Сообщений: 108
Откуда: Украина, Ахтырка
Рейтинг сообщения: 0
Даааа , тем кто "волочит" в АСМе надо памятник поставить :)
Ничего к сожалению в нем не понимаю...

Начал программить не давно (несколько лет) и то сразу на Си.
Оооочень трудно далось мне. Мозги видать в другую сторону заточены.
Знаю что АСМ на порядок быстрее от Си. Поэтому сравнение не совсем корректное, но все равно ооочень интересно на какой частоте у Вас работает SPI. Думаю не выше F/4


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 15:11:15 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13492
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да простые циклы он так же обработает.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 15:16:34 
Открыл глаза

Зарегистрирован: Чт июл 05, 2012 09:40:46
Сообщений: 61
Рейтинг сообщения: 0
У меня так сделано (CVAVR)


Код:
#define Enc PINC.3    // ВХОД енкодера
 
 // INT1
               
interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА

      if (Enc==0) 
        {
             if (Enc==0)
             {
              ваш код (у меня if(OCR0<235) {OCR0+=1;}  )
               
             }
         }     

      if (Enc==1) 
        {
             if (Enc==1)
             {
             ваш код ( у меня   if(OCR0>2) {OCR0-=1;})
               
             }
         }     
   
}



энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод)


защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная.

INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости.


Последний раз редактировалось ketrosi Ср сен 05, 2012 02:25:13, всего редактировалось 1 раз.

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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт сен 04, 2012 19:10:51 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13492
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Измерил. Идут посылки по 8 бит с небольшими паузами (пауза из-за условий для инверсии, смотрите код). Между группами, после того, как передадутся 112 бит, паузы довольно большие (10-20 мс). Выглядит так (ch1 - такт, ch2 - данные):

Изображение

Вот тактовый импульс подробно, довольно длительный:

Изображение

Измерим:

Изображение

Импульс ровно 150нс.
Это вас интересовало?


Реализовано так:
Код:
  sbi sh_cp_port,sh_cp_bit #Выставили бит на порт
  nop #Пропустили такт
  cbi sh_cp_port,sh_cp_bit #Сняли бит


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 00:46:37 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Ооооо..... Не думал что столько вариантов обработки енкодера. А я тут на днях тоже замутил процедурку, робе нормально.....
Спойлер
Код:
//Глобальные переменные
volatile static char EncValue = 0;                /*значение увеличения\уменьшения енкодера*/



//обработка прерывания, частота вызова 1000 Гц. (или циклический вызов из основной программы)
#define EncoderPort PINC                        /*порт чтения енкодера*/
#define EncoderPin0 (1<<3)                        /*пины чтения енкодера*/
#define EncoderPin1 (1<<4)                        /*пины чтения енкодера*/
#define EncLockCntrMax 3                    /*количество циклов опроса для фиксации шага енкодера (2-10) */ 

void encoder (void)
{
    static unsigned char EncLockCntr0 = 0;    //счетчик защелки канала 0
    static unsigned char EncLockCntr1 = 0;    //счетчик защелки канала 1

    static unsigned char EncFlags = 0;        //байт флагов
    #define bEncLock0    (1<<0)                /*бит защелки фазы 0 енкодера*/ 
    #define bEncLock1    (1<<1)                /*бит защелки фазы 1 енкодера*/ 

    //обработка фазы 1
    if (EncoderPort & EncoderPin0){            //контакт разомкнут (лог 1)?
        if (EncLockCntr0 < EncLockCntrMax)    //защелка досчитала?
            EncLockCntr0 ++;                //инкремент защелки
        else
            EncFlags 
|= bEncLock0;            //установить бит защелки
    }    
    else
{                                    //контакт разомкнут
        if (EncLockCntr0)                    //защелка обнулилась?
            EncLockCntr0 --;                //декремент защелки
        else
            if 
(EncFlags & bEncLock0){        
                EncFlags 
&= ~bEncLock0;        //сбросить бит защелки
                if (~EncFlags & bEncLock1)    //если второй канал уже обнулен, обновить значение глобального счетчика
                    EncValue --;            
            
}
    }

    //обработка фазы 2
    if (EncoderPort & EncoderPin1){            //контакт разомкнут (лог 1)?
        if (EncLockCntr1 < EncLockCntrMax)    //защелка досчитала?
            EncLockCntr1 ++;                //инкремент защелки
        else
            EncFlags 
|= bEncLock1;            //установить бит защелки
    }    
    else
{                                    //контакт разомкнут
        if (EncLockCntr1)                    //защелка обнулилась?    
            EncLockCntr1 --;                //декремент защелки
        else
            if 
(EncFlags & bEncLock1){
                EncFlags &= ~bEncLock1;        //сбросить бит защелки
                if (~EncFlags & bEncLock0)    //если второй канал уже обнулен, обновить значение глобального счетчика
                    EncValue ++;            
            
}
    }
}
 


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 01:56:02 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вариант, который я юзаю:
Спойлерenc.h
Код:
#define   ENC_A       RB0
#define   ENC_B       RB1

extern void EncoderScan(void);
extern signed int Enc_Get_Val(void);

enc.c
Код:
#include "enc.h"

static char EncState;
static volatile signed int EncValRet=0;

/***********************************************************/
void EncoderScan(void){
char New = (char)(ENC_A) + ((char)ENC_B<<1);

switch(EncState){
   case 0:
      if(New == 2)    EncValRet++;
      if(New == 1)    EncValRet--;
      break;
   case 1:
      if(New == 0)    EncValRet++;
      if(New == 3)    EncValRet--;
      break;
   case 2:
      if(New == 3)    EncValRet++;
      if(New == 0)    EncValRet--;
      break;
   case 3:
      if(New == 1)    EncValRet++;
      if(New == 2)    EncValRet--;
      break;
}
EncState = New;      // Записываем новое значение
}
/***********************************************************/
signed int Enc_Get_Val(void){
signed int ret;
ret = EncValRet;
EncValRet=0;
return ret;
}


EncoderScan обычно вызываю в миллисекундном прерывании таймера.
Enc_Get_Val возвращает кол-во щелчков энкодера после последнего вызова. Если число положительное - крутили в одну сторону, если отрицательное - в другую.
В ф-ии Enc_Get_Val я вырезал запрет и восстановление прерываний, на время использования переменной EncValRet. Т.к. для разных компилев это будет выглядеть по разному.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 02:24:20 
Открыл глаза

Зарегистрирован: Чт июл 05, 2012 09:40:46
Сообщений: 61
Рейтинг сообщения: 0
ketrosi писал(а):
У меня так сделано (CVAVR)


Код:
#define Enc PINC.3    // ВХОД енкодера
 
 // INT1
               
interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА

      if (Enc==0) 
        {
             if (Enc==0)
             {
              ваш код (у меня if(OCR0<235) {OCR0+=1;}  )
               
             }
         }     

      if (Enc==1) 
        {
             if (Enc==1)
             {
             ваш код ( у меня   if(OCR0>2) {OCR0-=1;})
               
             }
         }     
   
}



энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод)


защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная.

INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости.



также можно обрабатывать прерыванием INT1 еще и кнопку подключив ее через диод ко входу INT1 и
прямым подключением ко входу нужного порта.

Таким образом одно прерывание обрабатывает один энкодер (кнопку и крутилку), и упрощается сама программа.

Много чего можно обслуживать по одному прерыванию используя диоды по схеме монтажное или.

срабатывает прерывание , в нем проверяются пины портов, определяется по какому произошла сработка, далее выполняются нужные действия.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 08:17:01 
Встал на лапы

Зарегистрирован: Пт мар 04, 2011 13:06:42
Сообщений: 108
Откуда: Украина, Ахтырка
Рейтинг сообщения: 0
Код:
 

if (enc && flags_enc) // ловим импульс
{

  if(enc1)  // вправо
 {
    right();
 }
 else        // влево
 {
    left();
 }

 flags_enc=0;
}

 if(!(enc)) flags_enc=1; // сбрасываем флаг



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


Последний раз редактировалось Artos Ср сен 05, 2012 08:24:09, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 08:20:21 
Встал на лапы

Зарегистрирован: Пт мар 04, 2011 13:06:42
Сообщений: 108
Откуда: Украина, Ахтырка
Рейтинг сообщения: 0
ploop писал(а):
Измерил. Идут посылки по 8 бит с небольшими паузами (пауза из-за условий для инверсии, смотрите код). Между группами, после того, как передадутся 112 бит, паузы довольно большие (10-20 мс). Выглядит так (ch1 - такт, ch2 - данные):


Реализовано так:
Код:
  sbi sh_cp_port,sh_cp_bit #Выставили бит на порт
  nop #Пропустили такт
  cbi sh_cp_port,sh_cp_bit #Сняли бит


Спасибо Вам большое за измерения!
160нс - это получается где то ~3.3мГц (импульс и пауза)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Ср сен 05, 2012 08:30:43 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13492
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
150 нс.
Там всё как в аптеке: частота 20МГц, 50нс - один такт, импульс подаётся за три такта - установить порт, nop, сбросить порт.

Пауза там гораздо длиннее, т.к. идёт обработка в этот момент. И она не имеет значения, хоть час будет, регистры будут ждать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Пт апр 18, 2014 21:57:30 
Открыл глаза

Зарегистрирован: Чт июл 05, 2012 09:40:46
Сообщений: 61
Рейтинг сообщения: 0
ketrosi писал(а):
ketrosi писал(а):
У меня так сделано (CVAVR)


Код:
#define Enc PINC.3    // ВХОД енкодера
 
 // INT1
               
interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА

      if (Enc==0) 
        {
             if (Enc==0)
             {
              ваш код (у меня if(OCR0<235) {OCR0+=1;}  )
               
             }
         }     

      if (Enc==1) 
        {
             if (Enc==1)
             {
             ваш код ( у меня   if(OCR0>2) {OCR0-=1;})
               
             }
         }     
   
}



энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод)


защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная.

INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости.



также можно обрабатывать прерыванием INT1 еще и кнопку подключив ее через диод ко входу INT1 и
прямым подключением ко входу нужного порта.

Таким образом одно прерывание обрабатывает один энкодер (кнопку и крутилку), и упрощается сама программа.

Много чего можно обслуживать по одному прерыванию используя диоды по схеме монтажное или.

срабатывает прерывание , в нем проверяются пины портов, определяется по какому произошла сработка, далее выполняются нужные действия.



использую такой метод постоянно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Пт апр 18, 2014 22:26:30 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
ГГ :)))

Чувак, ты о чем? )) Там последнее сообщение два года назад было. ) Рад за тебя, что ты это используешь постоянно! ;)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Сб май 07, 2016 14:09:32 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт ноя 07, 2006 14:14:16
Сообщений: 59
Откуда: пос. Правдинский
Рейтинг сообщения: 0
Всем привет! Чтоб зря не мучится на макеткой, спрошу - если подавить дребезг энкодера аппаратно с помощью логики (схема в прицепе), имеет место быть такое решение?


Вложения:
антидребезг.pdf [17.47 KiB]
Скачиваний: 336
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Сб май 07, 2016 18:29:11 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вс май 08, 2016 01:58:05 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт ноя 07, 2006 14:14:16
Сообщений: 59
Откуда: пос. Правдинский
Рейтинг сообщения: 0
Demiurg писал(а):
Изображение

Спасибо! :) По вашему рисунку подобрал микросхему CD4013, т.е. её прям так и подключать, без каких либо резисторов и конденсаторов?
Не сочтите за труд, гляньте пжлста схему. ножки выхода триггеров правильно подключил? (в прицепе)


Вложения:
CD4013_datasheet.pdf [76.57 KiB]
Скачиваний: 271
антидребезг_v2.pdf [51.06 KiB]
Скачиваний: 300
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вс май 08, 2016 07:37:17 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Gerik_PP писал(а):
...

Входы подтяните резисторами на минус питания. Так как КМОП микросхемы. Полевые транзисторы управляются электрическим полем, потому ловят малейшую статику.

Такое включение триггеров я назвал "идеальным триггером". История такова: когда я начал изучать цифровую технику (примерно лет 13-15 мне было, точно не помню, больше 20 лет назад), дошло дело до триггеров. RS-триггеры известны запрещенным состоянием, когда на обоих входах активный уровень. И я не поверил, что нельзя сделать идеальный триггер. Я ломал, ломал голову, включал так и сяк логические элементы, так и не придумал. И забросил это дело. До то момента, когда я начал работать на предприятии. Нужно было сделать блок управления для станка. МК тогда я не знал. Вопрос стоял просто. Сделаю блок управления, остаюсь работать. Нет - нет.

И тут проблема "идеальный триггер" встала передо мной спустя 10 лет во всей красе. Я все мозги наизнанку вывернул, не выходит и все тут. И я отложил эту проблему, решил разобраться с другой задачей. Реле времени. На руках были реле времени советских времен. На К561ИЕ8. Разбирался с этой микросхемой, баловался, пробовал разные включения. Как-то раз я сидел, пробовал очередное включение. И тут меня осенило. Суть такова. Счетный вход - считаем "S" входом. R - так и остается сбросом. Соединяем выход 1 со входом запрета. Выход 0 - инверсный выход триггера. 1 - прямой выход триггера. То есть, совершенно случайно решил свою проблему "Идеальный триггер"!

Позже я анализировал все известные триггеры. Получается, что мои триггеры можно сделать на D-триггерах и JK-триггерах.

Станок в итоге я сделал. И он успешно отработал в тяжелом, круглосуточном режиме несколько лет.

И я в то время очень удивился, что никто не применял такое включение D-триггеров. Многие схемы можно было многократно сократить. В итоге кол-во плат гораздо меньше выходило бы.

Еще позже, когда я познакомился с конечными автоматами, понял, что по сути, мои схема на этих триггерах - конечные автоматы. С жестко заданной логикой. Без промежуточных состояний, как если бы схема была собрана на обычной логике.

Такая вот история...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Вт май 10, 2016 19:52:29 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт ноя 07, 2006 14:14:16
Сообщений: 59
Откуда: пос. Правдинский
Рейтинг сообщения: 0
в дополнение темы http://radiokot.ru/forum/viewtopic.php?f=61&hilit=%D0%BD%D0%B5%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D0%B5&t=115308


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программная обработка Энкодера на AVR
СообщениеДобавлено: Пт июл 22, 2016 23:21:20 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт ноя 07, 2006 14:14:16
Сообщений: 59
Откуда: пос. Правдинский
Рейтинг сообщения: 0
ploop писал(а):
Да дребезг программно нормально отсекается. Если сами не придумаете, вот алгоритм Леонида Ивановича, раскомментирован до нельзя...
Спойлер
Код:
//----------

//Модуль поддержки энкодера

//Энкодер подключается к портам ENC_F1 (фаза 1) и ENC_F2 (фаза 2).
//Для подавления дребезга используется анализ двух последовательных
//состояний. Это позволяет обойтись без временных задержек.
//Функция Encoder_Init() должна вызываться один раз в начале программы.
//Функция Encoder_Exe() должна вызываться в основном цикле.
//При повороте энкодера на шаг вправо или влево вызываются функции
//To_Do_Step_Up() и To_Do_Step_Dn() соответственно.

.......................

Браво!!! Особенно радует то, что решение без временных задержек. Спасибо, Леонид Иванович!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 90 ]    , 2, , ,  

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


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

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


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