понедельник, 6 октября 2014 г.

Быстрый осциллограф на Arduino / AVR. Часть 2

Что нам понадобится



Для работы над проектом нам понадобится плата Arduino и даташит на  находящийся в плате микроконтроллер.

Даташит для ATMEGA328P.

Также будет добавленна электронная схема в виде шилда. Список компонентов предоставлю позже.

Работа с микроконтроллером. Побитовый доступ к регистрам

Для повышения быстродействия необходимо использовать функции более низкого уровня, чем стандартные функции Arduino IDE. Эти функции будут работать с регистрами, которые в свою очередь являются наборами из восьми бит, так как Atmega328P имеет восьмиразрядную архитектуру.

Каждый регистр имеет свое имя, описанное в даташите. Например ADCSRA - регистр А настройки АЦП. Кроме того, каждый бит регистра имеет имя, например ADEN - бит включения АЦП. 

Для работы можно использовать обычные операторы языка C для работы с битами, но есть и очень удобные макросы :

// Определения для установки и сбрасывания битов регистра
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

Пользоваться ими очень просто:

Для установки разрешающего бита в 1 надо написать:

sbi(ADCSRA,ADEN);

Для сброса разрешающего бита в 0 надо написать:

cbi(ADCSRA,ADEN);

Комментариев нет:

Отправить комментарий