Монк - Программируем Arduino. Профессиональная работа со скетчами.

Здесь есть возможность читать онлайн «Монк - Программируем Arduino. Профессиональная работа со скетчами.» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб., Год выпуска: 2017, ISBN: 2017, Издательство: Издательский дом Питер, Жанр: Программирование, Компьютерное железо, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программируем Arduino. Профессиональная работа со скетчами.: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программируем Arduino. Профессиональная работа со скетчами.»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Arduino — стандартный микроконтроллер, получивший широкое признание у инженеров, мастеров и преподавателей благодаря своей простоте, невысокой стоимости и большому разнообразию плат расширения. Платы расширения, подключаемые к основной плате Arduino, позволяют выходить в Интернет, управлять роботами и домашней автоматикой.
Простые проекты на основе Arduino не вызывают сложностей в реализации. Но, вступив на территорию, не охваченную вводными руководствами, и увеличивая сложность проектов, вы быстро столкнетесь с проблемой нехватки знаний — врагом всех программистов.
Эта книга задумана как продолжение бестселлера «Programming Arduino: Getting Started with Sketches». Несмотря на то что эта книга включает краткое повторение основ из книги «Programming Arduino», она познакомит читателя с более продвинутыми аспектами программирования плат Arduino.

Программируем Arduino. Профессиональная работа со скетчами. — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программируем Arduino. Профессиональная работа со скетчами.», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Пример SPI

Этот пример демонстрирует взаимодействие платы Arduino с интегральной микросхемой восьмиканального АЦП MCP3008, добавляющего еще восемь 10-битных аналоговых входов. Эта микросхема стоит очень недорого и легко подключается к плате. На рис. 9.6 изображена схема подключения микросхемы к плате Arduino с использованием макетной платы и нескольких проводов. Переменное сопротивление служит для изменения уровня напряжения на аналоговом входе 0 между 0 и 5 В.

Рис 96Схема соединения компонентов для примера SPI Ниже приводится скетч для - фото 65

Рис. 9.6.Схема соединения компонентов для примера SPI

Ниже приводится скетч для этого примера:

// sketch_09_01_SPI_ADC

#include

const int chipSelectPin = 10;

void setup()

{

Serial.begin(9600);

SPI.begin();

pinMode(chipSelectPin, OUTPUT);

digitalWrite(chipSelectPin, HIGH);

}

void loop()

{

int reading = readADC(0);

Serial.println(reading);

delay(1000);

}

int readADC(byte channel)

{

unsigned int configWord = 0b11000 | channel;

byte configByteA = (configWord >> 1);

byte configByteB = ((configWord & 1) << 7);

digitalWrite(chipSelectPin, LOW);

SPI.transfer(configByteA);

byte readingH = SPI.transfer(configByteB);

byte readingL = SPI.transfer(0);

digitalWrite(chipSelectPin, HIGH);

// printByte(readingH);

// printByte(readingL);

int reading = ((readingH & 0b00011111) << 5)

+ ((readingL & 0b11111000) >> 3);

return reading;

}

void printByte(byte b)

{

for (int i = 7; i >= 0; i--)

{

Serial.print(bitRead(b, i));

}

Serial.print(" ");

}

Функция printByte использовалась на этапе разработки для вывода двоичных данных. Несмотря на то что Serial.print может выводить двоичные значения, она не добавляет ведущие нули, что немного усложняет интерпретацию данных. Функция printByte, напротив, всегда выводит все 8 бит.

Чтобы увидеть данные, поступающие от микросхемы MCP3008, уберите символы // перед двумя вызовами printByte, и данные появятся в окне монитора последовательного порта.

Наиболее интересный для нас код сосредоточен в функции readADC, которая принимает номер канала АЦП (от 0 до 7). Прежде всего нужно выполнить некоторые манипуляции с битами, чтобы создать конфигурационный байт, определяющий вид преобразования аналогового сигнала и номер канала.

Микросхема поддерживает два режима работы АЦП. В одном выполняется сравнение двух аналоговых каналов, а во втором, несимметричном режиме (который используется в этом примере), возвращается значение, прочитанное из указанного канала, как в случае с аналоговыми входами на плате Arduino. В документации к MCP3008 ( http://ww1.microchip.com/downloads/en/DeviceDoc/21295d.pdf) указывается, что в настроечной команде должны быть установлены четыре бита: первый бит должен быть установлен в 1, чтобы включить несимметричный режим, следующие три бита определяют номер канала (от 0 до 7).

Микросхема MCP3008 не поддерживает режим побайтовой передачи, в котором действует библиотека SPI. Чтобы MCP3008 распознала эти четыре бита, их нужно разбить на два байта. Далее показано, как это делается:

unsigned int configWord = 0b11000 | channel;

byte configByteA = (configWord >> 1);

byte configByteB = ((configWord & 1) << 7);

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

Следующая строка устанавливает уровень LOW в линии выбора ведомого устройства, чтобы активировать его:

digitalWrite(chipSelectPin, LOW);

После этого отправляется первый конфигурационный байт:

SPI.transfer(configByteA);

byte readingH = SPI.transfer(configByteB);

byte readingL = SPI.transfer(0);

digitalWrite(chipSelectPin, HIGH);

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

Затем в линии выбора ведомого устанавливается уровень HIGH как признак того, что передача завершена.

Полученное 10-битное значение пересчитывается, как показано в следующей строке:

int reading = ((readingH & 0b00011111) << 5)

+ ((readingL & 0b11111000) >> 3);

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

Для проверки откройте монитор последовательного порта. Вы должны увидеть, как в нем появляются некоторые данные. Если повернуть шток переменного сопротивления по часовой стрелке, чтобы увеличить напряжение на аналоговом входе с 0 до 5 В, вы должны увидеть картину, похожую на рис. 9.7. Первые два двоичных числа — это два байта, полученных от MCP3008, а последнее десятичное число — это аналоговое значение между 0 и 1023.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программируем Arduino. Профессиональная работа со скетчами.»

Представляем Вашему вниманию похожие книги на «Программируем Arduino. Профессиональная работа со скетчами.» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программируем Arduino. Профессиональная работа со скетчами.»

Обсуждение, отзывы о книге «Программируем Arduino. Профессиональная работа со скетчами.» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x