Мелкие вопросы по МК и ПЛИС.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Дружище! Мы туда пишем, какая разница что там до записи? По поводу обязательного порядка записи читать даташит. А-то хочу-не хочу. Мы может и хотим, да вот железо по своему работает.
Docendo discimus
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
slavokhire5 писал(а):pyzh_man, а не может сложиться такой ситуации, что пока мы сбросили старший регистр, младший досчитал до максимума и записал единичку в старший, уже сброшенный? я из этих соображений написал так
вот чтоб такого не происходило, обычно перед записью в TCNTx обычно останавливают таймер.
Re: Мелкие вопросы по МК и ПЛИС.
Да не обязательно его останавливать, достаточно соблюдать правильный порядок записи, там двойная буферизация.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Там есть над чем плакать и без таймера.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
Уберите из прерывания все, что возможно, и поместите в основной цикл.
Прерывание должно быть коротким, как тост. Только флагами подергать и коротенькие пересылки, все.
Уберите кнопку с внешнего прерывания, лишний гемор не нужен.
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
Включил оптимизацию, задержки организовываю через функцию _delay, из прерывания по совпадению выкинул все лишнее, включая задержку после записи еепром (а это, может, и не лишнее). внешнее прерывание в симуляторе срабатывает один раз без всякого нажатия кнопки и независимо от состояния регистра MCUCR. больше никаких прерываний от контроллера я добиться не смог) счетчик по-прежнему считать не хочет 
- Вложения
-
- odometr2.rar
- (20.07 КБ) 150 скачиваний
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
счетчик считает, я там чуть прибрался и изменил источник сигнала.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Время его записи -10 мс, а Вы вызываете его в прерывании через 3мс.
Ай яй яй.
- Вложения
-
- distance.c
- (6.45 КБ) 289 скачиваний
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Мелкие вопросы по МК и ПЛИС.
спасибо за код. таймер работает, прерывания тоже. методом тыка скорректировал программу как мне нужно) много непонятного, но в свободное время постараюсь разобраться
п.с. это автомобильный одометр, в еепром пишется раз в 1км, а 100к км неплохой пробег (сейчас уже 430к)
п.с. это автомобильный одометр, в еепром пишется раз в 1км, а 100к км неплохой пробег (сейчас уже 430к)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
urry писал(а):Другое дело, что Вы слишком часто пишете в еепром, его ресурс износится в 1 сутки.
Тогда можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron: её можно использовать как ОЗУ, и она энергонезависима!
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Gudd-Head писал(а):urry писал(а):можно посмотреть в сторону ферромагнитной (?) памяти от Ramtron
Скорее, сегнетоэлектрической.
Всё бы ничего, но дорогая она, а главное, много подделок продаётся.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 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: Мелкие вопросы по МК и ПЛИС.
Подскажите пожалуйста по микроконтроллерам, можно ли выносить дополнительные функции, во внешнюю флэш память (отдельную микросхемку)
к примеру чтоб не захламлять память контроллера, вынести некоторые функции и возможно еще какиенибуть данные во внешнюю микросхемку память и потом обращаться из кода контроллера к этой памяти...
думаю данные считать проблем нет, например какието параметры...
а вот чтоб функции вынести в память, это интересно...
возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста
к примеру чтоб не захламлять память контроллера, вынести некоторые функции и возможно еще какиенибуть данные во внешнюю микросхемку память и потом обращаться из кода контроллера к этой памяти...
думаю данные считать проблем нет, например какието параметры...
а вот чтоб функции вынести в память, это интересно...
возможно ли такое? где почитать, может кто имел опыт... поделитесь пожалуйста
