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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Дружище! Мы туда пишем, какая разница что там до записи? По поводу обязательного порядка записи читать даташит. А-то хочу-не хочу. Мы может и хотим, да вот железо по своему работает.
Docendo discimus
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

slavokhire5 писал(а):pyzh_man, а не может сложиться такой ситуации, что пока мы сбросили старший регистр, младший досчитал до максимума и записал единичку в старший, уже сброшенный? я из этих соображений написал так

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

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

Сообщение ploop »

Да не обязательно его останавливать, достаточно соблюдать правильный порядок записи, там двойная буферизация.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Там есть над чем плакать и без таймера.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

Включил оптимизацию, задержки организовываю через функцию _delay, из прерывания по совпадению выкинул все лишнее, включая задержку после записи еепром (а это, может, и не лишнее). внешнее прерывание в симуляторе срабатывает один раз без всякого нажатия кнопки и независимо от состояния регистра MCUCR. больше никаких прерываний от контроллера я добиться не смог) счетчик по-прежнему считать не хочет :cry:
Вложения
odometr2.rar
(20.07 КБ) 150 скачиваний
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

счетчик считает, я там чуть прибрался и изменил источник сигнала.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
Вложения
distance.c
(6.45 КБ) 289 скачиваний
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

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

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

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

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

urry писал(а):Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.

Тогда можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron: её можно использовать как ОЗУ, и она энергонезависима!
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

Gudd-Head писал(а):
urry писал(а):можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron


Скорее, сегнетоэлектрической.

Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Ничегонеработает писал(а):Скорее, сегнетоэлектрической.
Ну да, конечно :oops: Лень было искать правильное название.
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.

По-моему, 20 рублей (за 4 кбит) это не так уж и дорого. А брать надо у оф. поставщиков. Например, Элтех: http://eltech.spb.ru/search.html?text=F ... 0&find.y=0
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение gonzales06 »

Подскажите по таймеру 0 атмега 8
На бумаге получается :
Если регистор состояния таймера о TCNTO=10; прерывания идут по переполнению таймера. При частоте 8МГц до 10 МК сосчитает за 0,00128с (Т=предделитель*Т одного такта * на 10=1024*(1/8000000)*10=0.00128с) что соответствут частоте 781,25ГЦ, т.е. подключеный диод к МК мигает чаще.
Если TCNTO=250 то время прерывания 0,032с что соответствут частоте 31 ГЦ диод мигает реже.
Работает таймер по переполнени значит когда досчитывает да установленного предела сбрасывается. Так получается на бумаге.
В жизне почемуто наоборот пр TCNT0=250 моргает диод быстрее, а при 10 медленне.
Вообще запутался.
И ёще вопрос если 1 сек=31.25 периодам прерывания то есть 1 сек получится когда переменная будет равна 31.25 Можно ли в си присвоить такое значение переменной.
kotbimigot
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт июл 01, 2010 19:48:52

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

Сообщение kotbimigot »

gonzales06, у вас таймер в каком режиме? Normal? таймер считает не до установленного предела, а до TOP (0xFF если 8битный). Задавая TCNT, вы задаете BOTTOM, то есть от чего считать. Естественно, что с одним и тем же предделителем от 10 до 255 считать дольше, чем от 250 до 255.
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение gonzales06 »

Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

на пищалку я подавал ШИМ:) таймер считает с значения которым он инициализирован (по умолчанию 0) до значения, которое забито в OCR. а вот сбрасывается он по совпадению, или нет - не помню) я обычно в обработчике прерывания пишу TCNTx = 0
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

gonzales06 писал(а):Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.

Вот не плохо бы почитать хотя бы обучалку по таймерам
у таймеров есть туева хуча режимов, один из которых называется "сброс по совпадению" при котором модуль счета таймера как раз и будет число забитое в ОСR, а вот в режимах FastPWM или FaseCorreсtPWM - тут совсем другая песня.
Чем дальше, тем больше становлюсь занудой...
Изображение
kotbimigot
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт июл 01, 2010 19:48:52

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

Сообщение kotbimigot »

прочитайте даташит, раздел TIMER -> modes of operation
у 8битных таймеров AVR 4 режима
у 16битных 16!
режимы отличаются друг от друга кучей нюансов, не только значениями TOP и BOTTOM
еще оч важно, в каких прерываниях что грузить и в какие регистры
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

есть программатор avr910 usb. какой прогой через него прошить attiny24a? в моей авр студио (версия 4.18, 716 билд) авр прог этот контроллер не шьет. понипрог вроде тоже нет, по крайней мере в списке поддерживаемых микросхемок моей нет. может, она один-в-один похожа с какой-то другой по фьюзам ?

решено. скачал cvavr, пол-часика попарился, прошил:)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
AVT-28
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Вс сен 11, 2011 12:35:11

Как обрабатывать энкодер?

Сообщение AVT-28 »

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

Re: Как обрабатывать энкодер?

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

AVT-28 писал(а):много устройств с энкодерами но нет четкого описания как его обрабатывать контроллером.
Поделитесь...


Делюсь.

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

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

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

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

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

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

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

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

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

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

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

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

void Encoder_Init(void)
{
  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,
        StepUp();   //шаг вверх
      else                          //иначе
        StepDn();   //шаг вниз
    }
    EncPrevPrev = EncPrev;          //сохранение пред-предыдущего состояния
    EncPrev = EncCur;               //сохранение предыдущего состояния
  }
}

//----------
thebonix
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт май 06, 2011 20:19:53
Откуда: Украина, Мариуполь

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

Сообщение thebonix »

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

возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста
Ответить

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