image

Ну, погоди! - игра 80-ых

Лирическое отступление Мой знакомый, увидев старую добрую игру «Ну, погоди!» (электроника им-02) в интернете начал ностальгировать по тем временам и решил ее купить. Но шло время, а маленькая мечта оставалась мечтой... Тут мне в руки попал «наглухо» умерший телефон Samsung GT-S5230. Данный телефон имеет TFT дисплей 3.0' размером 400х240 пикселей, …

Показать больше
image

Цифровые часы на RTC DS12C887 и 8051

Данная статья представляет собой улучшенный вариант цифровых часов с использованием RTC DS12C887 и 8051 с установкой времени. В предыдущей статье мы обсуждали основные приемы получения данных из RTC DS12C887, используя микроконтроллер 8051 (AT89C51). Эта статья продолжение к вышеуказанной статье, которая знакомит вас с концепцией обработки прерываний для получения времени и …

Показать больше
image

PURPIC переносной клон PICkit2

Одной из моих самых первых статей был урезанный PIC программатор на основе разработки David Tait, с использованием транзисторов для монтажа в отверстия и резисторов приклеенных к куску картона. О, как изменились времена. И, как обычно, я всё еще на 7 лет позади тех изменившихся времен. Мой последний проект является ремейком …

Показать больше
image

Универсальный адаптер-программатор

Современные средства для работы с программируемыми микросхемами отличаются большим разнообразием. На сегодняшний день созданна масса различных адаптеров и программаторов для программирования микросхем ПЗУ, Flash памяти, различного типа микроконтроллеров, логических матриц ПЛИС. Кроме того существует масса платных и бесплатных компьютерных программ для управления этими программаторами и адаптерами. Часто в радиолюбительской практике …

Показать больше
image

Контроллер двухцветного светового шнура Flexilight

Контроллер используется со световым шнуром Flexilight для получения различных динамических световых эффектов. Flexilight - гибкий материал для световой рекламы, альтернатива "неоновой" рекламе. Выполнен из цельной ПХВ трубки диаметром ~12 мм, заполненной миниатюрными лампочками с шагом ~25 мм. Обычно используется для декорации и подсветки углов зданий, дорог, лестниц, создания надписей, картинок …

Показать больше
image

Дверной звонок на микроконтроллере

Как правило, электрическая принципиальная схема обычного дверного звонка выглядит совсем просто, но как бы не так! При использовании микроконтроллера для генерирования звуков или мелодий звонка, одна из сложностей заключается в генерировании синусоиды через ШИМ-модулятор (PWM). Данный проект представляет собой дверной звонок с использованием микроконтроллера ATMega. Выход OC1A микроконтроллера ATMega8 генерирует …

Показать больше
image

Электронный USB счетчик на AVR ATtiny25

Проект представляет собой счетчик с отображением данных на LCD-экранчике и передачей данных через USB-интерфейс. Я к примеру использовал данное устройство как счетчик посещений для вебсайта. В проекте используется микроконтроллер AVR ATtiny25, в качестве драйвера LCD-дисплея используется микросхема MAX7219. Для отображения данных используется обычный 7-ми сегментный индикатор на 8 знакомест. Принципиальная …

Показать больше
image

Простой измеритель температуры

Пожалуй, измеритель температуры - это одно из самых распространенных устройств, которое собирают на микроконтроллерах начинающие радиолюбители. И здесь я хочу представить очередную схему очень простого измерителя температуры на микроконтроллере PIC16F88 от Microchip. В качестве сенсора температуры используется популярный датчик LM35DZ (даташит). Он позволяет измерять температуру в диапазоне от 0ºC до …

Показать больше
image

Воспроизведение звука на PIC

В данной статье рассмотрен один из способов воспроизведения звука на PIC-микроконтроллере с использованием PCM-модуляции. Импульсно кодовая модуляция (PCM) - это цифровое представление аналоговых сигналов, где через каждые равнозначные промежутки времени, измеряется мгновенное значение амплитуды сигнала и представляется в цифровом (как правило двоичном) виде. В качестве микроконтроллера был выбран PIC18F1320 (Даташит) …

Показать больше
image

Микроконтроллерный вирус и антивирус

В отличие от персонального компьютера микроконтроллер представляет собой с информационной точки зрения изолированный однокристальный компьютер. Да и работа микроконтроллера сводится к выполнению запрограммированных инструкций, поэтому мной был написан программный код позволяющий реализовать выполнение микроконтроллером как вредоносной, так и защищающей для информации подпрограмм. Данный тип микроконтроллерного вируса (вируса на кристалле) имеет …

