При программировании микроконтроллеров разработчики иногда сталкиваются с проблемой вычисления квадратного корня. Например, данная операция требуется при выполнении быстрого преобразования Фурье или вычислении среднеквадратического значения сигнала. 
   В стандартной библиотеке Си – math.h, есть функция для вычисления квадратного корня sqrt(), которой при желании можно воспользоваться. Она работает с числами типа float, обеспечивает высокую точность результата, но требует для своей работы длительного времени. Для микроконтроллера AVR это порядка 3000 циклов тактовой частоты (проверено в компиляторе IAR на разных уровнях оптимизации). 
   Если к точности вычисления корня не предъявляются высокие требования, можно воспользоваться упрощенным алгоритмом, занимающим меньше места в памяти и выполняющим вычисления в несколько раз быстрее.

   Когда АЦП делает выборки сигнала, он кодирует его дискретными шагами. Это вносит некоторую ошибку, известную как ошибка квантования. Использование нормального усреднения будет только сглаживать флуктуации сигнала, тогда как метод оверсемплинга и децимации будет увеличивать разрешение. Суть метода заключается в дискретизации сигнала с более высокой частотой и вычислении новой выборки сигнала на основе полученных дополнительных выборок. Требуемая частота дискретизации может быть найдена по формуле 3-1. Сложение дополнительных выборок и сдвиг результата вправо на n, будет давать результат с разрешением, увеличенным на n разрядов. 

   Микроконтроллеры AVR фирмы Atmel имеют в своем составе 10-ти разрядный аналого-цифровой преобразователь (АЦП). В большинстве случаев такой разрядности достаточно, но иногда возникают ситуации, когда требуется более высокая точность. 
   Существуют специальные методы обработки сигналов, позволяющие увеличить разрешение измерений. С помощью метода называемого “оверсемплинг и децимация” данная задача может быть решена без использования внешнего АЦП. 
   В этом руководстве рассмотрена теория и практическое применение данного метода.
   Микроконтроллеры AVR имеют возможность самопрограммирования, то есть могут самостоятельно изменять содержимое своей flash памяти. В практическом плане это означает, что, написав для микроконтроллера специальную программу-загрузчик (так называемый бутлоадер), мы можем обновлять его прошивку, не используя программатор. Причем интерфейс, по которому в микроконтроллер будет передаваться код программы, может быть совершенно произвольным. Обычно для этих целей используется один из аппаратно поддерживаемых интерфейсов, например, SPI, I2C или RS-232. Однако существуют и загрузчики, основанные на программной реализации таких интерфейсов как USB и 1-Wire.
   Для микроконтроллеров AVR существует несметное количество готовых бутлоадеров, и в большинстве случае мы можем спокойно использовать их в своих устройствах, не утруждая себя написанием собственного загрузчика.  В этой статье мы рассмотрим один из таких бутлоадеров, который разработан и свободно распространяется фирмой Chip45, и разберемся как его использовать. 
  При разработке электронных устройств иногда бывает ситуация, когда выводов микроконтроллера не хватает, а использовать другой чип нет возможности. В таких случаях обычно прибегают к схемотехническим трюкам или используют дополнительные внешние микросхемы, например, расширители портов, сдвиговые регистры или мультиплексоры.
   Расширители портов позволяют добавить микроконтроллеру “полноценные”  выводы, работающие как на выход, так и на вход, и, как правило, управляются с помощью стандартных интерфейсов - SPI  или I2C. Это очень удобно, но подобные микросхемы не из дешевых. 
   Бюджетный вариант – использование сдвиговых регистров и мультиплексоров, однако в этом случае полученные дополнительные выводы будут работать только на выход или на вход (исключение составляют универсальные сдвиговые регистры). Впрочем, в большинстве приложений этого вполне достаточно.  
   В этой статье мы рассмотрим расширение портов микроконтроллера с помощью сдвигового регистра 74HC595.  Им можно управлять как стандартными выводами  микроконтроллера, так и с помощью SPI модуля. Также его можно каскадировать, соединяя несколько микросхем в один большой регистр. 
   Чтобы пример был наглядным, с помощью регистров 74HC595 к микроконтроллеру будет подключен семисегментный индикатор. 


Страница 7 из 19