цифровая электроника
вычислительная техника
встраиваемые системы

 

ATmega и встроенный датчик температуры

Автор: Mike(admin) от 13-02-2014, 07:45

Интересной особенностью микроконтроллеров серии ATmega является встроенный датчик температуры, показания которого можно прочитать, используя внутренний АЦП. На текущий момент среди МК ATmega насчитывается 18 представителей с датчиком температуры: AT90PWM161, AT90PWM81, ATmega168A, ATmega168P, ATmega168PA, ATmega16M1, ATmega16U4, ATmega328, ATmega328P, ATmega32M1, ATmega32U4, ATmega48A, ATmega48P, ATmega48PA, ATmega64M1, ATmega88A, ATmega88P и ATmega88PA.


Arduino Leonardo

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

Конечный автомат на C

Автор: Mike(admin) от 10-02-2014, 04:55

При программировании приложений для встраиваемых систем удобно пользоваться конечными автоматами.


конечный автомат

Они дают ряд преимуществ:


  • Вы можете перевести требования системы в диаграмму состояний или в таблицу состояний переходов.

  • По диаграмме состояний или таблице состояний переходов вы можете проверить правильность проекта до написания программы.

  • Это облегчает понимание кода.

  • Вы можете быстро сопоставлять друг с другом код и требования к системе.

  • Обеспечивается детерминизм, то есть вы сможете точно знать, что делает система в определенный момент.

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

Симулятор 8-битного ассемблера

Автор: Mike(admin) от 7-02-2014, 06:53

Хотя с развитием вычислительной техники и повышением ее производительности ассемблер используют все реже и реже, поскольку языки высокого уровня отлично справляются со своими задачами, а их компиляторы позволяют максимально оптимизировать код, все-таки изучение ассемблера для понимания базовых принципов работы вычислительных систем по-прежнему важно.


ассемблер

Чтобы процесс изучения проходил быстро, удобно и легко, Марко Швейгхаузер (Marco Schweighauser) написал простой симулятор ассемблера, который запускается из браузера и имеет интуитивно понятный интерфейс.

Программная реализация часов реального времени

Автор: Mike(admin) от 25-01-2014, 13:57

Часы реального времени (Real Time Clock или RTC) являются полезным элементом в случае, когда нужно вести учёт хронометрических данных. Но, к сожалению, не во всех вычислительных устройствах есть этот элемент.


часы реального времени

Тем не менее, RTC можно попытаться реализовать программным способом, что и представляет собой код, приведенный ниже.

15 алгоритмов сортировки за 6 минут

Автор: Mike(admin) от 15-01-2014, 12:15

Сортировка данных - очень полезная штука, когда нужно упорядочить определенным образом большой массив данных. Сегодня существует немало алгоритмов сортировки, и все они имеют свои преимущества и недостатки. Иногда интересно посмотреть, как работают эти алгоритмы вживую. Поэтому ниже представлено видео, в котором наглядно показано функционирование 15 алгоритмов.


сортировка

Алгоритмы демонстрируются в следующем порядке: сортировка выбором, сортировка вставками, быстрая сортировка, сортировка слиянием, сортировка кучей, поразрядная сортировка (с младшего разряда), поразрядная сортировка (со старшего разряда), std::sort (интроспективная сортировка), std::stable_sort (адаптивная сортировка слиянием), сортировка Шелла, метод пузырька, шейкерная сортировка, гномья сортировка, битоническая сортировка и случайная сортировка (bogo sort). Сверху видео также можно посмотреть количество сравнений и число обращений к массиву.


Смотреть на алгоритмы->

Программная симуляция SPI

Автор: Mike(admin) от 13-01-2014, 11:36

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


SPI

Ниже представлен код на ассемблере, симулирующий работу интерфейса SPI (функции записи и чтения) для микроконтроллера PIC16F877A.

3D печать: создание моделей с помощью OpenSCAD

Автор: Mike(admin) от 29-12-2013, 07:10

У вас есть 3D принтер, и вам надоело распечатывать модели из интернета и хотите создать что-то свое? Замечательно! Сегодня существует ряд программ, позволяющих рисовать свои 3D модели. Одной из таких программ является OpenSCAD. Ее особенность заключается в том, что моделирование здесь скорее представляется программированием, нежели рисованием. Большое количество полезных моделей, в том числе детали для 3D принтеров RepRap, были спроектированы с помощью OpenSCAD.


OpenSCAD

Этот материал не является полным руководством OpenSCAD, но прочитав его вы сможете создавать несложные детали самостоятельно.

Срежьте жирок с AVR-GCC кода

Автор: Mike(admin) от 8-12-2013, 09:15

Хотя использование AVR-ассемблера позволяет легко писать компактные по размеру кода программы, все же использование языка C и AVR Libc дает больше удобств. В этой статье будет показано, как написать код на C, который avr-gcc скомпилирует с минимальным размером. Существует ряд руководств по написанию компактного кода для AVR, но ни одно из них не рассматривает вопрос сокращения оверхеда в start-up библиотеке avr-gcc (gcrt1).


avr-gcc

Многие все еще применяют avr-gcc 4.3.3, поскольку он дает более плотный код по сравнению с версиями 4.5.3 и 4.7, но для ниже приведенного примера avr-gcc 4.8.2 дал еще более компактный код, нежели 4.3.3.


Тестовая программа работает со встроенным температурным датчиком ATtiny85 и мигает светодиодом. После компиляции с оптимизацией –Os получаем программу размером 274 байта:


Встроенные функции в C и C++

Автор: Mike(admin) от 14-11-2013, 14:16

Замена вызова функции копией кода этой функции может представлять собой эффективное решение при оптимизации, особенно если скорость выполнения программы является приоритетной целью. Ниже будет рассмотрено, как работает принцип встраивания функций, когда это может быть эффективно и как это может выполняться автоматически в C и C++.


Основы принципа встраивания функций


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


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



Иерархия в VHDL-коде

Автор: Mike(admin) от 1-11-2013, 18:11

Чтобы без особых проблем разрабатывать и поддерживать проекты, их нужно структурировать. В своих проектах люди используют абстракцию вне зависимости от характера разработки — будь-то электронное устройство, программа или механическая деталь. В этой статье пойдет речь о том, как использовать иерархию в VHDL-коде.


Зачастую весь VHDL-код умещают в одном файле на одном уровне. Если бы мы, к примеру, разрабатывали печатную плату, то не стали бы размещать на ней кучу дискретных компонентов. Вместо этого мы бы взяли микроконтроллеры, микросхемы памяти и другие устройства и классифицировали бы их как «компоненты», которые должны выполнять определенные функции. В некоторых случаях мы бы использовали на плате отдельные компоненты несколько раз. Это бы существенно упростило нашу работу.


плата с микросхемами

Рисунок 1 — плата с микросхемами

Если мы сравним разработку VHDL-кода с созданием печатной платы, то мы можем думать о нем, как об одноуровневой плате с большим количеством устройств и компонентов на ней. Плата не выполняет никаких других функций, кроме соединения определенным образом всех проводов. Этот же подход можно применить к VHDL, как показано на примере ниже.