Показать больше
image

Простой тачскрин интерфейс

Тачскрин (Touch Screen - сенсорный экран) изобретен несколько десятилетий назад, однако только в последние года он получил широкое распространение. Для человека, способ ввода при помощи сенсорного экрана более привычен и удобен, чем другие способы. В данной статье мы рассмотрим работу с резистивным 4-х проводным тачскрином, а именно нахождение X и …

Показать больше
image

Группа команд управления процессором

Табл 6. Команды управления процессором Команда Описание Действие Циклы Код операции Флаги ATtiny ATmega nop No operation - 1 0000 0000 0000 0000 None + + sleep Sleep - 1 1001 0101 1000 1000 None + + wdr Watchdog Reset - 1 1001 0101 1010 1000 None + + break …

Показать больше
image

Разработка программ в IDE AVR Studio

В поддержку своей архитектуры в 1997 г. Atmel выпустила AVR Studio - программный продукт для разработки приложений на основе AVR-микроконтроллеров. AVR Studio представляет собой интегрированную среду разработки IDE (Integrate Development Environment), объединяя в себе большое количество различных инструментов для написания и отладки программ. Продвигая на рынке новую продукцию, Atmel с …

Показать больше
image

Синтаксис ассемблера

Исходный текст программы на языке ассемблера может быть создан в любом текстовом редакторе и должен быть размещен в файлах с расширениями .asm, .inc или .txt. Удобнее всего для этих целей использовать встроенный в AVR Studio редактор. Алфавит ассемблера состоит из набора символов ACSII. Однако в комментариях к программам допускается использовать …

Показать больше
image

Содержимое заголовочного файла

В начале любой программы, как правило, подключается один из стандартных заголовочных файлов, поставляемых вместе с пакетом программ AVR Studio. Заголовочные файлы существуют для всех моделей AVR. По умолчанию исходной директорией их размещения является “С:\Program Files\Atmel\AVRTools\AvrAssembler2\Appnotes”. Каждый файл имеет имя подобное "m8def.inc", в котором первая часть указывает на модель микроконтроллера. Заголовочный …

Показать больше
image

Структура программы

Рассмотрим синтаксические особенности ассемблера AVR на примере небольшой тестовой программы для микроконтроллера ATmega8, приведенной ниже. Программа формирует на выводе PB2 импульсы с частотой следования ≈ 2.5 Гц при частоте внутреннего RC-генератора 1 МГц. 1. ; Тестовая программа для ATmega8. 2. // Светодиод подключен к выводу PB0 микроконтроллера. 3. /* Биты …

Показать больше
image

Структура HEX-файла

После успешной сборки проекта будет сгенерирован 16-тиричный файл FirstProject.hex, содержащий в символьном виде машинный код программы: :020000020000FC :100000001FC0FECFFDCFFCCFFBCFFACFF9CFF8CF8B :10001000F7CFF6CFF5CFF4CFF3CFF2CFF1CFF0CFCC :06002000EFCFEECFEDCFA3 :100040000FE50DBF04E00EBFC298BA9A04E018B3E2 :10005000102718BB01D0FBCFB3ECA0E51197F1F747 :02006000089501 :00000001FF Рассмотрим формат данных hex-файл на примере второй строки текста (маркером начала строки всегда является символ “:”): NN AAAA CC DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD SS : 10 0000 00 1FC0FECFFDCFFCCFFBCFFACFF9CFF8CF …

Показать больше
image

Программирование математических операций

Беззнаковые целые числа Эта глава главным образом будет посвящена арифметическим операциям над большими беззнаковыми целыми числами (подробней о различных форматах чисел смотри в приложении Б). В приложениях на AVR-микроконтроллерах наиболее часто приходится использовать 16-разрядные вычисления, которые достаточно легко программируются. Двухбайтовые числа предоставляют достаточно широкий диапазон представления переменных. Однако, встречаются задачи …

Показать больше
image

Память

Примечания. 1. Не во всех моделях ATtiny и только из области загрузчика. 2. Доступны не все FUSE-биты. 3. Только в режиме отладки. Микроконтроллеры AVR имеют 7 типов памяти, каждый из которых расположен в собственном адресном пространстве. Это энергонезависимая FLASH-память программ (ПЗУ), статическая память данных SRAM (ОЗУ), энергонезависимая EEPROM-память данных, а …

