Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Такой вопрос: ни кто не знает какой-нибудь хитрости для опроса четырёх энкодеров минимальным количеством ног? Дополнительные корпуса ставить проблематично (место поджимает).
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20142
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Если только мультиплексировать... да и то выигрыш сомнителен.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

То есть без гемора так и придётся 8 ног выделять? Я чесал-чесал тыковку, ничего не придумал, решил спросить.
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

ploop писал(а):То есть без гемора так и придётся 8 ног выделять?
Можно попробовать уменьшить количество ног до 6. На пару входов запараллелить все каналы A и B, а четырьмя выходами поочередно сажать на землю общие контакты опрашиваемого энкодера. Конечно, придется добавить диоды для развязки - экономим 2 бита порта, за это платим восемью диодами.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Я, конечно, слабо представляю принцип опроса энкодера, с ними не приходилось пока работать, но может попробовать использовать АЦП, поставить делитель напряжения и распихать энкодеры между сопротивлениями?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20142
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Хм... использовать по аналогии резистивный сигнал: http://radiokot.ru/circuit/digital/automat/40/ ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Gudd-Head писал(а):Хм... использовать по аналогии резистивный сигнал: http://radiokot.ru/circuit/digital/automat/40/ ?
Да, именно это я и подразумевал.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Хехе, интересная идея!
Хорошо подойдёт, если надо использовать готовый ограниченный канал связи, например 3 провода.

А мне пока таких выкрутасов не надо. Да и АЦП все заняты будут наверное.
Если нет стандартных решений, поступлю самым простым способом: возьму корпус пожирнее. благо делаю на STM32. Хотел 48-ногий, придётся, видимо, 64х-ногий брать. Хотя 100-нигие почему-то дешевле мне попадались :)
Друг Кота
Аватара пользователя
Сообщения: 20142
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Можно ещё один контр чисто за энкодерами следить.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

По алгоритмам опроса энкодера (механического) как-то все тухло, в обучалках. Обычно дается гнилой алгоритм, дающий 4 импульса на один "щелчок" энкодера, с сомнительной защитой от дребезга. А дребезг есть, в механических энкодерах, порядка 5мс (по паспорту), но бывает и хуже, и еще хуже может стать по мере износа.

Когда мне было нужно, пришлось смотреть осциллограмму, придумывать свой алгоритм, с защитой от дребезга, и самому писать программу. Работает отлично. Делал опрос с частотой 1 кГц (2кГц если предполагается крутить совсем быстро). С дребезгом дело в том, что при быстром вращении невозможно избавиться от дребезга просто задержкой, как в случае кнопок.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

SmarTrunk писал(а):Когда мне было нужно, пришлось смотреть осциллограмму, придумывать свой алгоритм, с защитой от дребезга, и самому писать программу. Работает отлично. Делал опрос с частотой 1 кГц (2кГц если предполагается крутить совсем быстро). С дребезгом дело в том, что при быстром вращении невозможно избавиться от дребезга просто задержкой, как в случае кнопок.
похвастались и все?? :))) а показать? 8)
Ставим плюсы: )
Друг Кота
Аватара пользователя
Сообщения: 26124
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Из бесед с умными людьми:
http://www.microchip.su/showpost.php?p= ... stcount=32
:wink:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Да у меня как-бы нет проблем с опросом. Просто жадный я, ног хотел сэкономить :)
Друг Кота
Аватара пользователя
Сообщения: 26124
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Это я не Вам, ploop, это я про это:
SmarTrunk писал(а):По алгоритмам опроса энкодера (механического) как-то все тухло, в обучалках. Обычно дается гнилой алгоритм...
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

ibiza11
Попробую вечером выложить скан алгоритма.
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Спойлер

Код: Выделить всё

//----------------------------------------------------------------------------

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

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

//----------------------------------------------------------------------------

#include "Main.h"
#include "Encoder.h"

