Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » atXmega - Quadrature Decoder Channels


atXmega - Quadrature Decoder Channels

Сообщений 61 страница 75 из 75

61

Ev3658 написал(а):

метод по прерыванию переполнения таймера и определения направления счёта работает стабильно, но глючно, прерывания всё-же в нуле может быть очень много, может завалить МК и разрушить связь

Не пробовал проставить максимальный приоритет срабатывания?

0

62

Ev3658 написал(а):

прерывания всё-же в нуле может быть очень много, может завалить МК

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

Ev3658 написал(а):
Код:
                B = Low(tcc1_cnt)
                Bitch = Bitch + B
                Printbin #1 , B
                B = High(tcc1_cnt)

Между Low и High пройдет некоторое время, за которое содержимое счетчика может измениться. Лучше скопировать счетчик таймера в переменную после чего передавать данные.

Код:
                X = tcc1_cnt
                B = Low(X)
                Bitch = Bitch + B
                Printbin #1 , B
                B = High(X)

+1

63

Да и такой вывод решается как обычно через оверлей или вообще напрямую из регистра брать. Нужно вообще забыть про этот анархизм (low/high).

Кстати говоря, можно ещё активировать буфер вывода print-а (в настройках), а то на время вывода может начать пропускать значения.

Отредактировано RDW (2017-11-30 14:38:00)

0

64

В BascomAvr почему-то не дают доступ к верхнему и нижнему регистру таймера, тут без вариантов через Low и High.

0

65

Никак не могу объяснить на официальном форуме о проблеме счёта в отрицательном направлении второго таймера при расширении счёта до 32 бит.
http://se.uploads.ru/t/5t8a9.jpg

0

66

In the 32-bit counting mode, the subtraction does not work in the quadrature encoder.

Про доступ в баском к регистрам - этого не может быть. Фантастика.) Либо читаешь не тот адрес (напрямую), либо если через имена таймеров - возможно опять глюки конфига файла кристалла/проекта.

0

67

Я там в твоей теме отписал, может поможет, поглядим..

0

68

Ev3658, там чел желает видеть твой код на таймере2 для энкодера).

0

69

RDW написал(а):

Ev3658, там чел желает видеть твой код на таймере2 для энкодера).

:tired:  Я его выкладывал там. Сам косяк, надо было на картинке те Timer 1, а Timer №1 или Timer CCD0 CCF1 и т.д.
Ох... неужели настолько сложный языковый барьер или действительно очень мало людей полезли в квадратурную дешифрацию Xmega, а ведь ещё как-то надо понять как сбрасывать счётчик по индексной метке (QNDIX).

0

70

Видимо XMega при наращивании разрядности не поддерживает направление счета у второго таймера. Похожая ситуация http://www.avrfreaks.net/forum/atxmega1 … pare-match
Решение программно-аппаратное с использованием прерываний.

0

71

Тогда остаётся понять как работает QDIx, как-то можно сбросить счёт по третьему импульсу энкодера, это необходимо если нужно знать абсолютный ноль без погрешностей.

0

72

Да, попробуй поиграться с событиями: https://wiki.mcselec.com/bavr/index.php … setlang=en
Там вроде бы не так много комбинаций.

0

73

RDW написал(а):

Да, попробуй поиграться с событиями: https://wiki.mcselec.com/bavr/index.php … setlang=en
Там вроде бы не так много комбинаций.

Да и так всё ясно. При наличии сигнала по нулевой метке энкодера в QdirmX выбираем квадратурное совпадение.
То-есть нулевая метка может быть несколько раз и нам из нескольких раз надо выбрать подходящее под квадратуру - так повышается точность метки.
Но как зацепить это событие, чтоб хотя-бы вызвать прерывание или как-то обнулить таймер и опять прерывание.
Теоретически это возможно через регистр таймера TCCx_ERR, но оно срабатывает постоянно как и TCCx_OVF.
Прям дикость какае-то, неужели Atmel не продумали аппаратный механизм для этих целей.
Ещё не понял один параметр в конфигурации таймера: RESOLUTION = SPLIT - типа он для будущего или уже как-то для реализации 32bit?

RESOLUTION

Valid options : NORMAL, BYTE, SPLIT.

Timer resolution is 16 by default (NORMAL). A value of BYTE will set the timer to 8 bit resolution. SPLIT is reserved for future use.(cascading 32 bit  timers ).

When WG mode TIMER2 is chosen, the timer will be set into BYTE mode automatically.

Отредактировано Ev3658 (2017-12-04 15:22:03)

0

74

RESOLUTION именно для выбора режима работы таймеров (каскадное и насколько (разрядность).
А ты вот этот документик не читал?

0

75

Ещё, не пробовал таймер2 заменить на другие таймеры? Вообще поиграться с другими 3 > 4 и т.д.

0

Похожие темы


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » atXmega - Quadrature Decoder Channels