Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 10. Использование EEPROM 283 каний усложнится . Причем дпя ATt iпy231 3 внести такие изменения будет проще из-за наличия у него прерываний типа PCINT, но дела зто принципиально не меняет. Текст этой программы, как обычно, можно найти в архиве по адресу, указанному во введении (файл Bright_coпtrol .asm ) . В тексте закомментированы изменения, которые надо внести в случае использования АTmega8 . Аналогичным образом можно реализовать процедуру установки яркости дисплея, например, при динамической индикации на семисегментных линейках. В часах, которые мы показывали в главе 9, можно для этого применить Timer2, который не задействован в индикации и подсчете времени, подключив к его выводу ОС2х клю­ чи управления разрядами через сдвиговый регистр или демультиплексор. Ввиду громоздкости такого проекта мы его здесь не рассматриваем. Хранение констант в EEPROM Рассмотрим практический пример хранения в EEPROM калибровочных констант, необходимых для выполнения расчетов, - например, при переводе «сырых» дан­ ных, получаемых по каналам измерения, в физические величины. Особенность ра­ боты с такими константами в том, что их окончательная величина обычно выясня­ ется лишь при калибровке готового прибора, однако при первом включении кон­ троллера необходимо иметь какие-то ориентировочные величины, иначе он может просто не заработать . Потому нужно обеспечить и первичную загрузку значений по умолчанию и в дальнейшем возможность замены этих значений на «настоящие» . При первичной загрузке можно пойти двумя путями: самый простой заключается в том, чтобы создать ЕЕР-файл по методике, описанной в главе 6, и загружать его в EEPROM отдельно. При отладке программы в дальнейшем можно выключить fusе-бит EESAVE, отвечающий за стирание EEPROM в процессе программирова­ ния flаsh-памяти (см. разд. «Кон ф игурационные ячейки (fиsе-биты)» главы 5), и первоначально введенные значения констант будут сохраняться при последую­ щих перезаписях программы. Недостаток такого подхода - при каких-то манипу­ ляциях в процессе отладки схемы можно, не заметив того, запросто испортить капризную EEPROM (например, случайно подав на какие-то выводы повышенное напряжение) и потом долго недоумевать, почему все перестало работать . Конечно, при отлаженных схеме и программе загрузка данных в EEPROM через отдельный файл предпочтительна с точки зрения простоты. Но за счет усложнения программы можно сделать иначе - тогда содержимое EEPROM по умолчанию будет обеспечиваться автоматически, и вам не придется об этом заботиться даже при случайной ее порче . В таком случае загрузку нужно делать при запуске МК, в процедуре Reset . Но за­ писывать константы каждый раз при включении питания не только не имеет смыс­ ла (тогда проще их хранить прямо в тексте программы), но и крайне неудобно для пользователя: нет ничего хуже устройства, заставляющего себя инициализировать при каждом сбое питания (не идите на поводу у горе-разработчиков бытовых при­ боров, в которых при каждом включении приходится заново устанавливать

RkJQdWJsaXNoZXIy MTExODQxMg==