Показать больше
image

Формы представления частного в операциях деления

Все подпрограммы деления, приведенные в предыдущем разделе, возвращают на выходе результат в виде целочисленных частного Z и остатка R X = 11, Y = 4, X/Y = Z + R, 11/4 = [2] + {3}. Однако при попытке продолжить деление, по аналогии с подобным действием в десятичной системе, что иногда …

Показать больше
image

Знаковые целые числа

Данная глава посвящена программированию арифметических операций над знаковыми числами, представленными в дополнительном коде (подробней о знаковых числах смотри в приложении Б). Не прибегая к знаковым числам, тяжело решить многие задачи управления. При формировании выходного воздействия любой регулятор либо следящая система опирается на сигнал ошибки, который может изменяться как по величине, …

Показать больше
image

Сложение и вычитание

Как было сказано выше, существует полная симметрия между действиями сложения и вычитания беззнаковых и знаковых чисел (последние, естественно, должны быть представлены в дополнительном коде). Это означает, что для знаковых вычислений можно использовать те же самые инструкции процессора, что и для беззнаковых. Более того, сами арифметические действия оказываются взаимозаменяемыми. Очевидно, что …

Показать больше
image

Преобразование чисел

В данной главе речь пойдёт о преобразовании числовых величин из одной формы представления в другую. Наряду с арифметическими операциями данный аспект программирования является основополагающим. Большая часть информации в электронно-вычислительной системе всегда представлена в позиционном двоичном коде. Система команд любого микропроцессора напрямую поддерживает числа только такого типа. Для взаимодействия с пользователем …

Показать больше
image

Преобразование рефлексного кода в позиционный двоичный

Очень редко может возникнуть необходимость в преобразовании чисел, представленных в рефлексном коде (коде Грея) в позиционный код. В приложениях на основе микроконтроллеров данные в коде Грея могут поступать от некоторых датчиков старого типа. Для преобразования числа B, представленного в позиционном двоичном коде, в число G записанное в двоичном рефлексном коде …

Показать больше
image

Преобразование из десятичной системы в двоичную

Самый очевидный способ десятично-двоичного преобразования вытекает непосредственно из формы записи десятичного числа: Необходимо просто найти сумму , по заданным коэффициентам di. Ниже приведена подпрограмма, преобразования десятичного 4-разрядного числа из диапазона 0…9999 в его двоичный 2-байтовый эквивалент 0…0x270F. Преобразуемое число хранится в SRAM микроконтроллера в виде четырех двоично-кодированных десятичных цифр d4…d0. …

Показать больше
image

Вычисление функций

Решение уравнений по известным зависимостям – типичная зада для микропроцессорной системы. Удельная доля времени, которое тратится на вычислительные операции, сильно зависит от области применения микроконтроллера. Если его основным предназначением является обработка данных, что особенно характерно для 16-32-разрядных сигнальных процессоров, то в его состав, как правило включены и специальные аппаратные узлы …

Показать больше
image

Примеры использования таблиц

При вычислении sinX в указатель Z вместо метки tabl необходимо подставить адрес начала таблицы sin_tabl, а при вычислении arcsinX, соответственно arcsin_tabl. Каждая из таблиц просчитана для 128 значений функции (256 б во FLASH-памяти программ) в диапазоне изменения аргумента 0…90° для sinX и 0…1 для arcsinX. Фиксированный шаг в таблице sinX …

Показать больше
image

Сортировка

В этом разделе будет показаны способ отыскания наибольшего (наименьшего) значения среди массива чисел и два фундаментальных метода сортировки (обменом и выбором), адаптированных для системы команд AVR. Это так называемым "простые" методам сортировки. Для того чтобы упорядочить массив из n элементов они требуют порядка n2 операций сравнения. Существуют и более совершенные …

Показать больше
image

Сортировка обменом

Сортировка обменом (или пузырьковая сортировка) - это самый простой способом упорядочить массив чисел, с точки зрения затрат программных ресурсов. Алгоритм пузырьковой сортировки очень прост для понимания и легок в реализации. Сортировка обменом Рассмотрим, как работает этот метод с набором из пяти чисел, расположенных случайным образом. Задача пузырьковой сортировки заключается в …

Показать больше
image

Кнопочный ввод с помощью АЦП

Рис.1 Опрос кнопок с помощью АЦП Если в микроконтроллере имеется АЦП, то его также можно использовать для опроса кнопок. Схема подключения показана на рис.1. Как видим для группы кнопок SB1…SBN такой интерфейс потребует всего одной аналоговой линии. Нажатие кнопки определяется по изменению напряжения U0. Если для простоты все сопротивления R …

Показать больше
image

Аналоговый ввод с использованием линии ввода-вывода

Рис.1 Преобразователь сопротивления в цифровой код Любая линия ввода-вывода у AVR может использоваться для аналогового ввода информации. На рис.1, например, показан преобразователь величины сопротивления в цифровой код. Для такого интерфейса потребуется всего один вывод (PD0) и три дополнительных элемента. Резистор R2 необходим для ограничения тока PD0 для тех случаев, когда …

Показать больше
image

Ввод информации через аналоговый компаратор

Рис.1 Преобразователь сопротивления в цифровой код на основе компаратора Пользовательский ввод может быть также успешно реализован и с помощью аналогового компаратора. На рис.1 показан один из возможных вариантов реализации преобразователя сопротивление в цифровой код. Временная диаграмма работы приведена на рис.2. Перед началом преобразования линия PD6, являющаяся по совместительству неинвертирующим входом …

Показать больше
image

ЖКИ на базе контроллера HT1611

Рис.1 ЖКИ на базе контроллера HT1611 ЖКИ на базе контроллера HT1611 ориентированы главным образом на применение в телефонных аппаратах, но с успехом могут быть использованы и в различных микроконтроллерных приложениях. Существует много разновидностей индикаторов данного типа (внешний вид одного из них WM-1611 показан на рис.1). Различая могут проявляться в габаритных …

Показать больше
image

ЖКИ MT-10T8

Рис.1 ЖКИ MT-10T8 Индикатор MT-10T8 (внешний вид приведен на рис.1) является очень популярным изделием российской фирмы “МЭЛТ”. Он содержит собственный встроенный контроллер, отвечающий за работу внутренней логики устройства и управление сегментами на жидких кристаллах. Его работоспособность сохраняется при напряжении питания 3…5 В; максимальный ток потребления составляет 30 мкА (без подсветки). …

Показать больше
image

Аналоговый вывод

Несмотря на большую универсальность, возможности аналогового вывода у микроконтроллеров семейства tiny/mega ограничены. В их составе отсутствует цифро-аналоговый преобразователь (ЦАП), который, однако, имеется в ряде моделей специализированного для этих целей семейства 90PWM. Преобразовать цифровой код в аналоговую величину в общем случае можно с помощью простой схемы приведенной на рис.1. Рис.1 Простой …

Показать больше
image

Отладка приложений

Популярность микроконтроллеров AVR привела к появлению на рынке огромного количества самых разнообразных средств отладочных средств. Среди продуктов сторонних разработчиков существуют как мощные дорогостоящие симуляторы типа Proteus, так и совершенно бесплатные на подобие VMLab. Фирменные внутрисхемные эмуляторы от Atmel (ISE40, ISE40, ISE200), работающие в IDE AVR Studio, вообще, позволяют вести отладку …

Показать больше
image

Отладка с помощью USART

Мощным средством для отладки и тестирования приложений на микроконтроллерной базе может выступать встроенный премо-передатчик USART. Этот узел реализован в модели ATtiny2313 и во всех без исключения моделях семейства ATmega. Основная задача USART – реализовать асинхронный обмен данными через интерфейс RS-232 или иные его аппаратные реализации (RS-485, RS-482 и т.). Обработку …

Показать больше
image

Операционные системы реального времени

Структура типичной программы предполагает, что все задачи разделяют единое пространство памяти и каждая из них, если понадобится, может иметь доступ к любым ресурсам процессора. Такое ее устройство обладает рядом недостатков, особенно существенных на этапе разработки и отладки приложения. Из них главная проблема – это невозможность избавится от тесной взаимосвязи всех …

Показать больше
image

Распределение памяти между задачами

Существует и еще две важных причины, по которым ОСРВ, приведенная в листинге предыдущей главы, не сможет найти широкого применения. Во-первых, разные задачи могут использовать одни и те же регистры. А при переключении задач РОНы, как и SREG, нужно где-то сохранить. В принципе, этот вопрос можно решить: отвести для каждой задачи …

Показать больше
image

