Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 157 из 159 ПерваяПервая ... 57107147154155156157158159 ПоследняяПоследняя
Показано с 1,561 по 1,570 из 1581

Тема: Микроконтроллеры AVR

  1. #1561
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1

    Новая версия билиотеки ROTOR с исправлениями

    Хочется выразить благодарность коллеге Veso74, за то, что благодаря ему, я ещё раз перепроверил код функций библиотеки и нашёл ошибки, приводившие к нечёткой работе.

    По работе предложенной им библиотеки Ben Buxton, хочется отметить её действительно великолепные возможности по подавлению дребезга.

    Учтя этот факт, я перепроверил все функции обработки энкодера выложенные мной ранее. Как итог, функции univ_enc() и noDetents_enc() работают чётко без RC цепей подавления дребезга, а функции chStep_enc() и uniSmall_enc(), основанные на одном общем алгоритме работали нечётко.

    Собственно, данный дефект я устранил, переписал код и выкладываю исправленную версию.


    Цитата Сообщение от veso74 Посмотреть сообщение
    Часто используем как прогр. код то, что есть, а ставим оптимизацию:
    Никакая оптимизация не сократит реальный объём кода.

    Пример для Tiny88, вывод на LCD средствами LiquidCrystal, выводится одно long int, приращение 1.

    rotor uniSmall_enc() - 2650 байт 157 ОЗУ

    rotary (no half_step) process() - 2698 байт 183 ОЗУ

    Для Tiny26 этот разрыв ещё больше.
    Из чего следует, что предложенную вами библиотеку, вполне можно использовать в МК с достаточным объёмом памяти и она там будет работать отлично, но там, где нужно бороться за каждый байт flash и mem, она вряд ли будет уместна.
    Вложения Вложения
    Последний раз редактировалось cuneum; 03.04.2024 в 04:28.


  2. #1562

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,473
    Позывной
    LZ2WSG
    Есть улучшения. Остаётся реакция не при вращении, а при касании оси. А код Ben Buxton никак не реагирует. univ_enc() ближе всего к тому, как работает другой код. Иногда "поврежденный зуб" дает несколько/много импульса. А другой код просто пропускает. Приближаетесь. Но код далеко от Rotary.h. Это то, что я могу экспериментировать, со своими выводами. Могу и ошибаться.
    Вложения Вложения
    Последний раз редактировалось veso74; 03.04.2024 в 11:15.

  3. #1563
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1
    Цитата Сообщение от veso74 Посмотреть сообщение
    . Могу и ошибаться.
    Ошибаетесь. Код chStep_enc() с параметром 1 не предназначался для механических энкодеров.
    noDetents_enc() вообще предназначен для индукционных или оптических, механические только непрерывного действия (без фиксации и промежуточных состояний).
    Далее даже писать не буду, потому как не знаю, на чём таком вы там получаете свои результаты, у меня все эти функции работают отлично, даже на самодельном механическом энкодере с дребезгом контактов и люфтом оси.

    Одно скажу, предложенный вами код, может и в чём то хорош, но не годен для МК с малым объёмом памяти, а именно это определяет.

    Цитата Сообщение от veso74 Посмотреть сообщение
    Остаётся реакция не при вращении, а при касании оси.
    Это возможно только в том случае, когда у вас не энкодер, а барабан с палочками, в случае механического или люфт вала ШД. В первом случае "барабан" на помойку, во втором туда же.

    За сим тему закрываем, ибо меня написанный код вполне теперь устраивает.
    Последний раз редактировалось cuneum; 03.04.2024 в 15:41.

  4. #1564

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,473
    Позывной
    LZ2WSG
    У меня нет ничего меньше чем ATtiny13A. Правда, экспериментирую и с ATtiny10, и с PICxx, и там код Ben Buxton ОК. Просто проверьте механический энкодер, снятый после лет работы. Это заметил для себя лет назад и делюсь инфо. А любой новой енкодер работает с всех прогр. кодов из интернет.
    Последний раз редактировалось veso74; 03.04.2024 в 16:13.

  5. #1565
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1
    Цитата Сообщение от veso74 Посмотреть сообщение
    энкодер, снятый после лет работы.
    Я использую в качестве "плохого" энкодер EC10E от "мыши", он доработан мной для устранения "щелчков" (там есть кольцевая пластина с выступом, её разгибаем, получаем без фиксации положений) и смонтирован в корпусе потенциометра. Энкодеру более 10 лет работы в мышке.
    Нажмите на изображение для увеличения. 

