Страница 232 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 07:47:08
pyzhman
Дружище! Мы туда пишем, какая разница что там до записи? По поводу обязательного порядка записи читать даташит. А-то хочу-не хочу. Мы может и хотим, да вот железо по своему работает.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 10:04:13
GP1
slavokhire5 писал(а):pyzh_man, а не может сложиться такой ситуации, что пока мы сбросили старший регистр, младший досчитал до максимума и записал единичку в старший, уже сброшенный? я из этих соображений написал так
вот чтоб такого не происходило, обычно перед записью в TCNTx обычно останавливают таймер.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 10:47:20
ploop
Да не обязательно его останавливать, достаточно соблюдать правильный порядок записи, там двойная буферизация.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 11:23:09
urry
Там есть над чем плакать и без таймера.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 14:07:27
slavokhire5
Включил оптимизацию, задержки организовываю через функцию _delay, из прерывания по совпадению выкинул все лишнее, включая задержку после записи еепром (а это, может, и не лишнее). внешнее прерывание в симуляторе срабатывает один раз без всякого нажатия кнопки и независимо от состояния регистра MCUCR. больше никаких прерываний от контроллера я добиться не смог) счетчик по-прежнему считать не хочет

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 15:43:26
urry
счетчик считает, я там чуть прибрался и изменил источник сигнала.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 20:23:08
slavokhire5
спасибо за код. таймер работает, прерывания тоже. методом тыка скорректировал программу как мне нужно) много непонятного, но в свободное время постараюсь разобраться
п.с. это автомобильный одометр, в еепром пишется раз в 1км, а 100к км неплохой пробег (сейчас уже 430к)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 20:42:31
Gudd-Head
urry писал(а):Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Тогда можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron: её можно использовать как ОЗУ, и она энергонезависима!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 05, 2011 21:02:08
Леонид Иванович
Gudd-Head писал(а):urry писал(а):можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron
Скорее, сегнетоэлектрической.
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 06, 2011 08:39:34
Gudd-Head
Ничегонеработает писал(а):Скорее, сегнетоэлектрической.
Ну да, конечно

Лень было искать правильное название.
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
По-моему, 20 рублей (за 4 кбит) это не так уж и дорого. А брать надо у оф. поставщиков. Например, Элтех:
http://eltech.spb.ru/search.html?text=F ... 0&find.y=0
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 06, 2011 21:11:10
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 Можно ли в си присвоить такое значение переменной.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 06, 2011 22:13:49
kotbimigot
gonzales06, у вас таймер в каком режиме? Normal? таймер считает не до установленного предела, а до TOP (0xFF если 8битный). Задавая TCNT, вы задаете BOTTOM, то есть от чего считать. Естественно, что с одним и тем же предделителем от 10 до 255 считать дольше, чем от 250 до 255.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 06, 2011 23:57:58
gonzales06
Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 07, 2011 09:08:04
slavokhire5
на пищалку я подавал ШИМ:) таймер считает с значения которым он инициализирован (по умолчанию 0) до значения, которое забито в OCR. а вот сбрасывается он по совпадению, или нет - не помню) я обычно в обработчике прерывания пишу TCNTx = 0
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 07, 2011 09:14:24
GP1
gonzales06 писал(а):Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
Вот не плохо бы почитать хотя бы обучалку по таймерам
у таймеров есть туева хуча режимов, один из которых называется "сброс по совпадению" при котором модуль счета таймера как раз и будет число забитое в ОСR, а вот в режимах FastPWM или FaseCorreсtPWM - тут совсем другая песня.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 07, 2011 09:55:05
kotbimigot
прочитайте даташит, раздел TIMER -> modes of operation
у 8битных таймеров AVR 4 режима
у 16битных 16!
режимы отличаются друг от друга кучей нюансов, не только значениями TOP и BOTTOM
еще оч важно, в каких прерываниях что грузить и в какие регистры
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 07, 2011 20:23:46
slavokhire5
есть программатор avr910 usb. какой прогой через него прошить attiny24a? в моей авр студио (версия 4.18, 716 билд) авр прог этот контроллер не шьет. понипрог вроде тоже нет, по крайней мере в списке поддерживаемых микросхемок моей нет. может, она один-в-один похожа с какой-то другой по фьюзам ?
решено. скачал cvavr, пол-часика попарился, прошил:)
Как обрабатывать энкодер?
Добавлено: Сб окт 08, 2011 12:54:21
AVT-28
Порылся в поиске, много устройств с энкодерами но нет четкого описания как его обрабатывать контроллером.
Алгоритм.
Поделитесь ссылками и информацией?
Хочу удобное управление меню сделать.
Задача в общем накручивать счетчик вперед и назад.
Re: Как обрабатывать энкодер?
Добавлено: Сб окт 08, 2011 13:23:30
Леонид Иванович
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; //сохранение предыдущего состояния
}
}
//----------------------------------------------------------------------------
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб окт 08, 2011 13:48:19
thebonix
Подскажите пожалуйста по микроконтроллерам, можно ли выносить дополнительные функции, во внешнюю флэш память (отдельную микросхемку)
к примеру чтоб не захламлять память контроллера, вынести некоторые функции и возможно еще какиенибуть данные во внешнюю микросхемку память и потом обращаться из кода контроллера к этой памяти...
думаю данные считать проблем нет, например какието параметры...
а вот чтоб функции вынести в память, это интересно...
возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста