Страница 370 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 19:07:53
Dmitriy Karpov
Ну вот таймер отсчитал положенное кол-во импульсов, сработало прерывание, и в обработчике на тактовой частоте пропали 3 периода пока таймер обнулялся.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 19:25:53
Alexeyslav
Вы немного не так считаете. Когда прерывание возникло, таймер уже обнулился сам. Пока мы войдем в прерывание пройдет 8 тактов!, прежде чем начнется выполнение обработчика - 4 такта на реакцию, и 4 такта на сохранение адреса возврата в стеке. потом только таймер начнет обнуляться за 3 такта еще раз.
Вообще, эти все "блохи" решаются просто - введи коррекцию хода часов. Каждое прерывание накапливай счетчик, когда он будет равен определенному значению - прибавь к времени ЕЩЕ ОДИН квант времени, или просто пропусти это прерывание. Прибавление кванта ускорит ход, вычитание замедлит. Чем больше значение счетчика при котором выполняется сие действие, тем ближе коррекция времени к нулю. Если будешь добавлять или пропускать каждый второй такт - это будет коррекция хода +-50%. Несложно просчитать через сколько тактов надо пропустить/добавить чтобы ускорить или замедлить ход часов на необходимую величину.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 19:31:05
zero648
Еще один момент, при инициализации регистра компаратора нужно вычесть единицу, т.к. счетчик ноль тоже считает и тогда получается у нас не 62500, а 62501.
Код: Выделить всё
ldi Temp,high(62500-1) ;таймер считает от 0 до 62499
out OCR1AH,Temp
ldi Temp,low(62500-1)
out OCR1AL,Temp
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 19:39:46
zero648
Alexeyslav писал(а):Вы немного не так считаете. Когда прерывание возникло, таймер уже обнулился сам. Пока мы войдем в прерывание пройдет 8 тактов!, прежде чем начнется выполнение обработчика - 4 такта на реакцию, и 4 такта на сохранение адреса возврата в стеке. потом только таймер начнет обнуляться за 3 такта еще раз.
Счетчик работает на деленной частоте, и увеличится он только после 256 машинных тактов, такты на вход в обработчик можно игнорировать.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:03:51
Dmitriy Karpov
А какая нам вообще разница сколько там тактов проходит после того как таймер досчитал до нужного значения. Всё это (реакция на переполнение, обработка прерывание, стек, индикация) дает лишь задержку при отображении на дисплей. Да и она не такая уж большая т. к. обрабатывается все на тактовой частоте. Главное что таймер отсчитал сколько нужно и начал заново, а за время пока он считает все процедуры обработаются.
А за 62500-1 спасибо - реальный косяк, исправил. Считай половину погрешности отрезали.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:06:02
Alexeyslav
Нельзя. Поскольку когда сбрасываешь счетчик, сбрасывается и предделитель. Если его сбросить в состоянии +11 тактов, следующее событие возникнет на 11 тактов позже. Причем такты - это такты контроллера, а не такты таймера после предделителя. Каждый такт таймера будет 256+11 тактов кварца.
Если не сбрасывать таймер в прерывании принудительно конечно же такой проблемы нет.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:16:59
Dmitriy Karpov
Alexeyslav писал(а):Нельзя. Поскольку когда сбрасываешь счетчик, сбрасывается и предделитель. Если его сбросить в состоянии +11 тактов, следующее событие возникнет на 11 тактов позже. Причем такты - это такты контроллера, а не такты таймера после предделителя. Каждый такт таймера будет 256+11 тактов кварца.
Если не сбрасывать таймер в прерывании принудительно конечно же такой проблемы нет.
Я уже убрал это принудительное обнуление в обработчике, так что по идее эти 8 тактов не влияют.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:30:14
zero648
Не думаю, что предделитель тоже сбрасывается, не уверен.
Во-вторых в программе таймер в режиме СТС, счетчик сбрасывается при совпадении и обнулять его конечно же повторно нельзя.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:32:41
Alexeyslav
когда устанавливаешь принудительное значение таймера - предделитель сбрасывается, это описано в даташите.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 09, 2012 20:57:51
Dmitriy Karpov
Ещё такой вопрос. Я там в проге целый регистр отвел для магающего двоеточия. Не слишком ли это жирно? Может есть другой способ узнавать о том что наступило прерывание?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 11, 2012 08:09:22
Prosperous
Здравствуйте, возник вопрос по работе с EEPROM. Работаю в WinAvr. Сейчас я начальные значения в МК записываю так
Код: Выделить всё
uchar eePrg[66] EEMEM = {
{0xFF},
{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},{0x00},
{0x00},{0x00}
};
Это, наверное, не есть правильно. Вопрос такой:
1. Правильно ли я делаю, или нужно по другому
2. А как начальные значения записать скажем в ячейку EEPROM F3? Городить массив как выше очень не хочется.
Так тоже не пойдет, потому что будет перезаписываться все время. А мне нужна только начальная установка, потом эта ячейка будет перезаписываться новыми значениями и запоминаться последнее состояние.
почитал здесь,
http://radiokot.ru/forum/viewtopic.php?f=20&t=37981 но мало что понял. Тут советуют общаться не к ячейкам напрямую, а через EEMEM.
А как тогда записывать скажем в ячейку 3?
Спасибо
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 11, 2012 11:57:40
vitalik_1984
Там же приведен пример в
этом посте.
Вообще если хотите записать только в одну ячейку к ней и обращайтесь.
Вроде так смещение делается.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 11, 2012 18:58:24
Alexeyslav
Проблемы ищите на ровном месте... на ассемблере это очень просто реализуется, даже в даташите есть пример с записью в EEPROM на ассемблере и на С.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 11, 2012 20:20:12
Prosperous
Да я как бы написал и объяснил, почему мне стандартный вариант из даташита не подходит
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт окт 11, 2012 21:35:21
Alexeyslav
А какой это метод записи в EEPROM, не соблюдает алгоритм записи стандартного? На вход подается адрес ячейки и данные для записи. Какое отличие может быть у нестандартного?
Собственно, если вам надо хранить какие-то данные которые часто меняются но их надо запоминать при обесточивании - храните их в RAM!!! EEPROM здесь вообще не при делах, она задействуется только при исчезновении питания и начальной загрузке.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 12, 2012 07:19:44
Prosperous
Ну так я и спрашиваю, правильно я делаю начальную загрузку или нет? А насчет хранения в RAM так она вроде как быстрее изнашивается чем EEPROM. Разве нет?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 12, 2012 07:25:24
ploop
RAM? Изнашивается?
Это такое же ОЗУ (оперативная память), как у вас на компьютере.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 12, 2012 09:15:18
zero648
Alexeyslav писал(а):Собственно, если вам надо хранить какие-то данные которые часто меняются но их надо запоминать при обесточивании - храните их в RAM!!! EEPROM здесь вообще не при делах, она задействуется только при исчезновении питания и начальной загрузке.
Здрасте

, как раз чтобы сохранить данные без питания их помещают в EEPROM, а RAM без питания ничего не сохраняет.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 12, 2012 09:20:54
ploop
Имелась ввиду запись в EEPROM при отключении питания.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт окт 12, 2012 10:47:38
Prosperous
Друзья, ну ответьте, кто - нибудь. Правильно я делаю начальную инициализацию EEPROM или нет??? И еще, а как размазывать данные в ячейках памяти? Их же как-то отслеживать надо.