Название:	DOC036052125.jpg 
Просмотров:	7 
Размер:	37.8 Кб 
ID:	399919

    Цитата Сообщение от veso74 Посмотреть сообщение
    У меня нет ничего меньше чем ATtiny13A.
    Тут такое дело, если для чего простого, то может и хватит памяти, при том, что стандартных библиотек не использовать. Я вот хочу запихнуть в Attiny26 управление 5351 и вывод на LCD (если не хватит места то на 7-сег), пока у меня лишь получилось просто установка одной частоты и это 2кб кода.
    Но расход flash не самое больное место, хуже дела с расходом ОЗУ, при том, что требуется выделить место под stack, а его там всего 128 байт. В данном случае о tiny12,13 вообще говорить нет смысла.

    Так вот, именно для подобных случаев и нужны компактные по коду и расходу памяти процедуры. Как писал ранее, ваша бесспорно хорошо работающая процедура энкодера, негодна в этой ситуации.

    PS
    Переписал библиотеку, ужал код ещё на 46 байт и на 5 байт расход ОЗУ. Далее только с потерей совместимости с другими AVR.
    Последний раз редактировалось cuneum; 03.04.2024 в 22:53.

  6. #1566
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1

    Версия билиотеки ROTOR , финальная.

    Заменил плохо работающий код, ну и сократил расход памяти. Чтобы не писал коллега Veso74, все функции работают надёжно даже без конденсаторов, особо тяжёлые случаи просто не рассматриваем, как не актуальные (если разбита втулка оси энкодера, ему место на помойке, а не в изделии). Возможно подключение ШД по двум фазам и получение полного числа шагов.
    Вложения Вложения

  7. #1567

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,473
    Позывной
    LZ2WSG
    Для "а при касании оси -> разбита втулка оси энкодера": изпользую г. переводчик, не воспринимайте слова буквально.

    rotor23.zip -> Нет. В файлах добавил комментарий, где что начинается.
    Вложения Вложения

  8. #1568

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,473
    Позывной
    LZ2WSG
    Попробовал енкодер из PC от мышки, как на предложенной картинке. (Естественно - от когда-то использованной). Реакция точно такая же.
    При аналогичном программном коде проход ОК на 100% и ложное срабатывание нет, без филтр. кондензаторы, быстрое/медленное вращение ...

  9. #1569
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1
    Да, есть проблема на энкодере от мышки в при некотором угле поворота есть зона где показания скачут. Сейчас не могу сказать, какой именно использован обработчик в прошивке, но он точно 2 такта. С другим энкодером такого нет, при любой скорости вращения. С четыре такта проверю отпишусь.
    Последний раз редактировалось cuneum; 04.04.2024 в 19:03.


  10. #1570
    Аватар для cuneum
    Регистрация
    28.12.2015
    Адрес
    Санкт-Петербург
    Сообщений
    1,549
    Записей в дневнике
    1

    Библиотека rotor.h версия 2.5

    Выкладываю результат своих экспериментов по обработке энкодера.

    Что изменилось..
    Переработал немного код опубликованный ранее, добавил новую функцию.
    Драйверы noDetents_enc() и chStep_enc(), разработаны для оптических и индукционных энкодеров (ШД), но могут работать и с некоторыми механическими типами с параметром HALF и FULL (только для chStep).
    univ_enc() - имеет некоторую защиту от дребезга, пропускает сбойные участки.
    uniSmall_enc() - самый компактный с анти-дребезгом и пропуском сбоев, при наличии конд. обрабатывает сбойные участки.
    tiny_enc() - новый обработчик, требует наличие конденсаторов, сбои обрабатывает.

    Общая рекомендация для механических энкодеров: если по каким либо причинам в схеме не предусмотрены блокирующие дребезг конденсаторы, следует вызывать функцию не чаще 100 раз в сек.
    Вложения Вложения
    Последний раз редактировалось cuneum; 11.04.2024 в 10:15.

Страница 157 из 159 ПерваяПервая ... 57107147154155156157158159 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Микроконтроллеры PIC
    от R2DAD в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 140
    Последнее сообщение: 29.10.2023, 10:32
  2. СОМ порт и микроконтроллеры
    от alex74 в разделе Технический кабинет
    Ответов: 1
    Последнее сообщение: 31.03.2008, 11:04

Ваши права

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