Выводы входов/выходов
Библиотека выводов предназначена для оптимизации дигитальных выводов входа/выхода AVR. Цель библиотеки облегчить использование выводов AVR. Пользователь может создать в программе переменную для желаемого вывода, которой присваивается физический адрес вывода при помощи специальной макрофункции. Затем при помощи переменной можно вызвать различные функции для смены направления и состояния вывода и их чтения.
Назначая физическую шину (порт) вывода и индекс только один раз и в одном месте, можно легко поменять программу в случае физических изменений. Например, если сначала индикатором используется один LED, можно с помощью простого изменения программы начать использовать другой LED. Из переменных выводом можно создавать массивы, например для составления шин.
Типы данных
pin
Структурный тип данных для удержания регистров вывода и битовой маски. Переменные типа pin константны и их следует инициализировать в начале программы. Для облегчения инициализации существует макрофункция PIN, первый параметр которой – это обозначение шины (заглавная латинская буква A, B, C, итд.) и второй номер вывода (0-7).
Функции
void pin_setup_output(pin pin)
Установка вывода выходом. Параметры:
void pin_setup_input(pin pin)
Установка вывода входом без резистора pull-up. Параметры:
void pin_setup_input_with_pullup(pin pin)
Установка вывода входом с резистором pull-up. Параметры:
void pin_set(pin pin)
Установка выходного вывода высоким. Параметры:
void pin_clear(pin pin)
Установка выходного вывода в низкое положение. Параметры:
void pin_toggle(pin pin)
Инвертирование положения выходного вывода. Низкое положение меняется на высокое и наоборот. Параметры:
void pin_set_to(pin pin, bool value)
Установка выходного вывода в желаемое положение с помощью параметра. Параметры:
bool pin_get_value(pin pin)
Считывание положения входного вывода и возвращение функцией. Параметры:
bool pin_get_debounced_value(pin pin)
Считывание положения входного вывода через противодребезговый фильтр выключателя и его возвращение. Фильтрация происходит минимально за 8 ms и максимально за 100 ms, в зависимости от того, как быстро закончится дребезг выключателя. Если оно не закончится через 100 ms, функция возвратит false. Функция использует программную паузу из библиотеки задержек функций. Параметры:
Пример
Пример того, как сделать значение одного вывода зависимым от другого. В программе выводу PC3 присваивается обратное выводу PC0 значение:
#include <homelab/pin.h>
pin output_pin = PIN(C, 3);
pin input_pin = PIN(C, 0);
int main(void)
{
bool value;
// Установка вывода выходом
pin_setup_output(output_pin);
// Установка вывода входом с помощью резистора pull-up
pin_setup_input_with_pullup(input_pin);
// Бесконечный цикл
while (true)
{
// Считывание значения входного вывода
value = pin_get_value(input_pin);
// Присвоение обратного значения выходному выводу
pin_set_to(output_pin, !value);
}
}