реклама на сайте
подробности

 
 
> Подпрограмма обработки энкодера на ассемблере
Игoрь
сообщение Jan 12 2014, 08:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 15-05-13
Пользователь №: 76 836



Если вдруг у кого есть кусок кода с антидребезгом, поделитесь кому не жалко. Лениво тратить время на исследования задержек по антидребезгу
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jan 14 2014, 11:37
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Опрашиваю периодически (часто) по таймеру состояние выводов энкодера. Для устранения дребезга проверяю состояние за два периода, и если оно совпадает, считаю состояние устойчивым.
Сравниваю новое состояние с предыдущим устойчивым (разность нахожу). Если разность:
0 - ничего не делаю
1 - добавляю 1 к счетчику энкодера
-1 - вычитаю 1 из счетчика энкодера
2 или -2 - ошибка (слишком быстро вращается), ничего не делаю.
Периодически (редко) пересылаю состояние изменившихся органов управления (в том числе, счетчики энкодеров) по последовательному порту тому, кому надо. :-)
После этого счетчик энкодера обнуляю.
Типа того. На PIC16 cool.gif На C.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 3 2014, 09:20
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ViKo @ Jan 14 2014, 14:37) *
Сравниваю новое состояние с предыдущим устойчивым (разность нахожу).

Забыл добавить одно важное действие. Прежде чем сравнивать с предыдущим состоянием, преобразую код Грэя (в котором выдают свое состояние энкодеры) в двоичный код. Заменяю младшие биты исключающим или старшего и младшего битов. Для 4-х энкодеров в одном байте делал так:
Код
  PanFix[0] = (PanFix[0] & 0b10101010) |
          ((PanFix[0] ^ PanFix[0] >> 1) & 0b01010101);
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Mar 20 2014, 03:55
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Код так код.
Вот:
Код
;
;===============================================================================
biphali: ///////////  bi-phase  driver                                        
      /// calls from main in fast cycle                                    
      ///                                                                             
      ///          0      forward 1-0-2                                                 
      ///       1     2    backward 2-0-1                                    
      ///          3      so, incr/decr nodes shifted in space. Can be stored in bits 0,1 of biphase     
      ///               until 2->3 or 3->2 to remove this shift.                        
.equ CT_B1    = $80
.equ CT_B2    = $40

    ldi    tmp1,CT_B1 | CT_B2
    sbis    BIPORT-PIN,BIPHA    cbr    tmp1,CT_B2
    sbis    BIPORT-PIN,BIPHB    cbr    tmp1,CT_B1
    eor    tmp1,biphase        ; <1> = BaBb 0 0  0 0 0 0
    cpi    tmp1,CT_B2        brlo biret;/// return if B1B2 readed same as prev. saved

    eor    tmp1,biphase        ;  restore <1>
    lsr    biphase        lsr    biphase
    or    tmp1,biphase        cbr    tmp1,3
    mov    biphase,tmp1        ;  aabbcc00 phase history

    lds    tmp2,bico
    cpi    tmp1,$48        brne    bidro;  01-00-10 00    102 forward
    lds    tmp1,biforw        add    tmp2,tmp1    rjmp bdsa
bidro:    cpi    tmp1,$84        brne    biret;  10-00-01 00    201 backward
    lds    tmp1,biforw        sub    tmp2,tmp1    

bdsa:    sts    bico,tmp2

biret:    ret


biphali вызывается часто, чаще, чем крутится енкодер. Изменяет bico (байт).
Чаще, чем переполняется bico нужно вызывать подпрограмму которая это bico
прибавляет к счётчику (у меня 4-байтный) и обнуляет bico.

Сообщение отредактировал Maik-vs - Mar 20 2014, 04:00
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Игoрь   Подпрограмма обработки энкодера на ассемблере   Jan 12 2014, 08:02
- - A. Fig Lee   Цитата(Игoрь @ Jan 12 2014, 03:02) Если в...   Jan 12 2014, 17:06
- - Игoрь   да вот начитался теории, даже рисунки кто-то приво...   Jan 12 2014, 18:11
- - rx3apf   Обсуждалось уже, неоднократно. Воспользуйтесь поис...   Jan 12 2014, 18:14
|- - A. Fig Lee   Цитата(rx3apf @ Jan 12 2014, 13:14) Для м...   Jan 12 2014, 19:19
|- - rx3apf   Цитата(A. Fig Lee @ Jan 12 2014, 23:19) П...   Jan 12 2014, 19:45
- - Игoрь   попробую пояснить, чего я хочу- мне нужен не алгор...   Jan 12 2014, 18:34
- - Игoрь   без дребезга при наличии сглаживающих емкостей? Ил...   Jan 12 2014, 19:26
|- - A. Fig Lee   Цитата(Игoрь @ Jan 12 2014, 14:26) без др...   Jan 13 2014, 01:12
- - Abell   Еще когда начинал практически работать с AVR, ввел...   Jan 13 2014, 04:29
- - Игoрь   мысль не нова и безусловно интересна. Но на мой вз...   Jan 13 2014, 08:21
|- - Abell   Цитата(Игoрь @ Jan 13 2014, 12:21) Схема ...   Jan 13 2014, 09:20
- - A. Fig Lee   Какое отношение к енкодеру имеют последние 3 ответ...   Jan 13 2014, 13:45
- - Игoрь   косвенное Раз нет желающих помочь мне с кодом для...   Jan 13 2014, 15:56
|- - ILYAUL   Цитата(Игoрь @ Jan 13 2014, 19:56) косвен...   Jan 13 2014, 18:08
- - Игoрь   я же не просил тыкать меня носом в поисковик. Тема...   Jan 13 2014, 18:38
- - ILYAUL   Вы представляете , а там есть код и не один. Ну жд...   Jan 13 2014, 18:45
- - Игoрь   вы представляете, а я и до вашего совета искал, и ...   Jan 14 2014, 05:05
- - rx3apf   Эта тема неоднократно обсуждалась на форуме. Вам л...   Jan 14 2014, 09:55
- - ILYAUL   ЦитатаНо они меня не устроили своей громоздкостью,...   Jan 14 2014, 10:11
|- - Игoрь   Цитата(ILYAUL @ Jan 14 2014, 14:11) А что...   Jan 14 2014, 11:09
|- - A. Fig Lee   Цитата(ViKo @ Jan 14 2014, 06:37) Опрашив...   Jan 14 2014, 12:47
- - Navovvol   CODE .def count_VERY_HIGHT = R22 .def coun...   Jan 30 2014, 10:52
|- - kolobok0   Цитата(Navovvol @ Jan 30 2014, 14:52) COD...   Feb 2 2014, 10:29
- - Игoрь   спасибо. Именно такого ответа я и ожидал!   Feb 2 2014, 05:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 15:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016