Проблема при загрузке программы через программатор
- Войдите на сайт для отправки комментариев
Добрый день, уважаемые форумчане. Столкнулся вот с какой проблемой. Написана и отлажена программа термостата. Программа написана для Нано. Загружается через USB (важно). Программа после запуска сохраняет в постоянной памяти два предустановленных значения : температуру и время. При каждом последующем пуске программа использует эти 2 значения как исходные. Все работает.
Вот эти 2 строки из кода, которые считывают постоянную память:
EEPROM.get(10,min);
EEPRPM.get(20, temp_control);
Дальше появилась проблема. Стал прошивать программатором USBASP. Мне важно шить именно им. Программа НЕ работает. Опытным путем установил, что если закомментировать эти 2 вышеуказанные строки, то при прошивке программатором программа начинает работать исправно (только вместо значений из памяти берутся нулевые значения). Не могу понять в чем проблема. На сколько я понимаю, при прошивке через программатор стирается загрузчик.
То есть программа записаннмя через загрузчик работает. Без загрузчика - нет.
Можете подсказать соображения по решению проблемы? С уважением.
полный код выложите
Как вы определяете, что она НЕ работает, а не РАБОТАЕТ, но НЕ ТАК?
Используется 2 дисплея (темерпатура и время) и 3 кнопки (+ - и Старт). Кнопкой старт (короткое нажатие) выбирается дисплей (выбранный дисплей мигает), Кнопки +/- для установки значения парамертра. Долгое нажатие кнопки Старт - пуск системы. При старте происходит запись установленных значений в посточнную память. При очередном включении системы данные из постоянной памяти сразу выводятся на дисплеи (первонвчально там нули). Это когда все работает (запись через USB). При записи через программатор дисплеи с нулевыми значениями зажигаются исправно, и дальше уже не получается выбрать дисплей и ввести значение.
Ошибка в 73 строке
не смешно, код большой. Прошу идею подсказать
не смешно, код большой. Прошу идею подсказать
Смишно.
EEPROM.get(10,min);
EEPRPM.get(20, temp_control);
Вторая строка непонятно што и откуда читает
EEPROM.get(10,min);
EEPRPM.get(20, temp_control);
Вторая строка непонятно што и откуда читает
Чё там непонятного, пакет линуксовый получает
не смешно, код большой. Прошу идею подсказать
идея очень простая - вероятнее всего, если из ЕЕПРОМа читаются нули - у вас что-то в программе крашится. Так если не хотите показывать код - внимательно проверьте, в каких именно кусках кода участвуют значения. читаемые из ЕЕПРОМ.
Только думаю, что код все же придется выложить. Если б вы сами могли найти ошибку - не пришли бы на форум.
Прошу прощенья
Во второй строке, конечно ошибка, EEPROM
Спасибо, поковыряю. Но почему при загрузке верез USB все работает
Во второй строке, конечно ошибка, EEPROM
А ua6em написал, что в 73 строке. Кому верить??
Но почему при загрузке верез USB все работает
а вот не уверен.
проведите такой эксперимент - ничего не трогайте в программе, только поменяйте адреса чтения из ЕЕПРОМ на какие-нибудь левые, например
EEPROM.get(155,min);
EEPRPM.get(232, temp_control);
и залейте через USB
сегодня проверю
Проверил, при изменении адресов считываемя все работает правильно, только, естественно, при повторном пуске появляются нули, а не ранее введенное значение. При восстановлении адресов отобразились ранее введенные значения.
Проверил, при изменении адресов считываемя все работает правильно, только, естественно, при повторном пуске появляются нули, а не ранее введенное значение. При восстановлении адресов отобразились ранее введенные значения.
Што? Для тупых пропродробнее.
Только думаю, что код все же придется выложить. Если б вы сами могли найти ошибку - не пришли бы на форум.
От себя, клянусь, красть и китайцам продавать не будем.)))
Во второй строке, конечно ошибка, EEPROM
А ua6em написал, что в 73 строке. Кому верить??
Никому верить нельзя, мне можно (с) Мюллер )))
Всем доброго вечера.
Вот версия программы, имитирующей мою проблему. Светодиод и кнопка. Кропкой можно светодиод включить - выключить, при этом состояние светодиода сохраняется в постоянной памяти. То есть, если светодиод горит, то при выключении и включении контроллера он также загорается. И наоборот.
При загрузке через USB порт Нано все исправно работает. Светодиод от кнопки включается - выключается, состояние в память записывается и считывается.
При загрузке через программатор реакции на кнопку нет, счетодиод сразу горит. Программа не работает.
Перед каждой загрузкой программы запускаю очистку EEPROM.
Тот же код, только правильно выложил.
с какого адреса в память и какой бинарник грузите через программатор?
Если средствами IDE то к чему такие извращения?
И еще момент. Если строку 27 закомментировать (чтение из памяти)
27
//
EEPROM.write(100, led_state);
То программа будет исправно работать при ее записи как через USB, так и через программатор. Только, естественно, не будет чтения из памяти.
В чем проблема?
Программа загружаетсчя из IDE.
Если после 26 строки вывести значение статуса Led - хоть раз при переключении кнопкой ноль будет?
Понятно! Питалово проверяли?