Скачать 1.28 Mb.
|
Регистры ввода – выводаhttp://www.avr.nikolaew.org/IOWDT.htm $21 ($41) WDTCR Предназначение сторожевого таймера предельно простое - не допускать "зависания" программы. Будучи включенным, он через определенный интервал времени произведет сброс МК, если в течение этого интервала программа не перезапустит его. Любая программа МК обязательно имеет какой-то бесконечный цикл. Приблизительно зная максимальную длительность этого цикла, делитель таймера устанавливается на заведомо большее время. При старте программы WDT запускается, а в бесконечном рабочем цикле - перезапускается. В случае же ошибки программы (например, зацикливание) перезапуска сторожевого таймера не будет, и через определенное время программа будет сброшена. Зачем это надо? Ну, например, управляет МК двигателем. Запускает двигатель. И после этого где-то зависает -ведь не бывает программ без ошибок - а двигатель-то крутится. Доезжает до ограничения и или ломает его, либо сгорает сам... Это, конечно, грубый пример, но суть ясна. При грамотном конструировании микроконтроллерного устройства при сбросе все воздействия должны быть нейтральными. Тогда при сбросе время неуправляемой работы того же двигателя будет определяться периодом WDT Для того, чтобы включить сторожевой таймер, достаточно установить в 1 бит WDE -Watch Dog Enable. А вот выключить так просто не получится - и сделано это для защиты от тех же сбоев... Для выключения надо проделать следующие действия: Записать одновременно в WDE и WDTOE значения "1" В течение 4-х тактов процессора записать "0" в WDE. Ну а для перезапуска сторожевого таймера в программе используется специальная команда WDR
EEARH $1F, EEARL $1E, EEDR $1D, EECR $1C Энергонезависимая память (точнее, управление ею) представлена четырьмя региcтрами. EEARH и EEARL - это регистр адреса, EEDR - данных, EECR - регистр управления. Энергонезависимая память (далее - EEPROM) может записываться как программатором, так и программой микроконтроллера. Ресурс перезаписей ( по даташиту) не менее 100.000 раз, стирать перед записью (как память программ) не нужно. Время записи байта - не более 4 мс. У рассматриваемого нами МК 8535 объем EEPROM 512 байт, У МК с меньшим объемом (256 байт и менее) регистр EEARH отсутствует. EEPROM очень удобна для хранения настроечных данных и любых запоминаемых параметров работы. Чтение из энергонезависимой памяти предельно просто - нужный адрес занести в EEARH (старший байт) и EEARL (младший байт), установить в "1" бит EERE в регистре EECR и ждать, пока этот бит не обнулится аппаратно. После чего - в регистре EEDR находятся прочитанные данные. Запись немного посложнее. Сначала адрес, куда мы хотим писать, заносится в EEARH и EEARL, так же, как и при чтении. Затем записываемое значение заносится в EEDR. После этого нужно записать "1" в бит EEMWE и после этого записать "1" в бит EEWE. Сделано так для защиты от каких-либо сбоев, чтобы запись в EEPROM происходила только при "осмысленном" обращении. Бит EEMWE сбрасывается аппаратно через несколько тактов МК, делая запись в EEPROM невозможной. После всего вышеизложенного программе остается ждать, когда бит EEWE сбросится в "0". Правда, ждать придется достаточно долго, и если вас это не устраивает - можно разрешить прерывание, установив в "1"бит EERIE. В этом случае программа, выполнив все вышеописанные действия, идет дальше по своим делам (все, кроме работы с EEPROM!), а по окончанию записи произойдет соответствующее прерывание и сообщит программе - готово!
Ну и в завершение - надо обязательно упомянуть одну "тонкость" при работе с EEPROM. В момент включения и выключения питания МК - а относительно скорости работы МК это процесс достаточно медленный - программа может выполняться совершенно непредсказуемо. И если в программе есть хотя бы один фрагмент записи в EEPROM - можете быть уверены, от обязательно выполнится, уничтожив хотя бы один байт EEPROM. Выход из этой ситуации есть лишь один - использовать так называемый супервизор питания. Это такая микросхемка в трехногом корпусе, выпускаемая многими производителями. Две ноги - подключаются к напряжению питания, третья - на пин Reset микроконтроллера. Работает она очень просто - при малом напряжении питания держит МК в режиме сброса. Для того, чтобы не мешала программатору - лучше ее выход подключить в выводу Reset через резистор ~1 кОм В более новых МК фирмы Atmel такое устройство уже встроено в сам МК и режимы работы его задаются fuse-битами. Это МК серий Tiny и Mega. SPDR $0F($2F), SPSR $0E, SPCR $0D ($2D) Интерфейс SPI - синхронный последовательный интерфейс - предназначен для организации обмена между двумя устройствами, причем одно из них является инициатором обмена (master ), второе - пассивное (slave ).
UDR $0C ($2C), USR $0B($2B), UCR $0A($2A), UBRR $09($29) USART, он же асинхронный последовательный интерфейс - на мой взгляд, самый удобный и простой способ стыковки МК и компьютера. Хотя производители уже и поговаривают о том, что RS232 устарел и пора про него забыть, думаю, еще десяток лет он продержится. Принцип его работы достаточно прост и давно известен - взять тот же телеграфный аппарат, если кто помнит :-) Только там тактовым генератором был электродвигатель, а частота вращения настраивалась при помощи камертона. И вместо заумного "асинхронный последовательный..." применялся термин "старт-стопная передача". Рассмотрим прием байта для общего развития. При отсутствии передачи линия находится в состоянии лог. "1" . Признаком начала передачи является так называемый старт-бит, который всегда "0". За ним следуют 8 бит данных, младшим битом вперед. Заканчивается посылка стоп-битом, который всегда "1". Для достоверного обмена требуется точное совпадение скоростей передачи и приема, погрешность допускается не более 2,5%. Отсюда вывод - если планируете использовать USART, то тактовый генератор МК должен работать с кварцем. Приемник по первому спаду - начало старт-бита - синхронизируется, отсчитывает половину периода ( времени передачи одного бита) и проверяет уровень на входе. Если он не "0" - значит, помеха, все отменяется. Если "0" - далее отсчитывает по полному периоду, и вдвигает 0 или 1 в сдвиговый регистр. Когда все 8 бит приняты, отсчитывается еще один период и проверяется наличие на входе "1" - стоп-бита. Если стоп-бит не равен "1", фиксируется ошибка, иначе байт считается принятым. Это, конечно, упрощенное описание, на самом деле все может быть гораздо сложнее. Количество информационных бит может быть различным, в конце (перед стоп-битом) может быть проверочный бит (четность, нечетность), количество стоп-бит также бывает разным... Но для начального ознакомления, думаю, хватит т этого. Отметим, что описанные уровни сигнала относятся к МК! Для компьютерного RS232 лог."1"=-12в, лог."0"=+12в!, поэтому для стыковки МК и компьютера обязательно понадобится схема сопряжения уровней. Для этого существуют специально под эту задачу заточенные микросхемы MAX232, если таковой под рукой не оказалось - можно использовать схему на 590КН4 Теперь рассмотрим регистры, связанные с USART. UDR - в это регистр пишется байт на передачу, из него же считывается принятый байт. Хотя имя (и адрес) одно, физически это разные регистры, поскольку USART полностью дуплексный - приемник и передатчик работают независимо друг от друга (но с одной скоростью). USR - регистр состояния. Описание его бит см. в таблице:
|