Сообщение от 7Fantomas7
|
Вобшем чегот туплю.
|
Это точно
Сообщение от 7Fantomas7
|
eeprom volatile unsigned char zadanie_U; //переменная задание для источника напряжения
|
Вы ее хотите держать в EEPROM, допустимо... но, конкретное значение ей изначально Вы не присовоили.
Идем дальше ("ключ на старт":
Сообщение от 7Fantomas7
|
if (zadanie_U==0){ //если задание напряжения равно 0
zadanie_U=1; //записываем минимальное значение задания напряжения
}
|
Условие IF в данном случае неверно, поскольку мы (т.е. Вы) не задали изначально
zadanie_U=0. Таким образом, то что в фигурных скобках пропускается... zadanie_U у Вас равно 255. И чего же Вы ожидали?
Аналогичная картина у Вас и с zadanie_I. Так что не надо тупить - пора "точить". Программирование не терпит неопределенностей. Я уже много раз приводил цитату:
"Водитель где-то тут или, ну где-то там маршрутку не останавливает."
И еще пара-тройка нюансов.
1. Окно AVR EEPROM доступно для включения при паузе симуляции через меню Debug=›AVR можете полюбоваться, что оно у Вас, как и у любого МК Atmel по умолчанию расписано FF, но никак не нулями.
2. Присвоение eeprom-овской переменной значения непосредственно при декларации в глобальных переменных (Лебедев параграф 4.15) в CVAVR 1.25 для Протеуса не работает. Не помню, как в более новых версиях CVAVR, - там были какие то изменения, касающиеся EEPROM, я че-то завис на 1.25.9. В нем работает так: в глобальных объявляем, затем в main при инициализации всякой требухи - портов, таймеров и т.д. - присваиваем (а это фактически операция записи в EEPROM) нужное значение.
3. Вы так лихо заруливаете с записью в EEPROM на 16Мгц тактовой, что аж в "ушах ветер свистит". Енто штука для записи медленная, цикл записи байта может растянуться до 4мсек, да тому же не очень дружит с вклинивающимися прерываниями. А очень похоже, что наш дока - Тень со товарищи этот тормоз EEPROM в модели реализовал, и не ждите, что значение свалится в ПЗУ буквально на следующем шаге симуляции программы.
4. Не забудьте, что Протеус запоминает при остановке симуляции (не паузой, а СТОПОМ) предыдущее состояние EEPROM. Если надо все начать с исходного для "обнуления" , вернее об-'FF'-ивания (ГЫ - во я блин термин загнул) используйте Debug =› Reset Persistent Data.
5. Можно добавить содержимое любой ячейки EEPROM в Watch Window, если выбрать ее по адресу как на картинке. Название в Watch не обязательно должно совпадать с названием в программе, главное - чтоб адрес совпал. Когда Вы объявляете их в CVAVR - они последовательно заполняют EEPROM начиная с нулевого 0x0000 и далее в зависимости от размера (char - байт, int - 2, массив - сколько зададите и в зависимости от типа).
Так что, "точите" - Протеус Вам в помощь.