Опубликован: 24.11.2024 | Доступ: свободный | Студентов: 2 / 0 | Длительность: 05:47:00
Лекция 7:

Последовательная связь

< Лекция 6 || Лекция 7: 1234567

Код применения ЖК-экрана

Теперь, когда мы увидели большинство частей кода, пришло время собрать его воедино. Вот код для приложения ЖК-экрана и RTC. Если вы следите за развитием событий, создайте новый проект на основе проекта примера hello, как обычно, и скопируйте следующий код, чтобы заменить содержимое файла hello.c.

Попробуйте приложение, чтобы убедиться, что оно работает правильно.

/****************************************************************************** 
Red-V Thing Plus LCD_Demo, 
автор Эдуардо Корпеньо
     Используя ЖК-экран Qwiic 16x2 символов, выведите сообщение hello-world 
и младший байт счетчика часов реального времени.
     Дата: 20 июня 2022 года 
Разработано с использованием Freedom Studio v4.18.0.2021-04-1 на Windows 10 
ЛИЦЕНЗИЯ: Этот код выпущен под лицензией MIT (
http://opensource.org/licenses/MIT).
******************************************************************************/
#include <metal/i2c.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <string.h>
// ЖК-экран подключен к шине I2C0 
#define LCD_ADDR 0x72 
#define I2C_BAUDRATE 9600 
#define I2C_MASTER 1
// Макрофункции 
#define Red_V_RTC_start() *((uint32_t *) 0x10000040) |= 1<<12
#define Red_V_RTC_rtccountlo (*((unint32_t *) 0x10000048))
// Функции ЖК-дисплея 
void LCD_clear(struct metal_i2c *i2c){ 
unsigned char buf[3] = "|-"; 
metal_i2c_write(i2c, LCD_ADDR, 2, buf, 1); 
}
void LCD_gotoxy(struct metal_i2c *i2c, uint32_t x, uint32_t y){ 
unsigned char buf[2]; 
x &= 0x0f; // Ограничение x от 0 до 15 
y &= 0x01; // Ограничение y от 0 до 1
  buf[0] = 254; buf[1] = 128 + x + y*64; 
metal_i2c_write(i2c, LCD_ADDR, 2, buf, 1); 
}
void LCD_print_str(struct metal_i2c *i2c, unsigned char *str){ 
metal_i2c_write(i2c, LCD_ADDR, strlen(str), str, 1); 
}
int main(void){ struct metal_i2c *i2c; 
uint32_t now; 
unsigned char buff[16];
  Red_V_RTC_start()
  i2c = metal_i2c_get_device(0); 
metal_i2c_init(i2c, I2C_BAUDRATE, I2C_MASTER);
  LCD_clear(i2c); LCD_print_str(i2c, "Hey there!");
  now = Red_V_RTC_rtccountlo & 0xff;
  sprintf(buff, "Time: %d\0",now);
  LCD_gotoxy(i2c,3,1); LCD_print_str(i2c,buff);
  while (1); // Сброс для повторной печати 
}       

Устройство Qwiic: MEMS-акселерометр

Второе устройство Qwiic, которое мы будем использовать, - это разводная плата MEMS 3D акселерометра и гироскопа. Вы можете прочитать все о ней на странице продукта.

Разводная плата SparkFun LSM6DSO Qwiic (взято из SparkFun Electronics, предоставлено по CC BY 2.0)

Рис. 6.15. Разводная плата SparkFun LSM6DSO Qwiic (взято из SparkFun Electronics, предоставлено по CC BY 2.0)

Этот Qwiic-модуль представляет собой разводную плату для МЭМС интегральной схемы акселерометра и гироскопа LSM6DSO производства STMicroelectronics. Плата не имеет большого количества вспомогательного оборудования вокруг микросхемы, поскольку она уже реализует интерфейс I2C, поэтому она идеально подходит для модуля Qwiic.

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

Этот чип способен измерять ускорение и угловую скорость по 3 осям. Как и большинство устройств I2C, этот чип конфигурируется посредством операций записи регистров в шину I2C. В руководстве (доступно на странице продукта) указаны все эти регистры.

Чувствительность акселерометра по умолчанию обеспечивает диапазон измерений +/-2G на ось. При работе с 8-битными измерениями показание 64 означает 1G (земное притяжение), поэтому если держать акселерометр так, чтобы одна из его осей была направлена вниз, то показания в этом направлении будут равны 64. Это может быть +64 или -64, в зависимости от того, куда направлена ось - вверх или вниз.

Для демонстрационного приложения, показывающего ускорения по осям X и Y, нас интересуют 3 регистра:

  • Регистр управления акселерометром 1 Мы можем включить акселерометр с помощью этого регистра, расположенного по адресу 0x10. Четыре старших бита этого регистра включают акселерометр и настраивают частоту работы. Мы выберем использование его на частоте 52 Гц, записав 0x30 в этот регистр.
  • Выходной регистр датчика линейного ускорения по оси X Это старший байт 16-битного результата. Мы будем использовать старший байт для 8-битного чтения, расположенный по адресу 0x29.
  • Выходной регистр датчика линейного ускорения по оси Y Аналогично описанному выше, но для оси Y. Он расположен по адресу 0x2B.

Аппаратное обеспечение приложения акселерометра

Это приложение будет использовать как ЖК-экран, так и акселерометр для демонстрации гирляндной сети I2C.

Для этого приложения мы также не увидим принципиальной схемы. Вместо этого мы имеем фотографию аппаратного обеспечения приложения:

Аппаратные соединения для демонстрационного приложения акселерометра

Рис. 6.16. Аппаратные соединения для демонстрационного приложения акселерометра
< Лекция 6 || Лекция 7: 1234567