TM7P IIC, I2C светодиодный линейный индикатор c двумя АЦП, STM32F030F4P6

см. техническую документацию
Спецификация набора
Наименование | Цена | Кол-во |
---|---|---|
TM7PA, Светодиодный линейный двухканальный индикатор уровня. | 390 руб. | 1 |
Описание
Новая прошивка изменяет свойства модуля TM7P. Модуль настроен на работу с последовательным интерфейсом I2C. Получилось I2C Slave устройство.
Новые возможности модуля:
1) Отображение значения измеряемого напряжения на светодиодной шкале.
2) Управление по I2C.
3) Передача по I2C текущих показаний каналов АЦП.
4) Выбор режима отображения шкалы.
5) Задание максимального входного напряжения для соответствия крайнему положению шкалы.
6) Управление светодиодами независимо от показаний АЦП.
Подробную информацию можно найти в файле << TM7P_I2C_описание команд >>
Для подключения модуля к Мастеру используются выводы С = SCL, D = SDA.
В скетче пример для использования модуля с Arduino
Это открытый проект! Лицензия, под которой он распространяется – Creative Commons - Attribution - Share Alike license.
Скетч. Код программы
#include <Wire.h>
#define I2C_DEV_ADR 0x20 //адрес TM7K_I2C
byte Val = 0;
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
Val = 0;
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x10); //команда выбора режима
Wire.write(0x03); //SAM = 0; SPM = 1; RVM = 1;
//отображаются все светодиоды до текущей позиции
//возможно произвольное отображение отдельных светодиодов
//отображается принятое значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x11); //команда выбора режима + выбор канала
Wire.write(0x03); //SAM = 0; SPM = 1; RVM = 1;
//отображаются все светодиоды до текущей позиции
//возможно произвольное отображение отдельных светодиодов
//отображается принятое значение
Wire.endTransmission(); //стоп
for (byte i = 0; i < 12; i++)
{
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x20); //команда записи значения для отображения + выбор канала
Wire.write((byte)(1 << Val)); //значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x21); //команда записи значения для отображения + выбор канала
Wire.write((byte)(1 << (5 - Val))); //значение
Wire.endTransmission(); //стоп
delay(100);
Val++;
if (Val == 6)
Val = 0;
}
Val = 0;
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x10); //команда выбора режима + выбор канала
Wire.write(0x01); //SAM = 0; SPM = 0; RVM = 1;
//отображаются все светодиоды до текущей позиции
//произвольное отображение отдельных светодиодов невозможно
//отображается принятое значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x11); //команда выбора режима + выбор канала
Wire.write(0x01); //SAM = 0; SPM = 0; RVM = 1;
//отображаются все светодиоды до текущей позиции
//произвольное отображение отдельных светодиодов невозможно
//отображается принятое значение
Wire.endTransmission(); //стоп
for (byte i = 0; i < 12; i++)
{
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x20); //команда записи значения для отображения
Wire.write(Val); //значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x21); //команда записи значения для отображения
Wire.write(5 - Val); //значение
Wire.endTransmission(); //стоп
delay(100);
Val++;
if (Val == 6)
{
Val = 0;
}
}
Val = 0;
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x10); //команда выбора режима + выбор канала
Wire.write(0x81); //SAM = 1; SPM = 0; RVM = 1;
//светодиод отображается только на текущей позиции
//произвольное отображение отдельных светодиодов невозможно
//отображается принятое значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x11); //команда выбора режима + выбор канала
Wire.write(0x81); //SAM = 1; SPM = 0; RVM = 1;
//светодиод отображается только на текущей позиции
//произвольное отображение отдельных светодиодов невозможно
//отображается принятое значение
Wire.endTransmission(); //стоп
delay(100);
for (byte i = 0; i < 12; i++)
{
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x20); //команда записи значения для отображения + выбор канала
Wire.write(Val); //значение
Wire.endTransmission(); //стоп
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x21); //команда записи значения для отображения + выбор канала
Wire.write(5 - Val); //значение
Wire.endTransmission(); //стоп
delay(100);
Val++;
if (Val == 6)
{
Val = 0;
}
}
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x30); //команда чтения показаний АЦП + выбор канала
Wire.endTransmission(); //стоп
//чтение показаний АЦП
unsigned int ADCData = 0;
Wire.requestFrom(I2C_DEV_ADR, 2); // старт, передача адреса + бит чтения
for (byte i = 0; i < 2; i++)
ADCData |= Wire.read() << (8 * i); //чтение данных
Serial.println(ADCData); //вывод показаний АЦП
Wire.beginTransmission(I2C_DEV_ADR); //старт, передача адреса + бит записи
Wire.write(0x31); //команда чтения показаний АЦП + выбор канала
Wire.endTransmission(); //стоп
//чтение показаний АЦП
ADCData = 0;
Wire.requestFrom(I2C_DEV_ADR, 2); // старт, передача адреса + бит чтения
for (byte i = 0; i < 2; i++)
ADCData |= Wire.read() << (8 * i); //чтение данных
Serial.println(ADCData); //вывод показаний АЦП
Serial.println();
delay(1000);
}