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

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

Сообщение pyzhman »

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

Сообщение GP1 »

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

Сообщение ploop »

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

Сообщение urry »

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

Сообщение slavokhire5 »

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

Сообщение urry »

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

Сообщение slavokhire5 »

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

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

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

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

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

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

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

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

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

Сообщение 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 Можно ли в си присвоить такое значение переменной.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт июл 01, 2010 19:48:52

Сообщение kotbimigot »

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

Сообщение gonzales06 »

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

Сообщение slavokhire5 »

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

Сообщение GP1 »

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

Сообщение kotbimigot »

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

Сообщение slavokhire5 »

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

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

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

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

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

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;               //сохранение предыдущего состояния
  }
}

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

Сообщение thebonix »

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

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

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