Особенности работы ОСРВ

В ходе работы ОСРВ могут возникнуть некоторые проблемы синхронизации, которые ни когда встретятся при программировании по традиционной технологии. Дело в том, что всегда будут существовать разделяемые ресурсы, одновременно доступные из любой точки программы. Это РВВ и глобальные переменные, через которые происходит взаимодействие между задачами. Теперь представим себе следующую ситуацию. Под …

Показать больше
image

Конфигурационные ячейки

Конфигурационные ячейки (Fuse Bits) определяют различные параметры конфигурации AVR, такие как источник тактовой частоты, задержка времени после включения питания, уровень срабатывания детектора пониженного напряжения и мн.др. В разных моделях микроконтроллеров может содержаться от 5 до 20 конфигурационных ячеек. Все они находятся в отдельном адресном пространстве, доступном только на этапе программирования. …

Показать больше
image

Перенос программы между разными моделями

Иногда может возникнуть необходимость в переносе программы с одной модели AVR на другую. Если под рукой находится исходный текст, то в этом нет ни какой проблемы. Другое дело, когда в распоряжении имеется только 16-тиричный hex-файл. В этом случае можно воспользоваться описанным ниже способом, затратив лишь немного времени на доработку программы. …

Показать больше
image

Самопрограммирование микроконтроллеров AVR

В этой главе будет рассмотрена такая интересная особенность AVR, как самопрограммирование (имеется у многих моделей ATtiny и во всех моделях ATmega). Суть ее заключается в возможности изменять содержимое FLASH-памяти непосредственно из пользовательской программы. Микроконтроллеры Atmel были одними из первых в мире, в которых появилось это новшество. В разделе приведен пример …

Показать больше
image

Особенности процесса самопрограммирования

С точки зрения самопрограммирования, FLASH-память программ разделена на две части. Такое разделение для ATmega8 приведено на рис.1. Это секция прикладной программы Application Section и секция загрузчика Boot Loader Section. Код загрузчика может выполняться только во второй секции. Размер Boot Loader Section на этапе программирования задается двумя битами конфигурации: BOOTSZ1 и …

Показать больше
image

Самоуничтожение программы

В загрузчике можно реализовать один “трюк”, который позволяет при выполнении определенного условия полностью ликвидировать прикладную программу, включая свой собственный код. Ниже приведен фрагмент программы из 12 слов, которая последовательно стирает все страницы FLASH-памяти. Сама программа должна быть расположена в последней странице, которая и будет удалена в последнюю очередь. Перейти на …

Показать больше
image

Простой внутрисхемный программатор

Рис.1 Простой программатор AVR микроконтроллеров Принципиальная схема простейшего программатора AVR-микроконтроллеров приведена на рис.1. Программатор подключается к компьютеру через принтерный LPT-порт кабелем небольшой длины (до 1 м). Шинный формирователь 74HC244N можно заменить отечественным аналогом КР1554АП5. Напряжение от внешнего источника можно использовать для питания программируемого микроконтроллера через вывод VCC. ZQ1 пригодится, если …

Показать больше
image

Ячейки защиты

Ячейки защиты (Lock Bits) помогают защитить программное обеспечение от корыстного использования третьими лицами. Ячейки бывают двух типов. К первому из них относятся биты LB1, LB2, которые имеются во всех без исключения AVR- микроконтроллерах. Их комбинация определяет степень доступа к памяти FLASH и EEPROM в соответствии с табл.3. Табл.3. Ячейки защиты …

Показать больше
image

Калибровочные ячейки и ячейки идентификаторов

Любую модель AVR на этапе программирования можно опознать по содержимому трех 8-разрядных ячеек идентификаторов. Первый байт представляет собой код производителя и, естественно, одинаковый для вех микроконтроллеров. Его значение 0x1E. Во втором байте находится код объема FLASH-памяти программ. Он может иметь одно из ряда значений 0x90…0x98. Наименьшему числу соответствует объем FLASH …

Показать больше
image

Арифметико-логическое устройство

Арифметико-логическое устройство (АЛУ) выполняет все вычислительные операции в микропроцессорной системе. Непосредственно к АЛУ подключены 32 РОНа (регистровый файл), как показано на рис.8. Рис.8 Арифметико-логическое устройство В большинстве операций любой из этих регистров может использоваться в качестве источника входных данных либо приемника результата. При этом все арифметические и логические команды над …

Показать больше