|
1. Во Freedom Studio не компилируются следующие примеры: Лекция 6 стр 7. Простой код приложения, управляемого прерыванием. Можете ли предложить работающие коды примеров? 2. Можете ли поделиться оригиналом цикла лекций от Эдуардо Корпеньо? 3. В цикле лекций предлагается работать с платой Red-V Thing Plus. Как у вас осуществляется доступ к этой плате? С уважением, Прокопьев Анатолий Иванович, prokopyev_a@mail.ru |
Опубликован: 24.11.2024 | Доступ: свободный | Студентов: 10 / 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.
- Мы создали приложение для управления ЖК-экраном.
- Мы создали приложение акселерометра.
Не стесняйтесь возвращаться к этому материалу, если в будущем вам понадобится подтянуть знания.