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

Печать

Измерение постоянного тока с помощью AVR. Простой вольт-амперметр

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

Рейтинг:   / 49

Задача: разработаем простой вольт-амперметр со следующими характеристиками:

1. Величина измеряемого напряжения 0...25 V;
2. Величина измеряемого тока 0...2,5 А;
3. Вывод показаний на ЖК дисплей 1602;
4. Использование операционного усилителя.

Для измерения напряжения и тока потребуется 2 канала АЦП, используем каналы ADC0 и ADC1, к которым соответственно будут подходить сигналы измеряемых тока и напряжения. Источник опорного напряжения внутренний на 2,56V, разрядность аналого-цифрового преобразователя 10 бит. Подопытный микроконтроллер Atmega8, тактируется от внутреннего генератора частотой 4MHz. Схема устройства представлена ниже:

Печать

Регулировка яркости семисегментного индикатора

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

Рейтинг:   / 9

При использовании семисегментных индикаторов часто возникает необходимость в регулировке их яркости свечения. Существуют несколько таких способов. Например, изменять номиналы токоограничительных резисторов, подключенных к сегментам индикатора, но опять нет возможности оперативно регулировать яркость. Также можно подключить к общему катоду(аноду) транзистор, который будет ограничивать ток протекающий через индикаторы. Мы же применим способ благодаря которому можно программно менять яркость - ШИМ регулирование.

Печать

Использование таймера в режиме захвата. Измерение ширины, скважности и частоты сигнала

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

Рейтинг:   / 22

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

Задача измерения длины импульса, периода и частоты сводится к следующему:

1. Настраиваем шестнадцатиразрядный таймер/счетчик 1

Рабочая частота микроконтроллера(Atmega8) 8 МГц, используем предделитель на 8 для таймера/счетчика 1, т.е. частота таймера 1 МГц и 1 тик таймера будет равен 1/1000000 Гц = 1 мкс., т.е. за 65536 мкс произойдет одно прерывание таймера. Также используем входной подавитель шума, который активируется записью лог. 1 в бит ICNC1 регистра TCCR1B. Разрешаем прерывание по захвату и переполнению таймера.

Печать

PCF8574 - расширитель портов ввода/вывода

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

Рейтинг:   / 10
PCF8574 содержит 8-битный порт ввода-вывода общего назначения, чтение или запись данных осуществляется любым микроконтроллером или другим устройством по шине I2C. Расширитель имеет низкий потребляемый ток и выходы с регистром-защелкой с высокими характеристиками по току для прямой передачи сигнала на светодиоды и т.п. Также в устройстве есть линия прерывания (INT), которая может быть подключена к логике прерывания микроконтроллера. Посылая сигнал прерывания по этой линии, дистанционный ввод - вывод сообщает микроконтроллеру о поступающих на его порты данных, без необходимости поддерживать связь через I2C-шину. Это значит, что PCF8574 может оставаться простым "подчиненным" устройством.
Печать

PCF8591 - АЦП и ЦАП в одном

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

Рейтинг:   / 3

Микросхема PCF8591 обладает следующими возможностями:

- единственный источник питающего напряжения;
- сохранение работоспособности в диапазоне питающих напря­жений от 2,5 до 6 В;
- низкий ток потребления;
- три вывода задания slave-адреса;
- четыре аналоговых входа с возможностью программирования включения (прямое и дифференциальное);
- использование A/D преобразования с последовательным при­ближением и 8-разрядным диапазоном чисел;
- мультиплексированный D/A преобразователь с одним аналого­вым выходом.

Данная микросхема выполнена по технологии КМОП, имеет 4 аналоговых входа и 1 аналоговый выход, управляемые посредством задания данных на шине I2C. Биты А2...А0 в slave-адресе микросхемы задаются внешними сигналами по традиционному способу: подключением соответствующих выводов либо к общему проводу, либо к напряжению питания. Это позволяет использовать до 8 однотипных микросхем. В составе PCF8591 имеется только один A/D преобразователь, но использование методов мультиплексирования расширяет входные возможности микросхемы. Вход АЦП последовательно подключается к 4 сигнальным входам, и происходит считывание информации с них. К сожалению, мультиплексирование нельзя использовать для D/A преобразования, поэтому аналоговый выход только один. Максимальная скорость преобразования данных ограничена максимальным быстродействием шины I2C.

Печать

Подключение семисегментных индикаторов к AVR через транзисторные ключи

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

Рейтинг:   / 6

При подключении к микроконтроллеру светодиодных семисегментных индикаторов малой мощности использовать управляющие транзисторы нет необходимости, т.к. при использовании динамической индикации ток потребления сегмента уменьшается. Можно обойтись лишь использованием токоограничительных резисторов, а общие аноды/катоды подключать напрямую к контроллеру. Другое дело если используются индикаторы с большим током потребления, например с высотой цифр более 30 мм. Ток потребления таких индикаторов более 30мА, а макс. ток для ножки контроллера 20мА, поэтому такие индикаторы подключают через управляющие транзисторы(ключи). В основном используются биполярные транзисторы для общего анода pnp-структура, для общего катода npn - структура, также можно использовать полевые транзисторы или транзисторные сборки типа ULN2003 и т.п.

Печать

Использование асинхронного режима таймера 2. "Точные часы"

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

Рейтинг:   / 5

Все таймеры контроллера тактируются от основного тактового генератора, исходя из битов конфигурации контроллера это может быть внутренний RC генератор, внешний кварцевый резонатор или сигнал внешнего генератора. Также регистром TCNTn может управлять сигнал идущий со счетного входа Tn. В микроконтроллере Atmega8 есть один таймер, который имеет свой собственный генератор - это Таймер/счетчик 2, т.е. таймер может работать асинхронно от всей остальной периферии. Чтобы задействовать генератор Т2 необходимо подключить к выводам TOSC2 и TOSC1 кварцевый резонатор на рекомендуемую частоту 32768 Гц. Корпус этого кварца необходимо заземлить. Обычно асинхронный режим применяют для постройки часов реального времени, т.к. Т2 будет отдельно работать от основного ядра контроллера это значительно снижает энергопотребление процессора. Обслуживанием асинхронного режима работы Т2 занимается регистр ASSR, ниже показано назначение его битов:

Печать

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

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

Рейтинг:   / 5

Продолжаем знакомиться с различными протоколами передачи данных по ИК связи, на этот раз разберем протокол NEC, который в настоящее время стал очень популярным среди радиолюбителей. Информация в этом стандарте кодируется паузой разной длины между импульсами, если длительность паузы меньше это лог. ноль, если больше - лог. единица. Длина периода лог. нуля составляет 1,12 мс, а длина лог. единицы 2,25 мс, длина паузы лог. нуля составляет 560 мкс, а длина паузы лог. единицы 1,675 мс.

Команды передаются пакетами. Каждый пакет начинается со стартовой последовательности - импульса длиной 9 мс и паузы длиной 4,5 мс. В каждой посылке передается 8 бит адреса и 8 бит команды, причем адрес и команда передаются дважды - в прямом и инверсном виде (это кроме проверки валидности передачи, делает одинаковой общую длительность любой посылки). Каждый байт пакета передаётся младшим битом вперёд.

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