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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

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

Сообщение Dmitriy Karpov »

Ну вот таймер отсчитал положенное кол-во импульсов, сработало прерывание, и в обработчике на тактовой частоте пропали 3 периода пока таймер обнулялся.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Вы немного не так считаете. Когда прерывание возникло, таймер уже обнулился сам. Пока мы войдем в прерывание пройдет 8 тактов!, прежде чем начнется выполнение обработчика - 4 такта на реакцию, и 4 такта на сохранение адреса возврата в стеке. потом только таймер начнет обнуляться за 3 такта еще раз.

Вообще, эти все "блохи" решаются просто - введи коррекцию хода часов. Каждое прерывание накапливай счетчик, когда он будет равен определенному значению - прибавь к времени ЕЩЕ ОДИН квант времени, или просто пропусти это прерывание. Прибавление кванта ускорит ход, вычитание замедлит. Чем больше значение счетчика при котором выполняется сие действие, тем ближе коррекция времени к нулю. Если будешь добавлять или пропускать каждый второй такт - это будет коррекция хода +-50%. Несложно просчитать через сколько тактов надо пропустить/добавить чтобы ускорить или замедлить ход часов на необходимую величину.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Еще один момент, при инициализации регистра компаратора нужно вычесть единицу, т.к. счетчик ноль тоже считает и тогда получается у нас не 62500, а 62501.

Код: Выделить всё

           ldi Temp,high(62500-1) ;таймер считает от 0 до 62499
           out OCR1AH,Temp
           ldi Temp,low(62500-1)
           out OCR1AL,Temp
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Alexeyslav писал(а):Вы немного не так считаете. Когда прерывание возникло, таймер уже обнулился сам. Пока мы войдем в прерывание пройдет 8 тактов!, прежде чем начнется выполнение обработчика - 4 такта на реакцию, и 4 такта на сохранение адреса возврата в стеке. потом только таймер начнет обнуляться за 3 такта еще раз.

Счетчик работает на деленной частоте, и увеличится он только после 256 машинных тактов, такты на вход в обработчик можно игнорировать.
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

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

Сообщение Dmitriy Karpov »

А какая нам вообще разница сколько там тактов проходит после того как таймер досчитал до нужного значения. Всё это (реакция на переполнение, обработка прерывание, стек, индикация) дает лишь задержку при отображении на дисплей. Да и она не такая уж большая т. к. обрабатывается все на тактовой частоте. Главное что таймер отсчитал сколько нужно и начал заново, а за время пока он считает все процедуры обработаются.
А за 62500-1 спасибо - реальный косяк, исправил. Считай половину погрешности отрезали.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Нельзя. Поскольку когда сбрасываешь счетчик, сбрасывается и предделитель. Если его сбросить в состоянии +11 тактов, следующее событие возникнет на 11 тактов позже. Причем такты - это такты контроллера, а не такты таймера после предделителя. Каждый такт таймера будет 256+11 тактов кварца.
Если не сбрасывать таймер в прерывании принудительно конечно же такой проблемы нет.
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

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

Сообщение Dmitriy Karpov »

Alexeyslav писал(а):Нельзя. Поскольку когда сбрасываешь счетчик, сбрасывается и предделитель. Если его сбросить в состоянии +11 тактов, следующее событие возникнет на 11 тактов позже. Причем такты - это такты контроллера, а не такты таймера после предделителя. Каждый такт таймера будет 256+11 тактов кварца.
Если не сбрасывать таймер в прерывании принудительно конечно же такой проблемы нет.


Я уже убрал это принудительное обнуление в обработчике, так что по идее эти 8 тактов не влияют.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Не думаю, что предделитель тоже сбрасывается, не уверен.
Во-вторых в программе таймер в режиме СТС, счетчик сбрасывается при совпадении и обнулять его конечно же повторно нельзя.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

когда устанавливаешь принудительное значение таймера - предделитель сбрасывается, это описано в даташите.
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

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

Сообщение Dmitriy Karpov »

Ещё такой вопрос. Я там в проге целый регистр отвел для магающего двоеточия. Не слишком ли это жирно? Может есть другой способ узнавать о том что наступило прерывание?
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

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

Сообщение 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? Городить массив как выше очень не хочется.

Код: Выделить всё

EEPROM_write(EEPR_FRQ_ADDR,FreqNum);

Так тоже не пойдет, потому что будет перезаписываться все время. А мне нужна только начальная установка, потом эта ячейка будет перезаписываться новыми значениями и запоминаться последнее состояние.

почитал здесь, http://radiokot.ru/forum/viewtopic.php?f=20&t=37981 но мало что понял. Тут советуют общаться не к ячейкам напрямую, а через EEMEM.
А как тогда записывать скажем в ячейку 3?

Спасибо
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Там же приведен пример в этом посте.

Вообще если хотите записать только в одну ячейку к ней и обращайтесь.

Код: Выделить всё

eeprom_write_byte(&eePrg[3]); 

Вроде так смещение делается.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Проблемы ищите на ровном месте... на ассемблере это очень просто реализуется, даже в даташите есть пример с записью в EEPROM на ассемблере и на С.
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

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

Сообщение Prosperous »

Да я как бы написал и объяснил, почему мне стандартный вариант из даташита не подходит
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

А какой это метод записи в EEPROM, не соблюдает алгоритм записи стандартного? На вход подается адрес ячейки и данные для записи. Какое отличие может быть у нестандартного?

Собственно, если вам надо хранить какие-то данные которые часто меняются но их надо запоминать при обесточивании - храните их в RAM!!! EEPROM здесь вообще не при делах, она задействуется только при исчезновении питания и начальной загрузке.
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

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

Сообщение Prosperous »

Ну так я и спрашиваю, правильно я делаю начальную загрузку или нет? А насчет хранения в RAM так она вроде как быстрее изнашивается чем EEPROM. Разве нет?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

RAM? Изнашивается? :shock:
Это такое же ОЗУ (оперативная память), как у вас на компьютере.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Alexeyslav писал(а):Собственно, если вам надо хранить какие-то данные которые часто меняются но их надо запоминать при обесточивании - храните их в RAM!!! EEPROM здесь вообще не при делах, она задействуется только при исчезновении питания и начальной загрузке.

Здрасте :shock: , как раз чтобы сохранить данные без питания их помещают в EEPROM, а RAM без питания ничего не сохраняет.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Имелась ввиду запись в EEPROM при отключении питания.
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

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

Сообщение Prosperous »

Друзья, ну ответьте, кто - нибудь. Правильно я делаю начальную инициализацию EEPROM или нет??? И еще, а как размазывать данные в ячейках памяти? Их же как-то отслеживать надо.
Ответить

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