Опубликован: 24.11.2024 | Доступ: свободный | Студентов: 2 / 0 | Длительность: 05:47:00
Тема: Программирование
Лекция 7:
Последовательная связь
Код приложения акселерометра
Акселерометр - это очень простое дополнение к нашему предыдущему приложению, поэтому здесь мы приводим код приложения для акселерометра. Если вы следите за развитием событий, создайте новый проект на основе проекта-примера hello, как обычно, и скопируйте следующий код, чтобы заменить содержимое файла hello.c.
Попробуйте приложение, чтобы убедиться, что оно работает правильно.
/****************************************************************************** Red-V Thing Plus Accelerometer_Demo, автор Eduardo Corpe?o Используя ЖК-экран Qwiic 16x2 символа и акселерометр LSM6DSO, постоянно печатайте ускорение по осям X и Y. Дата: 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 ACCEL_ADDR 0x6B #define I2C_BAUDRATE 9600 #define I2C_MASTER 1 // Функции ЖК-дисплея 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); } // Быстрая и грязная функция задержки для экспериментального использования. void delay(int t){ volatile uint32_t x, y; x=t; while(x--){ y=x; while(y--); } } int main(void){ struct metal_i2c *i2c; unsigned char buff[16]; unsigned char reg[2], accel[1]; i2c = metal_i2c_get_device(0); metal_i2c_init(i2c, I2C_BAUDRATE, I2C_MASTER); reg[0]=0x10; // Адрес 1 регистра управления акселерометром reg[1]=0x30; // Включение акселерометра на частоте 52 Гц metal_i2c_write(i2c, ACCEL_ADDR, 2, reg, 1); LCD_clear(i2c); while (1){ reg[0]=0x29; // Читаем ускорение X metal_i2c_write(i2c, ACCEL_ADDR, 1, reg, 1); metal_i2c_read(i2c, ACCEL_ADDR, 1, accel, 1); sprintf(buff, "X: %d \0", (signed char) (accel[0])); LCD_gotoxy(i2c,3,0); LCD_print_str(i2c,buff); reg[0]=0x2B; // Считывание ускорения Y metal_i2c_write(i2c, ACCEL_ADDR, 1, reg, 1); metal_i2c_read(i2c, ACCEL_ADDR, 1, accel, 1); sprintf(buff, "Y: %d \0", (signed char) (accel[0])); LCD_gotoxy(i2c,3,1); LCD_print_str(i2c,buff); delay(1000); } }
Итоги лекции
Отлично! Теперь вы знаете, как использовать устройства I2C и модули Qwiic. Вот краткий обзор того, что мы узнали в этой лекции:
- Мы рассмотрели, что такое последовательная связь и чем она лучше GPIO.
- Мы обсудили 3 последовательных интерфейса связи, обычно включаемых в микроконтроллеры.
- Мы изучили библиотеку Freedom Metal Library, чтобы узнать, как использовать устройство I2C.
- Мы представили систему Qwiic Connect System.
- Мы создали приложение для управления ЖК-экраном.
- Мы создали приложение акселерометра.
Не стесняйтесь возвращаться к этому материалу, если в будущем вам понадобится подтянуть знания.