//----------------------------- Константы: -----------------------------------

#define ENC_F1   (1 << PC0) //фаза энкодера F2
#define ENC_F2   (1 << PC1) //фаза энкодера F1

#define Pin_ENC_F1 (PINC & ENC_F1)
#define Pin_ENC_F2 (PINC & ENC_F2)

enum { State0, StateA, StateB, StateAB }; //состояния энкодера

//----------------------------- Переменные: ----------------------------------

static char EncPrev;      //предыдущее состояние энкодера
static char EncPrevPrev;  //пред-предыдущее состояние энкодера

//----------------------- Инициализация энкодера: ----------------------------

void Encoder_Init(void)
{
  DDRC  &= ~(ENC_F1 | ENC_F2); //настройка портов на ввод
  PORTC |= ENC_F1 | ENC_F2;    //включение подтягивающих резисторов
  EncPrev = State0;       //инициализация предыдущего состояния
  EncPrevPrev = State0;   //инициализация пред-предыдущего состояния
}

//------------------------- Обработка энкодера: ------------------------------

void Encoder_Exe(void)
{
  char EncCur = 0;
  if(!Pin_ENC_F1) EncCur  = StateA; //опрос фазы 1 энкодера
  if(!Pin_ENC_F2) EncCur |= StateB; //опрос фазы 2 энкодера
  if(EncCur != EncPrev)             //если состояние изменилось,
  {
    if(EncPrev == StateAB &&        //если предыдущее состояние StateAB
       EncCur != EncPrevPrev )      //и текущее и пред-предыдущее не равны,
    {
      if(EncCur == StateB)          //если текущее состояние StateB,
        To_Do_Step_Up();            //шаг вверх
      else                          //иначе
        To_Do_Step_Dn();            //шаг вниз
    }
    EncPrevPrev = EncPrev;          //сохранение пред-предыдущего состояния
    EncPrev = EncCur;               //сохранение предыдущего состояния
  }
}

//----------------------------------------------------------------------------
Код спрятал в спойлер
Gudd-Head
Контактная информация:
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Сообщение Prosperous »

Здравствуйте! Столкнулся вот с такой проблемой. Есть у меня программатор JTAGICE mkII. Так вот. Написал программу, зашил flash и eeprom контроллера. Потом с помощью этого программатора и AVRstudio4 решил ее отладить по шагам. Подключил, нажал билд анд рун. прога прокомпилировалась. выскочил вопрос хочу ли я перепрошить eeprom (в коде присутствует конструкция uchar eePrg[65] EEMEM = {} ) и внезависимости от ответа лампа программатора начинает быстро мигать и нечего больше не происходит. ждал долго, полчаса где-то. В чем косяк? Спасибо
Друг Кота
Аватара пользователя
Сообщения: 20142
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Prosperous писал(а):Есть у меня программатор JTAGICE mkII.
Это не программатор, это полноценный отладчик.
Prosperous писал(а):лампа программатора начинает быстро мигать и ничего больше не происходит.
Так а что должно происходить? Точки останова стоят где-нибудь в проге?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Сообщение Prosperous »

ну мне казалось, что там должна появиться такая желтая стрелочка, как при отладке на встроенном в студию симуляторе, нет?
Надо ставить точки останова обязательно? если это так, ну тогда я балбес :)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Это нужно поместить в частые вопросы, своей головой то подумать сложно?Как можно увидеть стрелку на скорости 1МГц ?Я уж не говорю про более высокие частоты.
Конечно нужно делать остановы.Только так скорость вашего восприятия совпадает со скоростью программы.
Так же если все время на стрелку смотреть можно всю жизнь просидеть и не отловить всех жуков.Чтобы не смотреть там где вам не нужно контроллер работает в обычном режиме.

Можно так же запустить и нажать на паузу. вроде при этом должно остановиться в том месте, где это нажатие застало программу.
В поисках истины человек развивается.
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»