Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

Данная статья, скорее не урок, а демонстрация возможностей устройств, изученных нами ранее. Речь пойдет о том, как управлять громкостью в Windows 7 (для Xp не актуально) при помощи энкодера, обрабатываемого AVR микроконтроллером.

Нам понадобятся знания из уроков про энкодер и передачу данных по UART.  Код обработки энкодера взят из предыдущего урока. Выкинуто все, что касается lcd и добавлена обработка передачи данных по UART. Структурная схема выглядит так:

15-2-1
Исходный код

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
 
while (1)
   { 
      if (upState >= 4) 
      {                            
        Vol++;
        upState = 0;
        putchar('1');
        putchar('\n');
      }
      if (downState >= 4) 
      {                              
        Vol--;
        downState = 0;
        putchar('0');
        putchar('\n');
      }
   };
}

Из кода видно, что с каждым щелчком энкодера передается 2 символа. Если нужно увеличить громкость передается ‘1’, если уменьшить ‘0’ и признак окончания строки ‘\n’. Окончание строки передается, чтобы со стороны компьютера понимать, что передача строки закончена. Передача данных осуществляется преобразователем UART-USB на микросхеме FTDI, о которой я писал ранее.

Все самое сложное было в написании программы со стороны компьютера. Писал, как обычно, в Visual Studio на C#. С самого начала не везло с примерами. Дело в том, что для Xp рабочих примеров много, для Windows 7 все обстояло немного сложнее.

В конце концов проблема решилась. Долгие поиски привели меня к проекту под названием «Vista Core Audio API Master Volume Control», который представляет собой готовый регулятор звука. Дело осталось за малым, добавил в форму возможность приема данных по UART и все готово.

15-2-2

Результат:

Размышления привели меня к мыслям о различных вариациях. Например, регулировать можно не энкодером, а кнопками. Регулировать можно что угодно, в том числе запуск программ. Можно сделать некое подобие обыкновенной клавиатуры — передавать по UART данные, а прогой имитировать нажатие клавиш. Таким образом, простор для фантазий безграничен.

Проект для Atmega8 доступен здесь, исходники для VS2010 C# доступны тут.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика