Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/33: Рейтинг темы: голосов - 33, средняя оценка - 4.55
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
1

Требуется помощь зала: AVR, C, WinAVR, EEPROM

04.11.2014, 17:43. Просмотров 5964. Ответов 13
Метки нет (Все метки)

Разбираюсь тут с паяльной станцией по проекту eSol (версия 4.1). Есть некоторые «косяки» в работе. Насколько я могу понять, в модуле os.c некорректно объявлены переменные, хранимые в EEPROM-памяти (поскольку отсутствует/не создается файл для EEPROM).

Код
#define TEMP_EEPROM_ADDR          (0x0003)
#define KBD_AVOYLABLE_EEPROM_ADDR (0x0005)
Может ли «О всемогущий и всесведущий Ott!» проверить, верно ли моё предположение, по исходникам прошивки?

И, если возможно, – дайте совет о том, как их *необходимо «переобъявить», чтобы при сборке создавался файл и для EEPROM тоже? Автору я ремарку кинул, но как-то там безблагодатно всё пока что...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2014, 17:43
Ответы с готовыми решениями:

WinAVR или AVR Toolchain
Какой из этих компиляторов предпочтительнее использовать? WinAVR уже не развивается, вроде....

Ошибка при компиляции AVR Studio 4 & WinAVR
Сваял Hello World: // ok #include <util/delay.h> #include <avr/iotn13.h> void main(viod) {...

AVR studio, Winavr и компиляция нескольких файлов
Здравствуйте, вопрос наверное глупый, поскольку гугл по этому поводу молчит. Есть урок по...

WinAvr или MickroC for Avr кто оптимальнее?
Добрый день. Хочу спросить совета и людей использующих оба этих компилятора. Столкнулся с...

V-USB winAVR AVR studio +makefile проект не собирается
Пробую собрать hid-mouse 1) make hex работает проект собирает мышка крутит курсор. 2) в AVR...

13
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
04.11.2014, 19:17 2
они читаются/пишутся руками через eeprom_write_byte/eeprom_read_byte, то что оно как __eeprom не определено и не проинициализировано при прошивке - не страшно, после первого включения перезапишется нужными значениями.
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
04.11.2014, 19:30 3
Ну, теоретически-то оно всё так. Но вот в данном случае, как мне кажется, в KBD_AVOYLABLE_EEPROM_ADDR должен лежать признак: снабжена станция кнопками или нет. От этого танцует алгоритм сохранения настроек и т.п.
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
04.11.2014, 19:41 4
if (OS_u8KeyboardAvailable != KEYBOARD_AVOYLABLE)
{
/*Store the tost "temperature" set to EEPROM */
eeprom_write_byte((uint8_t*) KBD_AVOYLABLE_EEPROM_ADDR,KEYBOARD_AVOYLABLE);
}

если при отсутствующей OS_u8KeyboardAvailable != 1 клавиатуре кто-то вдруг нажмет на кнопку оно в еепроме запишется что клавиатура есть и в следующий раз всё уже будет как надо.
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
04.11.2014, 19:50 5
Спасибо!
0
Omotot81
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 4
04.11.2014, 22:10 6
Есть вопросы по надежности к исходнику. Например, насколько я понял при беглом взгляде: Ось по кругу вызывает функции, в том числе OS_vCyclicTask200ms().
Та в свою очередь вызывает функцию OS_vTemperatureRegulator(). В ней есть неатомарное обращение к 16-битной переменной OS_i16TargetTemp. А эта переменная активно изменяется в прерывании.
Это безопасно с точки зрения Чернобыля?
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
05.11.2014, 00:34 7
Боюсь, что так и задумано. В прерывании делается замер.
0
Omotot81
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 4
05.11.2014, 12:53 8
Цитата Сообщение от trymktor
Боюсь, что так и задумано. В прерывании делается замер.
Нуну. И, кроме замера, еще успеет за 1 мс системного кванта иногда сделать eeprom_write_word?
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
05.11.2014, 13:07 9
Это не моё авторство (1) и я хреново знаю практически не знаю Си (2).
Так что выражайтесь яснее :)
0
Omotot81
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 4
05.11.2014, 13:58 10
Цитата Сообщение от trymktor
Это не моё авторство (1) и я хреново знаю практически не знаю Си (2).
Так что выражайтесь яснее :)
Да что там яснее... Тик ОС 1 мс. Вы пишете, что все меряется в прерывании. Я вижу, что в некоторых случаях есть обращение на запись EEPROM, которая не поместится в 1 мс, значит, прерывания от ОС могут прервать задачи в самых неподходящих случаях, т.е. при обращении к 2-байтовой переменной. И спрашиваю: не чревато ли здесь это последствиями.
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
05.11.2014, 14:06 11
Ну, в принципе да, это может быть причиной наблюдающихся странностей (как то: не запоминает температуру по кнопке, но не запоминает ее и без кнопки, + некоторые глюки со спящим режимом). Насколько я понимаю, тут можно попробовать увеличить длительность тика ОС? Учитывая при этом то, что процесс измерения выполняется 50 раз в секунду (при переходе питающего выпрямитель напряжения через ноль), т.е. через каждые 20 мс (предполагаю, что в прерывании по нулю сигнала, сообщающего о переходе через ноль).

Какую величину тика вы могли бы посоветовать (и где это править)?
0
Omotot81
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 4
05.11.2014, 14:56 12
Цитата Сообщение от trymktor
Ну, в принципе да, это может быть причиной наблюдающихся странностей (как то: не запоминает температуру по кнопке, но не запоминает ее и без кнопки, + некоторые глюки со спящим режимом). Насколько я понимаю, тут можно попробовать увеличить длительность тика ОС? Учитывая при этом то, что процесс измерения выполняется 50 раз в секунду (при переходе питающего выпрямитель напряжения через ноль), т.е. через каждые 20 мс (предполагаю, что в прерывании по нулю сигнала, сообщающего о переходе через ноль).

Какую величину тика вы могли бы посоветовать (и где это править)?
Править-то легко, в начале функции OS_vInit, величины TCCR0B и OCR0A, но это потянет за собой всю времЯнку оси.
Это большое дело, и надо еще разбираться - в этом ли причина. И еще вопрос - на сколько менять? 2 байта в епром пишутся за ~8-10мс, так что, в 10 раз замедлять? Короче, дело на любителя))
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
05.11.2014, 16:36 13
Понятно, надо будет попробовать.

ps. Вот нахрена аффтар™ весь энтот геморрой в паяльную станцию засунул – мне не понять. Переусложнение безо всякой на то необходимости.
0
trimktor
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 831
13.11.2014, 00:33 14
Вдогонку: глюк с запоминанием распознан.
Заданная текущая T запоминается только при чистом епроме.
Соответственно, потом уже не реагирует. Ладно, хрен с ним.

Но вот выброс (перерегулирование) у PID при включении/смене уставки аж до +25 В...
0
13.11.2014, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2014, 00:33

Отладка в AVR Studio и EEPROM
Коллеги! Прошу помощи. Делаю программу на WinAVR + AVR Studyo 4.19 - на Си. Использую ЕЕПРОМ. ...

CodeVision AVR C работа с EEPROM
На железе не работает, в протеусе все ОК. Как только отключаю запись в eeprom на железе начинает...

Как переписать eeprom с PROTEUS-а в реальный avr?
друзья работаю в cvavr и использую программатор stk-200. в протеусе симмулирую mega8 и в его ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru