• pinMode () – настраивает вывод в качестве входа или выхода;
• digitalWrite () – устанавливает уровень цифрового выхода;
• digitalRead () – считывает состояние входа;
• analogRead () – считывает аналоговое значение вывода;
• analogWrite () – устанавливает сигнал ШИМ;
• shiftout () – передает байт на указанный вывод, один бит за один раз;
• pulseIn () – обнаруживает приход импульса на вход;
• millis () – считывает количество миллисекунд с момента включения чипа;
• micros () – считывает количество микросекунд, с момента включения чипа;
• delay () – приостанавливает выполнение скетча на указанное число миллисекунд;
• delayMicroseconds () – приостанавливает выполнение скетча на указанное число микросекунд.
В версии 1.0.2 «Ардуино» (IDE), функции последовательного управления должны быть совместимы с ATtiny. Но многие другие функции не поддерживаются, как, например, функции для серводвигателей. В интернете существует множество электронных библиотек, посвященных ATtiny, в том числе и для серводвигателей (Servo8Bit).
Если ATtiny85 недостаточно, мы можем использовать другие чипы. Хорошим выбором будет ATtiny2313 или ATtiny4312, которые оснащены большимколичеством выводов, в том числе и с последовательным интерфейсом. Если все же памяти недостаточно, мы можем перейти непосредственно к ATmega328, чипу «Ардуино». Программируя его напрямую, у нас будет больше памяти, потому что загрузчик при этом будет отсутствовать.
При использовании ATmega или ATtiny2313 вам может потребоваться подключить кварц, для генерации тактовых сигналов более высоких частот. Проверьте в техническом описании, на какой вывод должен быть подключен кварц. С кварцем на 16 МГц вам также потребуются два конденсатора на 20 пФ. Не забудьте подключить сброс (RESET) на 5 В, чтобы запустить чип.
Рис. 9.10. Микрочип ATmega328 на макетной плате, оснащенный кварцем на 16 MHz: «Ардуино DIY»
Чтение аналогового входа
Давайте теперь рассмотрим второй пример, в котором напишем скетч для чтения аналогового входа. К «Ардуино UNO» можно подключить фоторезистор, а затем выводить значения по последовательному порту, но ATtiny85 не имеет последовательного порта, поэтому подключим светодиод, который будет включен, если значение, обнаруженное датчиком, превышает определенный предел.
Нам понадобятся:
• макетная плата;
• «Ардуино UNO», запрограммированная как ArduinoISP (или как программатор FabISP);
• ATtiny85;
• фоторезистор;
• резистор на 10 кОм;
• светодиод;
• резистор на 220 Ом;
• конденсатор на 0,1 мкФ;
• перемычки или соединительные провода;
• источник питания на 5 В (вы также можете использовать «Ардуино» в качестве источника питания).
Рис. 9.11. Электрическая схема с ATtiny85, фоторезистором и светодиодом. Указано электропитание на 5 В, которое может быть взято от «Ардуино» или от другого источника питания
Начнем наш эксперимент.
1. Вставим ATtiny85 в центр макетной платы.
2. Подсоединяем выводы «Ардуино» 10, 11, 12 и 13 к ATtiny.
3. Копируем скетч в новое окно «Ардуино» и программируем чип, как мы уже научились делать в предыдущем примере.
void setup() {
pinMode (0, OUTPUT);
}
void loop () {
int light = analogRead(A3);
if (light > 500) {
digitalWrite(0, HIGH);
} else {
digitalWrite(0, LOW);
}
delay(100);
}
4. Отсоединяем «Ардуино».
5. Соединяет вывод 8 чипа с линией для источника питания на макетной плате, которую мы будем использовать на 5 В.
6. Соединяем вывод 4 ATtiny с землей (GND).
Рис. 9.12. Схема с ATtiny и фоторезистором, реализованная на макетной плате
7. Последовательно соединяем фоторезистор с сопротивление на 10 кОм, получаем сигнал, подаваемый от делителя напряжения на вывод 2 чипа, который соответствует аналоговому входу номер 3 (A3 в скетче).
8. Добавляем светодиод с сопротивлением на 220 Ом, так что положительный вывод светодиода (анод) соединен с выводом номер 5 чипа, который соответствует цифровому выводу номер 0.
9. Вставляем конденсатор на 0,1 мкФ мостиком между двумя линиями для электропитания на макетной плате. Конденсатор используется для подавления шума и помех.
10. Подаем в цепь питание 5 В, светодиод должен включиться только тогда, когда значение, полученное фоторезистором, превысит установленное нами пороговое значение (если он не работает, попытайтесь изменить пороговое значение, установленное в скетче, а затем перезагрузить прошивку ATtiny).
В качестве упражнения попробуйте:
• установить параметр порогового значения для включения светодиода с помощью внешнего триммера;
• установить яркость светодиода с помощью ШИМ сигнала до значения, считываемого датчиком.
Fuse
Чип ATtiny, который мы использовали в предыдущих примерах, будет работать на частоте 1 МГц, используя заводские настройки. При программировании микросхемы с ArduinoISP мы не можем редактировать fuse по желанию. Для установки внутреннего тактового сигнала до 8 МГц в меню Настройки =› Устройство мы должны выбрать ATtiny85 (8 МГц), а затем выбрать burn bootloader в меню Настройки. ATtiny не управляет загрузчиком, и операция устанавливает только fuse микросхемы. Чтобы изменить все fuse по желанию в соответствии с настройками конфигурации параметров микросхемы, необходим ISP-программатор.
Программирование в С
С помощью программатора ISP вы можете непосредственно программировать чип без использования среды программирования «Ардуино». Зачем вам может это понадобиться? Размер программы существенно уменьшается. Программа для мигания светодиода уменьшается более чем на 2800 Б до размера всего 250 Б: это большая экономия! Недостатком является потеря всех удобств, которые предоставляет нам среда для программирования. Мы больше не можем рассчитывать на все эти удобные функции конфигурации и считывания выводов, активации ШИМ-сигналов, отправки сообщений в последовательный порт и т. д. Чтобы научиться писать прошивкитаким образом, вам нужно немного поупражняться: в этом случае интернет и радиокомпоненты будут очень полезными инструментами.