Мелкие вопросы по МК и ПЛИС.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Дружище! Мы туда пишем, какая разница что там до записи? По поводу обязательного порядка записи читать даташит. А-то хочу-не хочу. Мы может и хотим, да вот железо по своему работает.
Docendo discimus
- Реклама
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
вот чтоб такого не происходило, обычно перед записью в TCNTx обычно останавливают таймер.slavokhire5 писал(а):pyzh_man, а не может сложиться такой ситуации, что пока мы сбросили старший регистр, младший досчитал до максимума и записал единичку в старший, уже сброшенный? я из этих соображений написал так
Re: Мелкие вопросы по МК и ПЛИС.
Да не обязательно его останавливать, достаточно соблюдать правильный порядок записи, там двойная буферизация.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Там есть над чем плакать и без таймера.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
Включил оптимизацию, задержки организовываю через функцию _delay, из прерывания по совпадению выкинул все лишнее, включая задержку после записи еепром (а это, может, и не лишнее). внешнее прерывание в симуляторе срабатывает один раз без всякого нажатия кнопки и независимо от состояния регистра MCUCR. больше никаких прерываний от контроллера я добиться не смог) счетчик по-прежнему считать не хочет 
- Вложения
-
- odometr2.rar
- (20.07 КБ) 151 скачивание
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Реклама
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
счетчик считает, я там чуть прибрался и изменил источник сигнала.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
- Вложения
-
- distance.c
- (6.45 КБ) 290 скачиваний
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
спасибо за код. таймер работает, прерывания тоже. методом тыка скорректировал программу как мне нужно) много непонятного, но в свободное время постараюсь разобраться
п.с. это автомобильный одометр, в еепром пишется раз в 1км, а 100к км неплохой пробег (сейчас уже 430к)
п.с. это автомобильный одометр, в еепром пишется раз в 1км, а 100к км неплохой пробег (сейчас уже 430к)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Тогда можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron: её можно использовать как ОЗУ, и она энергонезависима!urry писал(а):Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Скорее, сегнетоэлектрической.Gudd-Head писал(а):urry писал(а):можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
По-моему, 20 рублей (за 4 кбит) это не так уж и дорого. А брать надо у оф. поставщиков. Например, Элтех: http://eltech.spb.ru/search.html?text=F ... 0&find.y=0Ничегонеработает писал(а):Скорее, сегнетоэлектрической.
Ну да, конечноЛень было искать правильное название.
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- gonzales06
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Сб сен 01, 2007 18:32:42
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Подскажите по таймеру 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 Можно ли в си присвоить такое значение переменной.
На бумаге получается :
Если регистор состояния таймера о 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: Мелкие вопросы по МК и ПЛИС.
gonzales06, у вас таймер в каком режиме? Normal? таймер считает не до установленного предела, а до TOP (0xFF если 8битный). Задавая TCNT, вы задаете BOTTOM, то есть от чего считать. Естественно, что с одним и тем же предделителем от 10 до 255 считать дольше, чем от 250 до 255.
- gonzales06
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Сб сен 01, 2007 18:32:42
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
на пищалку я подавал ШИМ:) таймер считает с значения которым он инициализирован (по умолчанию 0) до значения, которое забито в OCR. а вот сбрасывается он по совпадению, или нет - не помню) я обычно в обработчике прерывания пишу TCNTx = 0
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Вот не плохо бы почитать хотя бы обучалку по таймерамgonzales06 писал(а):Спасибо за ответ, а я думал он считает от 0 до выставленого TCNTO. То есть и расчет времени задержки происходит путем вычетания полученного N из 256. А про режимы работы таймера, я не знаю. Правилно ли я понял если идет сравнение с данными компоратора то таймер считает от 0 до числа выставленного компоратором , а потом сбрасывается и происходит прерывания.
И еще маленький вопрос. В разрабатываемом устройстве надо установть зумер неактивный. Каким образом на него подать колебания звуковой частоты. Можно ли подать через таймер на прямую.
у таймеров есть туева хуча режимов, один из которых называется "сброс по совпадению" при котором модуль счета таймера как раз и будет число забитое в ОСR, а вот в режимах FastPWM или FaseCorreсtPWM - тут совсем другая песня.
-
kotbimigot
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
Re: Мелкие вопросы по МК и ПЛИС.
прочитайте даташит, раздел TIMER -> modes of operation
у 8битных таймеров AVR 4 режима
у 16битных 16!
режимы отличаются друг от друга кучей нюансов, не только значениями TOP и BOTTOM
еще оч важно, в каких прерываниях что грузить и в какие регистры
у 8битных таймеров AVR 4 режима
у 16битных 16!
режимы отличаются друг от друга кучей нюансов, не только значениями TOP и BOTTOM
еще оч важно, в каких прерываниях что грузить и в какие регистры
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
есть программатор avr910 usb. какой прогой через него прошить attiny24a? в моей авр студио (версия 4.18, 716 билд) авр прог этот контроллер не шьет. понипрог вроде тоже нет, по крайней мере в списке поддерживаемых микросхемок моей нет. может, она один-в-один похожа с какой-то другой по фьюзам ?
решено. скачал cvavr, пол-часика попарился, прошил:)
решено. скачал cvavr, пол-часика попарился, прошил:)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
Как обрабатывать энкодер?
Порылся в поиске, много устройств с энкодерами но нет четкого описания как его обрабатывать контроллером.
Алгоритм.
Поделитесь ссылками и информацией?
Хочу удобное управление меню сделать.
Задача в общем накручивать счетчик вперед и назад.
Алгоритм.
Поделитесь ссылками и информацией?
Хочу удобное управление меню сделать.
Задача в общем накручивать счетчик вперед и назад.
- Леонид Иванович
- Друг Кота
- Сообщения: 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: Мелкие вопросы по МК и ПЛИС.
Подскажите пожалуйста по микроконтроллерам, можно ли выносить дополнительные функции, во внешнюю флэш память (отдельную микросхемку)
к примеру чтоб не захламлять память контроллера, вынести некоторые функции и возможно еще какиенибуть данные во внешнюю микросхемку память и потом обращаться из кода контроллера к этой памяти...
думаю данные считать проблем нет, например какието параметры...
а вот чтоб функции вынести в память, это интересно...
возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста
к примеру чтоб не захламлять память контроллера, вынести некоторые функции и возможно еще какиенибуть данные во внешнюю микросхемку память и потом обращаться из кода контроллера к этой памяти...
думаю данные считать проблем нет, например какието параметры...
а вот чтоб функции вынести в память, это интересно...
возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста



