• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO





Работа с BASCOM AVR (обзор статей грамотных людей) 4



Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком  "Карта сайта"







 

Существует много решений. Самое распространённое - подключить матрицу на один порт, подключив строки к старшим разрядам, а столбцы - к младшим. Но мы столкнёмся с небольшой проблемой - при нажатии любой клавиши должно возникать прерывание, и контроллер должен считывать состояние клавиатуры. PIC контроллер вполне справится с такой задачей, но наш AT90S2313 имеет на борту всего два внешних прерывания. Проблему можно устранить, добавив 4 диода и подтягивающие резисторы, чтоб сделать элемент "ИЛИ" на входе Int0:

 


470-омные резисторы защитят контроллер от короткого замыкания питания на землю. Это возможно в теории, но вы можете сделать макет и без них. На входе Int0 висит подтягивающий резистор 10 кОм к плюсу питания. Мы назначим четыре старших бита в PortB на выход, установив на них низкий уровень. Младшие 4 бита будут работать как входы, на них сделаем высокий уровень. Теперь, если нажать клавишу, возникнет соединение между каким-либо столбцом и строкой. Теперь на линии строки появится низкий уровень. Также низкий уровень появится и на строке с диодами, сработает элемент "ИЛИ" и на входе Int0 также появится низкий уровень и вызовет прерывание.

 

Купить

Программаторы, средства разработки и отладки для DSP,
средства разработки и отладки для ПЛИС-ПАИС


В подпрограмме обработки прерывания мы опрашиваем состояние строк, чтобы узнать, на какой из них нажата клавиша. Теперь мы переназначаем старшие биты на вход, а младшие на выход и точно таким же образом определяем, на каком столбце нажата клавиша. После этого выжидаем время "антидребезга". Зная теперь строку и столбец, несложно догадаться, что клавиша нажата на их пересечении. Делаем необходимые выводы, устанавливаем нужные параметры, и возвращаем состояние пинов порта к начальным значениям.

 

Конечно, указанное расположение строк и столбцов сугубо условно, вы сами можете разместить их так, чтобы сократить число линий и упростить управление.

Приведем пример программы для работы с клавиатурой:

 


Преобразование кода клавиши в соответствующий символ находится в блоке данных Keycodes. Если в вашей клавиатуре иное расположение клавиш, достаточно изменить блок данных. Программа отсылает полученный с клавиатуры символ в терминал ПК через интерфейс RS-232. Так как все линии порта B заняты клавиатурой, нам пришлось отключить ЖКИ. Обратите внимание: в Bascom есть команда Getkbd, которая умеет самостоятельно опрашивать клавиатуры 3x4 или 4x4. Но она не работает внутри подпрограммы прерывания, её можно выполнять только внутри основного цикла.

Протокол RS-232

На сегодняшний день RS-232 - устоявшийся протокол связи. Удивительно, что стандарт, описанный еще в далеких 60-х широко распространен и по сей день. Однако, формально название RS-232 не принадлежит к описанию стандарта.
Американская компания Electronis Industries Association разрабатывала способ соединения больших серверных машин с периферией, например терминалами. Разработка называлась "рекомендованный стандарт" ("recommened standard"), а число 232 было не более чем номером разработки. Гораздо позже она стала официальным стандартом EIA-232. В 1991 году была описана последняя версия протокола, EIA-232E. Однако наибольшее распространение получило всё же название RS-232, поэтому и мы будем применять его здесь.
RS-232 - это протокол последовательного обмена. По нему информация передается последовательно, бит за битом. Сам стандарт описывает два логических уровня:

- напряжение от -25 вольт до -3 вольт передает логическую единицу (1)
- напряжение от +3 вольт до +25 вольт передает логический ноль (0)

 


Как показано на рисунке, интервал от -3 до +3 вольт не определен. Но на практике это обычно не так. В большинстве случаев напряжение выше 2.5 вольт интерпретируется как логический ноль, все что ниже него - как логическая единица. Электрические характеристики протокола достаточно суровы - все выходы должны выдерживать короткое замыкание, а все входы должны работать как триггер Шмитта. Это делает стандартный RS-232 порт ПК гораздо менее уязвимым, чем например, параллельный порт с его TTL уровнями. RS-232 - асинхронный протокол. Это означает что тактовые импульсы не разделены с данными. Обе стороны должны знать скорость обмена данными (baud-rate) перед началом передачи. В оригинальной версии описывалась скорость в 20 000 бит в секунду. Сейчас используются скорости до 1 мегабита в секунду. Этот стандарт описывает полностью аппаратный механизм "рукопожатия" (handshaking), используя несколько линий передачи данных. Мы воспользуемся тремя самыми важными:

- RxD: прием данных, пин порта 2
- TxD: передача данных, пин порта 3
- Gnd: земля, пин порта 5

Под портом мы имеем в виду стандартный коннектор DB9-M (папа) на вашем компьютере.


UART

UART расшифровывается как Universal Asynchronous Receiver Transmitter (универсальный асинхронный приемник-передатчик). Это оборудование на концах линии RS-232. В ПК или любом другом компьютере это чип на материнской плате под управлением центрального процессора. В контроллерах AVR это небольшая область кристалла, выделенная специально для этих целей. В AT90S2313 UART подключен к лапкам 2 (RxD) и 3 (TxD). Поскольку эти выводы являются портами ввода/вывода общего назначения, вам придется пожертвовать ими, если вам нужен UART. UART берет на себя функции приема и передачи данных. При приеме он сам решает, когда опрашивать пин входа, чтобы определить, прислали ли 0 или 1. Когда прием байта завершен, он может сгенерировать прерывание, чтобы контроллер считал байт из входного буфера. При передаче UART считывает байт из выходного буфера и отсылает биты с нужной задержкой, согласно скорости обмена. Если выходной буфер пуст, UART также может сгенерировать прерывание, сообщив программе, что при необходимости можно отправить очередной байт. Во встроенном в AVR UART используются стандартные логические уровни 0 и +5 вольт. Поэтому для согласования со стандартом RS-232 нужно использовать конвертер уровней типа MAX232:

 


Этот чип подгоняет уровни до нужного напряжения и инвертирует их. В MAX232 встроен инвертор и удвоитель напряжения, что позволяет получить -9 и +9 вольт, что достаточно для корректной работы. Pin-to-pin совместимые аналоги этого чипа доступны у всех крупных производителей электроники. Прочитайте даташит! Обычно емкости используемых конденсаторов меняются от 100 нанофарад до 10 микрофарад.

 


Вот собранный преобразователь на чипе National Semiconductor DS14C232CM

 


Если как следует присмотреться, сверху можно разглядеть переменный резистор на 10 кОм. Он подключен к выходу -9 вольт. Это удобно, если вам нужно получить отрицательное напряжение например, для регулировки контрастности графического дисплея.

MAX232 на коленке

Далеко не всегда нужен чип-конвертер. Очень часто можно обойтись простым конвертером из двух тразисторов:


Конечно, это не полноценный конвертор, только инвертор уровней. Но он нормально работает с портами в ПК и ноутбуках (если такие монстры еще остались). Напряжение с третьей лапки AT90S2313 инвертируется левым транзистором. Напряжение на выводе 2 (TxD) разъема DB-9 будет примерно между 0 и +5 вольт. Вывод 3 будет реагировать на напряжение от -9 до +9 вольт. Диод на базе правого транзистора ограничивает отрицательное напряжение -9 вольт примерно до -0.7 вольт. Уровень +9 вольт откроет транзистор, установив на 3 лапке контроллера (RxD) уровень в 0 вольт.

Еще проще!

Если вы хотите передавать данные только в направлении от контроллера к ПК, вы можете убрать правый транзистор Учтите: эта схема попирает все стандарты RS-232. Она будет работать в большинстве случаев, но обязательно проверьте, как работает ваше оборудование, особенно на больших скоростях (выше 9600 бод).

Из AT90S2313 в COM-порт

Очень простая схема, для примера, будет выглядеть так:

 

 


В ней всего лишь контроллер, конвертер уровней и ЖКИ индикатор.

Скорость обмена RS-232

Скорость обмена в RS-232 определяется вашими настройками, но так же зависит от тактовой частоты микроконтроллера. Не все тактовые частоты дадут вам точную скорость обмена. Откроем вкладку Communications в настройках:

 


Еще одна "красивая" тактовая частота - 3.6864 МГц вместо 4 МГц. В магазинах вы можете поискать кварцы на следующие частоты, которые дадут вам 0% ошибок при скорости 115 200:

1.843.200
3.686,400
5.068,800
5.529,600
11.059.200
12.902,400
14.745,600

Так что отправляясь в следующий раз на барахолку, не забудьте взять калькулятор, он вам может пригодиться!


Чтение и запись в RS-232

Сперва выберите нужную вам скорость обмена в настройках компилятора (Options/Compiler/Communication) или используйте директиву

 


Этот код выведет в терминал "Name: John Age: 36" Как обычно, используется оператор Print. Он может содержать набор строк и переменных, разделенных точкой с запятой ( ; ). Нестроковые переменные будут отформатированы перед выводом.

Чтение из RS-232:

Input "Name: " , Name
Опять же, употребление оператора Input такое же, как и у Print. Но обратите внимание, что Input использует запятую ( , ) в качестве разделителя, в то время как Lcd и Print - точку с запятой!

Полная программа для проверки RS-232 может быть такой:

 

 


Скомпилируем её и прошьем контроллер. Затем откроем окно терминала (Tools/Terminal emulator). Эта программа позволит вам отсылать набранные символы в COM-порт ПК и принимать символы от контроллера. Перед работой необходимо указать терминалу, что вы используете скорость 9600 и подключили устройство к нужному порту (например, COM1). Откроем окно настроек:

 


Заметили ли вы, что все, что вы набираете после приглашения "Enter..." появляется в терминале? Bascom автоматически включает функцию эха. Но это не всегда хорошо, например, если вы хотите использовать другую программу для работы с контроллером, и она не может обрабатывать символы эха. Тогда используем директиву для его отключения:

Echo Off
В Bascom есть еще другие операторы ввода, Inputhex и Inputbin:
Dim Code as Byte
Inputhex "Type two-character hex-code: " , Code

Такой пример позволит вам ввести шестнадцатеричные коды, например, "A9" для десятичного числа 169.
Заметьте, что Inputhex не проверяет входную строку на наличие только символов 0-9 и A-F. Однако она урезает строку до 2 символов.
Inputbin может пригодиться, если вам нужно ввести коды, которые нельзя представить в виде ASCII символов. Например, если вы

Хотите передать 16-битный параметр:

Dim Tuneval as Word
Inputbin Tuneval

Этот код считает два байта из UART и положит их в переменную Tuneval. Количество считываемых битов зависит от типа используемой переменной. Запомните, что передачу нужно начинать всегда с младшего бита! Давайте представим, что некий параметр Tuneword в ПК, который вы хотите передать, равен 12320 в десятичной системе. Это 3020 в шестнадцатеричной или 0011 0000 0010 0000 в двоичной.

Попробуем следующую программу:

 


Программный UART

Большинство контроллеров AVR имеют аппаратный UART на выводах 2 и 3. Но иногда вам может потребоваться использовать их с другой целью. Bascom предоставляет возможность ПРОГРАММНОЙ реализации UART. Конечно, это значительно увеличит размер программы, но позволит вам самостоятельно назначить нужные выводы портов под него.
Лапки контроллера назначаются следующим образом:

 


Генерирование звука в Bascom

Самый простой способ извлечь звук из нашего подопытного - подключить к нему одной лапкой динамик (через резистор!), а второй - подключить динамик к земле. После этого воспользуемся командой "Голос!" (Sound):

Sound Portpin, Soundtime, High/Low-time

где Soundtime - число импульсов, а High/Low-time - длительность этих импульсов. На самом деле, в справке Bascom об этом сказано не очень понятно и подробно.

Пример:

Sound, Portb.0, 100, 500

издаст звук частотой примерно 600 Гц и длительностью примерно 120 мс:

 


Как видите, вам придется поэкспериментировать с параметрами этой команды. Но если вам нужны точные частоты, используйте функции таймера. Очевидным применением такой программы является генератор кодов Морзе:

 


Вот её код: sendmorse.bas (http://decada.org.ru/project/lessons/bascom_avr/15/sendmorse.bas)
(программа достаточно длинная, чтобы приводить здесь её листинг)

Скорость передачи, высота тона и длительность символов зависит от константы Speed. В данном случае не было необходимости точно рассчитывать все значения. Вроде звучит нормально, и ладно. Таблица "знакогенератора" находится в блоке данных Morse_alfaber. Собственно, программа при работе делает Lookupstr, чтобы получить код Морзе для очередного символа из передаваемой строки.

 

Купить

Программаторы, средства разработки и отладки для DSP,
средства разработки и отладки для ПЛИС-ПАИС


Она перебирает все символы по очереди и при этом издает "точки" и "тире". Символ "<" означает, что между окружающими его символами не нужно делать паузу при передаче. Это применяется в передаче спецсимволов "KA" и "SK", означающими "Начало передачи" и "Конец передачи" соответственно. Эти спецсимволы передаются слитно, без паузы между буквами.

Синтез тонов DTMF

Двухтональный многочастотный сигнал - Dual Tone Multi-Frequency (DTMF) - используется в телефонии для передачи набираемых на клавиатуре телефона символов, а в радиолюбительских приложениях - для управления, например, репитерами. Это такая система передачи данных, когда складываются два синусоидальных сигнала с разной частотой и результат пересылается приемнику. Такая система кодирования применяется в аналоговых линиях связи, т.к. обладает высокой помехоустойчивостью.

Bascom умеет самостоятельно генерировать DTMF тона:

Dtmfout, Dtmfcode, Dtmftime

Здесь Dtmfcode - десятичное число от 0 до 15, а Dtmftime - длительность передаваемого сигнала в миллисекундах. Как вариант, можно использовать такой код:
Dtmfout, String, Dtmftime

Он перебирает все символы из переменной String и генерирует последовательность тонов.
Приведем пример, отсылающий все 16 DTMF-кодов:

 


Как видите, двухтоновой синтез очень прост, и вы можете легко разработать систему радиоуправления на 16 каналов. Также несложно сделать DTMF-декодер на Bascom, для этого нужен микроконтроллер с АЦП и немножко мозгов. А подключив стандартную клавиатуру 4x4 (как об этом рассказывалось раньше) и динамик, вы получите отличный Bluebox.


Подключение ЖКИ к микроконтроллеру в Bascom AVR

Bascom поддерживает два типа жидкокристаллических дисплеев - знакосинтезирующие и графические. В рамках этой главы мы рассмотрим методы работы со знакосинтезирующими индикаторами, как более простыми. Они имеют встроенную таблицу символов, а значит, вам не придется рисовать каждый знак самому. Большинство дисплеев имеют встроенный контроллер Hitachi HD44780 или совместимый (который стал стандартом де-факто в промышленности). Если вы сомневаетесь, что ваш ЖКИ имеет такой контроллер, то в 95% случаев вы ошибаетесь. Так что если в ваших лапках находится непонятное устройство, присмотритесь к маркировке платы/чипов. Если там есть цифры 44780, то это то, что нужно. Подробно про протокол вы можете почитать на http://ru.wikipedia.org/wiki/HD44780 и по связанным со статьей ссылкам. В Bascom есть настройки по умолчанию для подключения ЖКИ. Давайте посмотрим их. Нажмем Options / Compiler / LCD:

 


К счастью, там уже предустановлен размер индикатора 16*2. Это самый распространенный тип, который может отображать две строки текста по 16 символов в каждой. ЖКИ на базе HD44780 имеют 8 линий данных, но допускается управление в "экономичном" режиме, используя только 4 старших разряда шины. Это позволяет сэкономить лапки контроллера. Такой четырехбитный режим уже установлен по умолчанию. Естественно, в этом режиме байт передается за два прохода. Поэтому если вам нужно управлять дисплеем максимально быстро (что бывает исключительно редко), вам нужно использовать режим управления по шине данных, 8 бит. Data mode - режим передачи данных - по умолчанию установлен в Pin. Это значит, что вы можете назначить любые лапки контроллера для управления ЖКИ. Таким образом, вы можете максимально удобно настроить компилятор, иногда это необходимо из-за схемотехнических ограничений. Режим Bus - шина - организует классическое подключение по топологии шины данных, когда много устройств подключены к одной шине, и нужно посылать адрес устройства, чтобы отозвалось только нужное. В этом случае вам нужно выставить значения LCD-address и RS-address. При подключении Pin вы определяете, какие выводы ЖКИ куда подключены. Пин Enable используется, чтобы ЖКИ знал направление данных (запись/чтение). Пока на выводе Enable низкий уровень, ЖКИ не реагирует на команды на линиях данных, и их можно использовать для других целей. Информация с линий данных считывается, когда на выводе RS находится низкий уровень. Этот вывод используется, чтобы ЖКИ знал, что передается по линиям данных - символ или команда. У ЖКИ есть еще вывод R/W, используя который, можно сообщить дисплею, собираемся ли мы считать с него данные, или записать их в него. Bascom предполагает, что на этом выводе всегда низкий уровень, так что индикатор всегда в режиме приема данных. Однако, чтобы проверить, готов ли он принимать данные, нужно считать флаг занятости "Busy". Для этого нужно было бы отправить команду проверки, переключить индикатор в режим передачи данных и считать состояние флага. Но поскольку мы не можем этого сделать, Bascom выжидает некое количество циклов после каждой передачи данных. Их количество определяется тактовой частотой процессора. Это еще одна причина, по которой нужно грамотно указывать частоту установленного кварцевого резонатора с помощью директивы $crystal.

Как и в случае с типом контроллера и частотой кварца, все настройки портов для ЖКИ также можно делать прямо в коде:

 

 


У стандартного знакосинтезирующего индикатора 14 выводов. Вывод 1 - земля. Вывод 5 - R/W - также подключен к земле. Вывод 2 - напряжение питания, подключен к +5 вольт. Некоторые ЖКИ не будут работать с источниками питания, у которых выходное напряжение поднимается медленно. Это обычно описывается в даташите. Вывод 3 - регулировка контрастности. По идее, его достаточно подключить просто к земле. Но в большинстве случаев дисплей просто станет темным и будет невозможным разобрать хоть что-то. Поэтому подключать вывод регулировки нужно через резистор до 10 кОм. Мне, как правило, хватало несколько сот ом. Выводы 4, 6, 11-14 подключены к контроллеру согласно схеме. Выводы 7-10 не подключены. Если вам достался ЖКИ с подсветкой, то вначале контактной гребенки будут выводы 15 и 16 для подключения её питания. Питать её можно от того же источника, что и сам ЖКИ, но иногда требуется ограничительный резисто в несколько сот ом. Иногда выводы подсветки не выведены на общую шину, тогда они находятся непосредственно справа или слева от ЖК матрицы.

Накатаем первую программу для работы с ЖКИ:

 


Щелкнем на первой ячейке в таблице переменных и введем "Count". Затем щелкнем на кнопке "LCD", чтобы посмотреть эмуляцию аппаратной обвязки. Щелкнем на "Step into Code" (F8), чтобы перемещаться по строкам. После строки "Lcd "Hello! " ; Count", на экране появится следующее:

 


Нажмем кнопку "Run" (F5) и посмотрим на ЖКИ.

Команда Cls в цикле инициализирует и очищает дисплей. Инициализация очень важна, поэтому всегда ставьте эту команду перед началом работы с индикатором, иначе вы можете получить доступ только к первой строке двухстрочного индикатора. Также, при сбросе контроллера не происходит сброса ЖКИ, что тоже не даст нормально работать. Теперь обкатаем программу в бою. Удаляем из кода директиву $sim, заново компилируем и загружаем прошивку в чип.


Знакогенератор в ЖКИ

Стандартный набор символов ЖКИ с поддержкой кириллицы выглядит так:

 


Нестандартные символы из набора можно выводить на индикатор, указывая их десятичный код:

Lcd Chr(253)

'Выводим символ параграфа (0xFDh в десятичной системе будет 253)


Управление курсором

В Bascom есть несколько команд для управления курсором. Вы можете включать/выключать его, а также использовать мигание:

Cursor on, blink
Cursor on, noblink
Cursor off

Также можно указать точное положение курсора:

Locate linenumber, characternumber
Locate 1, 6
Lcd "Count"

Этот код переместит курсор на шестое знакоместо первой строки. Слово "Count" будет выведено начиная с этой позиции. Команда Home поместит курсор в начальное положение - первый символ первой строки, т.е. Home делает то же, что и Locate 1, 1. Home upper делает то же самое. Но вот Home lower делает то же, что и Locate 2, 1, т.е. помещает курсор в начало самой нижней строки (второй в случае с двухстрочным дисплеем). Shiftcursor left/right будет двигать курсор влево или вправо на одно знакоместо относительно текущего положения. Shiftlcs left/right будет аналогично сдвигать всё содержимое на дисплее. Рассмотрим это на примере (в симуляторе, если хотите опробовать на настоящем железе, уберите директиву $sim):

 


Создаем собственные символы

Контроллеры HD44780 имеют дополнительное место для 8 собственных символов. Вы можете использовать это, чтобы:

- сделать индикатор уровня сигнала
- дурацкую анимацию, показывающую, что контроллер занят расчетами или чем-то еще
- крутящуюся штуковину или танцующего человечка, чтобы показать, что контроллер все еще работает, или развлекать пользователя.

Вы можете создавать собственные символы в Bascom, используя специальный редактор (Tools / LCD Designer). Наберем (на этот раз ручками или копипастом) такую вот программку:


Повторим этот процесс еще четыре раза (нужно поднапрячь воображение), пока не получим примерно такую программу:

 


Скомпилируем и засимулируем. На выходе получаем шусрто вращающуюся звездочку на последнем знакоместе первой строки: Как вариант, можно сделать прыгающего человечка только из двух кадров (http://decada.org.ru/project/lessons/bascom_avr/16/jman.bas), или индикатор уровня (http://decada.org.ru/project/lessons/bascom_avr/16/mbar.bas),

 


Форматирование вывода на ЖКИ

Представим, что у нас есть некая целочисленная переменная loglevel, которая меняет значения от -90 до +10 (типа регулятор громкости в усилителе). То, как она будет выведена на ЖКИ, зависит от её значения:

 


Кириллица в HD44780

Одна из главных проблем, с который могут столкнуться русскоязычные пользователи - нестандартная кодировка кириллических символов. То есть если вы отправите в ЖКИ обычную строку с русскими символами, вместо них на экран будут выведены абраказябры. Связано это с тем, что для экономии места в памяти контроллера тупоголовые разработчики вместо увеличения объема (можно было просто занять свободные ячейки) решили оставить лишь по одной ячейке для символов со сходным начертанием. Так например, буква O или P выглядят одинаково как в кириллице, так и латинице. Неумные инженеры подумали, что так они неистово сократят объем используемой памяти, но сократили лишь функциональность дисплея. И теперь при необходимости вывести русские символы, каждый раз возникает неприятная неприятность в виде несовместимости таблиц HD44780 и ASCII. Выхода есть два, у обоих свои плюсы и минусы:

1. Написать подпрограмму для контроллера, которая на лету будет декодировать ASCII коды и выводить уже правильные символы на ЖКИ. Удобна тем, что позволяет передавать любые строки без опасения, что они будут выведены впоследствии неправильно. Но этот способ требует лишних ресурсов на перекодировку, а также нужно постоянно хранить в памяти таблицу символов.
2. Использовать утилиту для ПК, которая сама переконвертирует нужные строки в нужный формат, которые сразу подставляются в код для вывода. Удобно тем, что не занимает память контроллера, работает быстро и вообще не требует ресурсов для перекодировки. Но минус в том, что в коде программы нужные строки уже не разобрать. Вывод символов в этом фиксированный, то есть выводить можно только заранее выбранный набор строк. При использовании ввода, например, с RS-232, русские символы будут отображены некорректно.


Спящий режим (Sleep) и остановка (Powerdown) обычно применяются при автономном питании устройства, когда контроллер бездельничает и жрет энергию впустую.

 

Купить

Программаторы, средства разработки и отладки для DSP,
средства разработки и отладки для ПЛИС-ПАИС


Вполне разумно приостанавливать его работу на это время.
AT90S2313 может погрузиться в сон двумя способами:

- Команда Idle. Останавливает тактовый генератор, но UART, внешние прерывания и прерывания по таймеру/счетчику продолжают работать. Все они выводят микроконтроллер из спящего режима.
- Команда Powerdown останавливает тактовый генератор, но работать продолжают только внешние прерывания.

Рассмотрим пример работы с режимом Powerdown и выходом из него:

 


Сторожевой пес (watchdog)

Bascom позволяет реализовать функцию ватчдога в программе. Ватчдог - такая функция, которая сбрасывает контроллер, если программа начинает тупить или зависает. По сути это - таймер, который нужно регулярно обнулять. Если программа зависает, она не делает очередной сброс счетчика. Как только он переполняется, происходит аппаратный сброс контроллера. Эта функция нужна в приложениях, где стабильность работы критична, и устройство должно работать, что бы ни произошло. Естественно, программа контроллера должна взаимодействовать с таймером ватчдога. Его срабатывание - серьезная внештатная ситуация, которая может быть вызвана как неисправностью самой программы, так и оборудования. В любом случае, если вы применяете сторожевой таймер, позаботьтесь о системе протоколирования ошибок, иначе вы рискуете никогда не узнать причину сбоя. И маловероятно, что он не повторится снова.

 


После команды Start Watchdog контроллер отправляется в режим Sleep, останавливая тактовый генератор. Так как ватчдог работает на независимом тактовом генераторе, такой ход вещей его не устраивает, и он генерирует принудительный аппаратный сброс примерно через 2 секунды.

Работа с энкодерами

Энкодеры (от слов angle decoder - преобразователь угол-код) - особый тип вращаемых переключателей. Такие, например, стоят в колесиках на мышках, цифровых регуляторах громкости на усилителях и в куче других устройств с регулируемыми параметрами.

назад  вперед

 

 

 







Просмотров: 12067 | Добавил: Chinas | Рейтинг: 0.0/0








Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 380



          

Радио для всех© 2024