Перейти к содержанию
    

Nikkolaj

Участник
  • Постов

    206
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Nikkolaj


  1. Я их считывал... Для всех четырёх частот в МК были одни и те же значения. Подозреваю, что в МК один генератор на 8МГц, а остальные частоты получают путем деления этой частоты...

     

    Ради интереса я тоже сейчас попробовал их прочитать.

    Под руками был ATmega128, значения оказались разными, от 0x9B до 0xA1.

    Сомнительно, что это один генератор и делитель.

    Есть ещё и такой аргумент,

    в типичных характеристиках процентное отклонение частоты для 1МГц как минимум в два раза меньше, чем для 8МГц.

     

    К моему удивлению оказалось что из AVR Studio калибровочные ячейки можно не только прочитать,

    но и сразу записать в любую ячейку как Flash, так и EEPROM.

    Всё оказалось очень просто.

    Я знаю в какую ячейку EEPROM я запишу нужное значение калибровки.

    В программе прочитать его конечно можно и по процедуре чтения EEPROM.

    Но можно ли сделать проще,

    указать компилятору разместить мою переменную, например Calibr8, именно по этому адресу EEPROM ?

    Тогда даже не надо будет задумываться над процедурой чтения EEPROM.

    Можно ли это сделать в Code Vision AVR ?

  2. Спасибо за ответ.

     

    Если программа в регистр OSCCAL ничего не заносит, то в него записываются "заводское значение" определенное для указанных в DS напряжении питания и температуре. Погрешность частоты при этих напряжении и температуре 3% или 10% (значение указано в DS, конкретно для mega8A - 3% при 5V и 25°C.).

     

    Насколько я понял, Если программа в регистр OSCCAL ничего не заносит,

    то в него по сбросу записывается "заводское значение" для частоты 1МГц,

    не зависимо от того, какую частоту мы зададим в конфигурационных ячейках.

    Это значение для другой частоты, например 8МГц, может совсем и не подходить.

    Заводское калибровочное значение для частоты, отличной от 1МГц, в регистр OSCCAL надо по сбросу записать в программе.

    Я правильно понял?

  3. Спасибо за ответы.

    Почитал указанную документацию, в основном понятно.

    Только программу к AppNote "AVR053: Calibration of the internal RC oscillator" я не смог найти, подскажите...

     

    Хочется разобраться в возможностях внутреннего RC генератора на частоте 8МГц.

    Задачи бывают разные, и требования к точности генератора тоже.

    Скажите, правильно ли я понял, что:

    1. если ничего не записывать в калибровочный регистр OSCCAL,

    то гарантируемая изготовителем точность частоты будет +\- 10%, это в температурном диапазоне -40\+80С .

    2. если записать заводское значение из калибровочной ячейки в калибровочный регистр OSCCAL,

    то точность частоты будет +\- 3%, это при 25С,

    а в температурном диапазоне -40\+80С надо добавить ещё примерно 2-2,5%,

    в зависимости от контроллера, итого будет +\-5%.

    3. если производить калибровку по внешней образцовой частоте, то можно получить точность

    +\-1% в температурном диапазоне -40\+80С.

  4. Добрый день.

    Хочу использовать в AVR контроллере внутренний генератор с частотой отличной от 1МГЦ.

    Хочу произвести калибровку этой частоты.

    Понимаю, что при программировании надо прочитать соответствующую калибровочную ячейку,

    и записать её в определённый адрес ( например последний ) FLASH или EEPROM.

    А в начале программы перезаписать его в калибровочный регистр OSCCAL.

    Подскажите пожалуйста, как разместить переменную в конкретную ячейку FLASH памяти, или в EEPROM.

  5. В HELP STUDIO действительно указано что watshdog поддерживается не для всех контроллеров.

    Правда, для моего ATmega16 написано что поддерживается.

    Но это уже не имеет большого значения, попробовал программу в железе, она работает, это главное.

    Будем считать что это баг симулятора, и следуя разумному совету от GDI, буду спокойнее к ним относится.

    Спасибо всем за советы.

     

    To ILYAUL.

    Выходим из симмулятора и забываем его как кошмарный сон

    Хорошо, а чем пользуемся взамен симулятора?

     

    Кстати, подскажите как Вы вставляете в текст цитаты.

    Я щёлкаю по иконке цитата, затем копирую нужный текст, и вставляю его между двух quote.

    При этом цитата получается без верхне заглавной строчки.

     

     

  6.  

    Где вы там нашли счётчик watchdog-а?

    В AVR Studio, в окне Processor есть Stop Watch именно он и не сбрасывается

    по ассемблерной команде wdr.

    В результате симулятор через определённое время делает Reset.

     

    PS Какой контроллер?

    Контроллер ATmega16.

     

    Другое дело, что вочдог перед применением следует разрешить, и на разных процах эта процедура может быть разной.

    Вочдог в программе конечно разрешён,

    возможно его сброс нужно дополнительно разрешать какими то опциями в симуляторе?

  7. Добрый день.

    При отладке программы на AVR Studio, versia 4.19

    команда wdr (watch dog reset) не обнуляет счётчик сторожевого таймера.

    Для отладки программы пришлось выключить сторожевой таймер.

    Не подскажете, в чём может быть причина?

  8. Если запихнуть обработчик программного SPI в таймер (сделать что-то на подобие диспетчера задач), то проблемма уйдет сама собой и ничего прерывать не нужно будет....

     

    Спасибо за ответ, идея действительно красивая и неожиданная для меня.

    Сейчас просчитывал как её реализовать.

    К сожалению для этой задачи она не подойдёт по скорости.

    Сейчас у меня время ожидания между действиями составляет 10-12 машинных тактов.

    Вставить в это время диспетчер задач не получается.

    Наверное диспетчер задач применяется для более медленных задач.

    А вообще предложение интересное, возможно применю его в других задачах.

    Ещё раз благодарю.

     

     

    to xemul.

    Спасибо за ответ.

    Свой предыдущий пост я начал писать до того, как увидел Ваше сообщение,

    поэтому получилось такое несколько несуразное смещение ответов. Извините.

     

    Наши расчёты допустимого прерывания практически совпадают.

    Это внушает оптимизм.

    Попробую делать с прерыванием, тем более что его удалось уменьшить, и он будет не больше 10мкс.

     

     

     

  9. Предполагаю, что ограничение частоты снизу вызвано не возможностью SPI порта АЦП,

    а процессом разряда во времени входного конденсатора Сsample, на котором хранится измеряемое напряжение.

    При минимальной частоте 85кГц цикл измерения будет примерно 150мкс.

    Думаю что это и есть то время, которое конденсатор держит измеряемое напряжение с достаточной точностью.

    Я работаю на частоте 400кГц, соответственно цикл измерения у меня будет примерно 30мкс.

    Получается, что я могу прервать свой цикл измерения в любом месте примерно на 150-30= 120мкс.

    Но полной уверенности в этом у меня нет, поэтому и спрашиваю.

     

  10. Добрый день.

    У меня такой вопрос.

    Работаю с АЦП MCP3301.

    Управляю им с помощью программного SPI на частоте 400кГц.

    Аппаратный SPI занят другими задачами.

    Во время измерения может поступить прерывание, на которое я обязан ответить,

    и соответственно прервать посылки на MCP3301.

    Спрашивается, на какое время можно прервать посылки на MCP3301 без потери точности измерения ?

    В документации сказано, что минимальная частота = 85кГц.

  11. Обычно SS у каждого slave свой - соответственно адрес в протоколе не нужен.

    Это и есть стандартное использование SPI.

     

    Да, я понимаю что стандартное использование SPI именно такое, но у меня в шине SPI только 4 провода, и больше просто нет.

    Поэтому придётся адрес slave передавать в посылке.

     

    А что на счёт стандартных протоколов, они существуют?

     

     

  12. Тормозить будет если поступают прерывания также и из других источников. Если прерывание от SPI придёт во время того как обрабатывается другое прерывание, то выполнить SPDR=*TxData++; вовремя она может и не успеть.

    В таком случае целесообразно в программе ведущего предусмотреть паузу перед выдачей следующего байта.

    Величину паузы выбрать достаточной, для того что бы ведомый надёжно успевал загружать данные.

     

     

    В развитие этой темы.

    О протоколах передачи данных для подобных задач.

    Для организации передачи данных по SPI между одним ведущим и несколькими ведомыми

    существуют какие либо стандартные протоколы?

    Или каждый разработчик пишет свой протокол?

    Особенностью задачи является то, что сигнал SS один для всех ведомых,

    т.е. ведущий задаёт адрес ведомого в протоколе.

     

  13. Ссылки на глобальные переменные можно собрать в одном заголовочном файле (какой-нибудь globvar.h, не забыть сделать стражи вкючения в нем) и использовать в других файлах с кодом.

     

    Спасибо за ответ.

    Я тоже думал обявить все глобальные переменные в одном globvar.h файле.

    Что такое СТРАЖИ ВКЛЮЧЕНИЯ, и как ими пользоваться ?

     

    Но в HELP для Сode Vision написано что

    обявление глобальных переменных должны быть установлены в файлах с расширением С. ( а, не h )

     

    Цитата из HELP для Сode Vision:

    · global variables declarations must be placed in the .C files where necessary

    · there's no need to declare global variables, that are not static, in header .H files, because if these files will be #include -ed more than once, the compiler will issue errors about variable redeclarations.

     

    Попробовал обявить их во всех С файлах где они используются, компилятору это не нравится.

    Подскажите как правильно.

     

  14. Добрый день.

    Спасибо за дистрибутив, я его скачал, но устанавливать пока не стал.

    Я нашёл в чём была ошибка.

    Я подключал к проекту все 3 файла в конфигурации по add files, а

    в filemain.c у меня были директивы #include file1.c, #include file2.c.

    Двойное подключение файлов компилятору и не нравилось.

    Сейчас решил переделать правильно.

    Из файла filemain.c директивы #include file1.c, #include file2.c удалил.

    Добавил файл glob_defs.h для всех #define, и подключил его к нужным файлам.

     

    Посоветуйте пожалуйста,

    как праильно поступить с обявлением глобальных переменных,

    которые используются в разных файлах.

  15. Спасибо за ответ.

    Хорошо, дайте Ваш дистрибутив, попробую переставить.

     

    Путь без русских букв?

     

    Да, путь без русских букв.

    Он вообще формирует только один файл с расширением .о filemain.о

  16. Добрый день.

    У меня такой вопрос.

    Есть у меня проект, который я когда то сделал на Сode Vision AVR версия 1.25.9.

    Контроллер ATmega16.

     

    Возникла необходимость внести изменения в алгоритм.

    С Сode Vision AVR я уже давно не работал, перешёл на IAR.

    Поставил новую версию Сode Vision AVR, версия 2.05.0.

    Компилируется проект нормально.

    А при построении проекта выдаёт сообщение: Cant open file: ....\file1.o

     

    Проект состоит из 3 СИ файлов, назовём их

    filemain.c

    file1.c

    file2.c

     

    И двух header. файлов:

    file1.h

    file2.h

    В проект включены только СИ файлы, а header файлы подключены директивой #include.

     

    В окне навигатора, в папке Проекта естественно находятся все три СИ файла.

    После компиляции, в папке Проекта так и остаются три СИ файла,

    а вот в папке Headers почему то находятся и СИ файлы, и Headers файлы:

    file1.c

    file1.h

    mega16.h

    file2.c

    file2.h

     

    Почему компилятор помещает file1.c, file2.c в папку Headers я не понимаю.

    Пробовал менять конфигурацию проекта, результат такой же.

     

    Посоветуйте что то толковое.

     

    Не знаю, имеет ли это значение, но всё же, проект создавался под ОС Windovs XP, а сейчас стоит Windovs.7

    Вроде бы вся информация.

     

     

     

  17. Да, я понимаю что при изменении частоты в диапазоне 45 - 55Гц,

    ДСП даст погрешность существенно выше, чем 1%.

    Поэтому я планировал помимо измерения, следить за частотой,

    и соответственно, периодически корректировать время между отсчётами.

    Интересно, при каком изменении частоты, нужно начинать коррекцию.

     

    К сожалению, я пока не знаю что такое адаптивный алгоритм.

    Это то, что я написал, или что то другое?

     

    Да, Вы правы, в пром сетях действительно далеко не чистый синус.

×
×
  • Создать...