Программирование на Си

Печать

Работа с внутренней памятью EEPROM

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 11

Все микроконтроллеры семейства Mega имеют в своем составе энергонезависимую память (EEPROM память). Объем этой памяти колеблется от 512 байт в моделях ATmega8x до 4 Кбайт в старших моделях. EEPROM память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно. Для работы с EEPROM памятью используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.

Печать

Использование библиотеки для работы с LCD HD44780

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 30

В этой статье я расскажу как с помощью достаточно распространенной библиотеки управлять LCD дисплеем на базе контроллера HD44780 и выводить на него информацию. Библиотека состоит из двух файлов lcd_lib.h и lcd_lib.c для использования с дисплеем подключенным по четырехбитной шине данных. В заголовочном файле прописываются настройки подключения дисплея к контроллеру, которые можно изменить по своему усмотрению, а также переменные и функции.

Ниже представлены базовые функции управления и вывода информации на LCD.

lcd_com – посылка команды в LCD

Пример:
lcd_com(0x01); // очистка дисплея
lcd_com(0x38); // интерфейс 8 бит 2 строки

Печать

Использование библиотеки для работы с семисегментным индикатором. Делаем простые часы.

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 21

Использование этой библиотеки значительно упрощает работу с семисегментным индикатором. Библиотека написана под четырехразрядный семисегментный индикатор с общим анодом или катодом. Она позволяет выводить на дисплей не только цифры, но и буквы, текущее время, бегущую строку, менять яркость свечения индикатора. Далее рассмотрим функции этой библиотеки(скачать файлы display.c и display.h можно внизу статьи).


display_init(void); - инициализация дисплея

set_brightness(uint8_t b); - установка яркости от 0 до 100

shift_in(char c); - сдвиг символа на одну позицию справа-налево

set_char_at(char c, uint8_t offset); - вывод символа в определенное знакоместо

Например: set_char_at('A', 0); // вывод символа А в первое знакоместо
set_char_at(2, 2); // вывод цифры 2 в третье знакоместо

set_segments_at(uint8_t segments, uint8_t offset); - вывод сегмента в определенное знакоместо

Например: set_segments_at(2, 1); // вывод сегмента "b" во второе знакоместо

shift_in_segments(uint8_t segments); - сдвиг сегмента на одну позицию справа-налево

set_number(uint16_t num); - вывод цифр в формате "XXXX"

clear_screen(void); - очистить дисплей

set_time(uint8_t hour, uint8_t min, uint8_t sec); - вывод времени в формате "XX.XX.XX"

Печать

Изучаем энкодер. Делаем простой RGB контроллер.

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 9

Можно ли одной «ручкой» регулировать контрастность ЖКИ, изменять уровни срабатывания исполнительных устройств, выбирать язык меню, включать или выключать опции настроек? Оказывается, можно. И элемент, при помощи которого возможно осуществить все эти регулировки, носит название энкодер. Далее, собственно, мы и будем знакомиться с этим элементом.

По выполняемым функциям и внешнему виду энкодеры напоминают аналоговые потенциометры, но на этом их сходство заканчивается. Области применения энкодеров шире и разнообразнее. Как правило, с появлением цифровых систем ранее применявшиеся внешние элементы управления, такие как переключатели, аналоговые потенциометры с ручками на панелях управления, плохо стыкуются с их основным элементом — микроконтроллером.

Печать

Изучаем DS1820/DS18B20

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 24

Датчики температуры с однопроводным интерфейсом 1-WIRE были разработаны фирмой DALLAS SEMICONDUKTOR для использования совместно с микроконтроллерами. Впоследствие эти датчики стали выпускаться фирмой MAXIM. Каждый датчик температуры имеет 56-разрядный индивидуальный идентификационный код, поэтому по одному проводу может быть опрошено практически неограниченное число датчиков. Перед установкой таких датчиков в одну линию необходимо считать 64 разрядный код ROM (в него входит 56-битный номер датчика и 8 бит регистра контроля четности) для каждого датчика и учитывать его при программировании микроконтроллера. Передача 64 разрядов занимает много времени, поэтому в устройствах, использующих небольшое число датчиков, можно обойтись выделением отдельного выхода микроконтроллера для каждого датчика.

Термодатчики DS1820 (DS18S20, DS1821, DS18B20)имеют следующие технические характеристики:
- индивидуальный 64-битный идентификационный номер;
- напряжение питания от +3 до +5,5 В;
- измеряемая температура от -55 до + 125°С;
- погрешность измерения температуры в диапазоне -10...+85°С не более 0,5°С;
- в остальном диапазоне температур погрешность измерения не превышает 2°С;
- информация о температуре выдается 9-битным кодом;
- установка пороговых значений температуры по максимуму и минимуму,
- максимальное время преобразования температуры в код 750 мс;
- возможность питания от высокого уровня шины данных;
- термодатчики не требуют индивидуальной настройки при замене.

Печать

Изучаем DS1820/DS18B20. Делаем простой термометр

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 34

В этой статье займемся изучением практического применения цифровых датчиков температуры DS18B20. Сделаем простой термометр на семисегментных индикаторах, который будет показывать положительную и отрицательную температуру с разрешением 0,1 градус Цельсия. Для этой цели используем микроконтроллер Atmega8, который работает от внутреннего генератора частотой 8 МГц, семисегментный индикатор с общим анодом(четырехразрядный) и датчик температуры DS18B20. Схема устройства показана на рисунке 1. Шину данных датчика подключаем к порту PC0, а также подключаем к плюсу питания через резистор R1 номиналом 4,7 кОм, поскольку выходной транзистор датчика имеет открытый сток. При питании датчика от шины данных(паразитное питание) вывод 3 датчика остается свободным.

Как уже известно последовательность действий при работе с одним датчиком будет такая:

1) послать сигнал обнуления линии (480...960 мкc);
2) принять импульс присутствия или заполнить время паузой (60...240 мкc);
3) послать команду пропуска идентификации 0xCC;
4) послать команду начала преобразования 0x44;
5) пауза не менее 500 мкc для завершения процесса преобразования;
6) обнулить линию;
7) послать команду пропуска идентификации 0xCC;
8) послать команду считывания блокнота 0xBE;
9) принять 9 байт;
10) выделить и проанализировать бит десятых долей градуса с установленной точностью, в нашем примере это 0,0625;
11) проанализировать бит знака;
12) если знак отрицательный, то перевести значение температуры в дополнительный код;
13) делаем преобразование целой и дробной части значения температуры и выводим на дисплей.

Печать

Декодирование сигналов протокола RC5

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 25

Система инфракрасного дистанционного управления RC5 была разработана фирмой Philips для нужд управления бытовой аппаратурой. Когда мы нажимаем кнопку пульта, микросхема передатчика активизируется и генерирует последовательность импульсов, которые имеют заполнение частотой 36 кГц. Светодиоды преобразуют эти сигналы в ИК-излучение. Излученный сигнал принимается фотодиодом, который снова преобразует ИК-излучение в электрические импульсы. Эти импульсы усиливаются и демодулируются микросхемой приемника. Затем они подаются на декодер. Декодирование обычно осуществляется программно с помощью микроконтроллера. Код RC-5 поддерживает 2048 команд. Эти команды составляют 32 группы (системы) по 64 команды в каждой. Каждая система используется для управления определенным устройством, таким как телевизор, видеоплеер и т. д.

Команда согласно протоколу RC5 показана на рис. 1. Кодовая последовательность (красный цвет) состоит из 14 тактовых интервалов длительностью по 1,78 мс (64 периода частоты 36 кГц), в каждом из которых передают один разряд двоичного кода. Лог. 1 соответствует положительный перепад уровня в середине тактового интервала, лог. 0 — отрицательный.

Печать

Подключение униполярного шагового двигателя к микроконтроллерам AVR

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 16

Подробную теоретическую информацию о шаговых двигателях можно найти на просторах интернета, а здесь займемся практическим решением. Униполярный двигатель имеет одну обмотку в каждой фазе, от середины обмотки сделан отвод. Это позволяет изменять направление магнитного поля, создаваемого обмоткой, простым переключением половинок обмотки. При этом существенно упрощается схема драйвера. Драйвер должен иметь только 4 простых ключа. Средние выводы обмоток могут быть объединены внутри двигателя, поэтому такой двигатель может иметь 5 или 6 выводов. Иногда униполярные двигатели имеют раздельные 4 обмотки, по этой причине их ошибочно называют 4-х фазными двигателями. Каждая обмотка имеет отдельные выводы, поэтому всего выводов 8. Из-за простоты подключения и управления униполярного двигателя в этой статье рассмотрим именно этот тип шагового двигателя.

Рекомендуем посмотреть