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

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

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

Код приложения акселерометра

Акселерометр - это очень простое дополнение к нашему предыдущему приложению, поэтому здесь мы приводим код приложения для акселерометра. Если вы следите за развитием событий, создайте новый проект на основе проекта-примера 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.
  • Мы создали приложение для управления ЖК-экраном.
  • Мы создали приложение акселерометра.

Не стесняйтесь возвращаться к этому материалу, если в будущем вам понадобится подтянуть знания.

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