Pashgan

Pashgan

   Реализация обмена данными по USART`у, которую мы рассматривали в предыдущей статье имеет некоторые недостатки. Функция отправки символа перед тем как инициировать передачу выполняет опрос флага UDRE регистра UCSRA в цикле while. А это значит, что микроконтроллер тратит свое драгоценное время на пустую работу. Прием данных осуществляется в однобайтовый буфер, при этом предыдущие данные затираются, если микроконтроллер не успевает их считывать.
   Для простых приложений такого подхода вполне достаточно, но для сложных гораздо эффективнее организовать передачу (прием) данных используя кольцевой (циклический) буфер.
   Микроконтроллер ATmega8535 имеет в своем составе модуль универсального синхронно/асинхронного приемопередатчика -  USART. С его помощью между компьютером и микроконтроллером можно организовать обмен данными по последовательному каналу. Раньше в компьютерах для этих целей использовались COM порты, однако на современных машинах они уже большая редкость. Если на вашем компьютере все-таки есть такой порт, то для подключения микроконтроллера, понадобится преобразователь уровней ТТЛ – RS232. Его можно собрать на микросхеме MAX232. 
   Микроконтроллер может “общаться” с lcd  по 8-ми или 4-ех разрядной шине данных. Первый вариант более простой, поэтому мы с него и начали, второй посложнее, но позволяет сэкономить 4 вывода микроконтроллера.  
   Давайте разберемся чем отличается это подключение, и добавим в нашу библиотеку поддержку 4-ех разрядной шины.
Новые проекты:
  "Подключение LCD к микроконтроллеру AVR. Добавляем поддержку 4-ех разрядной шины." Там почти нет комментариев, но скоро накатаю материал.. Проекты в двух вариантах - для WINAVR и IARa.
  2 тестовых проекта - микроконтроллер ATmega16 и дисплей от Nokia3310. Используется драйвер для Nokia3310 с видео-буфером. В первом проекте знакогенератор и вывод рисунка, во-втором пример вывода простой графики.
  Многих начинающих программистов WINAVR подкупает возможностью работать в связке с AVR Studio, которая имеет в своем составе программный отладчик. Если вы еще не в курсе, то IAR тоже позволяет это делать, только для этого нужно установить специальный формат выходного файла.
   Си существенно облегчает написание программ для микроконтроллеров. Однако при всех его преимуществах,  иногда возникает потребность написать часть кода на ассемблере. В IARе для этого можно использовать ассемблерные вставки, intrinsics функции или отдельные ассемблерные модули. Давайте на примере исходника для работы с энкодером разберем, как написать ассемблерный модуль, который можно использовать в сишной программе. 
   В своих микроконтроллерных поделках я постоянно использую кнопки. Поэтому написал простенький драйвер для работы с ними. В текущей версии драйвер заточен под четыре кнопки, но его довольно легко переделать. В этой статье я опишу содержимое файлов драйвера, а в следующей разберу какой-нибудь практический пример.

  

 

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

 

   Для выполнения команд или вывода данных контроллеру символьного lcd требуется определенное время. Поэтому в конце функций записи мы использовали программные задержки в 40 us. Это вполне работоспособное решение, однако не единственно возможное.   
   Контроллер символьного lcd имеет флаг занятости BF. Он устанавливается в 1,  когда контроллер выполняет внутреннюю работу и сбрасывается, когда контроллер освобождается. Вместо программной задержки можно опрашивать состояние этого флага и запускать цикл записи команд/данных, только когда флаг сброшен.
   Есть у меня небольшой такой интерес к медицинской электронике. Не скажу, что преуспел в этом направлении, но кое-какие схемы собирал. Одна из таких схем – оптический датчик пульса. Первоначальный вариант был найден на просторах сети, но результат сборки разочаровал и пришлось как обычно экспериментировать.