Интересная схема генерации синусоидального сигнала предложена в одном из старых выпусков журнала EDN. Идея основана на использовании цифрового сдвигового регистра и нескольких резисторов с фиксированными номиналами. Схема показана на рисунке ниже.

   Это схема простого аудио усилителя на основе операционного усилителя LM833. Она относится к разряду тех схем, которые можно собрать за час "на коленке". Однако, несмотря на свою простоту, схема вполне работоспособна и при должном качестве сборки может найти применение в качестве усилителя для наушников и предусилителя электрогитары. Или, на худой конец, вашего первого собранного устройства.

аудио усилитель на LM833

   Некоторое время назад я написал макросы для реализации виртуальных портов. С помощью этих макросов можно переделать практически любую библиотеку для работы с произвольными выводами микроконтроллера. Первая библиотека, которая попала под это изменение, стала библиотека для символьного LCD. В этом посте я расскажу, как ее применить в своем проекте. 

   Если вы читали предыдущий материал, то знаете как объявлять, читать и записывать данные в EEPROM. Но давайте разберемся, как же на самом деле происходят эти операции и что от нас скрывает компилятор. Это позволит лучше понимать работу микроконтроллера, и при желании написать свои специфические функции для работы с EEPROM.

   При программировании микроконтроллеров AVR иногда возникает потребность сохранять данные, которые бы после выключения питания или сброса контроллера не изменяли свое значение. Для этих целей в составе AVR есть энергонезависимая память данных EEPROM (Electrically Erasable Programmable Read-Only Memory — электрически стираемое перепрограммируемое ПЗУ). 
   EEPROM имеет адресное пространство отличное от адресных пространств ОЗУ и flash памяти, в котором можно читать и записывать одиночные байты. В зависимости от модели микроконтроллера EEPROM может иметь объем от 512 байт (как, например, в микроконтроллере atmega16) до нескольких килобайт. Гарантированное количество циклов перезаписи этой памяти составляет не меньше 100000. 
   В этой статье на примере atmega16 мы разберемся, как работать с этим типом памяти, какие возможные проблемы при этом могут возникать и как с ними бороться.