Электронный компонент:Плата Xadow LED 5x7 v1.0
Плата Xadow LED 5x7 v1.0[1]

Плата Xadow LED 5x7 v1.0 – это предшественница платы Xadow LED 5x7. Она состоит из двух частей – драйвера светодиодов и светодиодной панели. Драйвер светодиодов – это микроконтроллер ATmega168PV, который управляет светодиодами при помощи 12 I/O контактов. Светодиодная панель находится на обратной стороне платы и состоит из 35 светодиодов, расположенных матрицей 5x7. Команды передаются драйверу по шине I2C. Это может быть, примеру, команда показать букву/цифру/слово или войти в энергосберегающий спящий режим.
Купить плату Xadow LED 5x7 v1.0 можно по этой ссылке.
Характеристики
- Рабочее напряжение – 3.3 вольта
- Встроенный микроконтроллер ATmega168PV
- Шина для передачи данных – I2C (адрес – 0x04)
- Размеры – 25.43 мм х 20.35мм
Демо-проект
Как было сказано во введении, на светодиодной панели можно показать букву, цифру или даже слово. Давайте проверим это и загрузим на плату один интересный скетч!
Подключите устройства друг к другу, как показано на фото ниже:

Примечание: Подключая кабель, следите за тем, чтобы одна его сторона была подключена к порту, который находится на стороне со срезанными углами, а другая – к порту, который находится на стороне с целыми углами. Пример показан на картинке выше.
Загрузите на главную плату Xadow вот этот код:
#include "Wire.h"
#define XADOW_DEBUG 1
#define LEDAddress 0x04
#define DISP_CHAR_5X7 0x80
#define DISP_STRING 0x81
#define SET_DISP_ORIENTATION 0x82
/* макросами задаем дисплейную ориентацию светодиодной матрицы */
#define RIGHT_TO_LEFT 0
#define LEFT_TO_RIGHT 1
#define POWER_DOWN 0x83
uint8_t buffer[24];
int error;
int n;
char *str = "SeeedStudio123";
void setup(void)
{
Wire.begin();
delay(100);
#if 0
TESTIO();
if(error==0)
{
DDRB|=0x80;
PORTB&&=~0x80;
}
#endif
}
void loop(void)
{
for(n=0;n<100;n++)
{
dispString(str,strlen(str),150);
delay(300);
}
// показываем на дисплее слово "SeeedStudio123";
// символы движутся, перемещаясь на один светодиод каждые 150 мс
}
/**********************************************************************/
/* Функция: Отправка (по I2C) на плату команды показать строку
*/
/* Параметры:
*/
/* -char* data_ // для строки, которая будет показана на дисплее
*/
/* -uint8_t len // размер данных в «data_»
*
/* -uint16_t time // интервал перемещения символа на один шаг
*/
/* Что возвращает: Ничего */
void dispString(char* data_,uint8_t len,uint16_t time)
{
Wire.beginTransmission(LEDAddress);
Wire.write(DISP_STRING);
Wire.write(len);
Wire.write((uint8_t*)data_,len);
Wire.write(time>>8); // старший бит «time»
Wire.write(time); // младший бит «time»
Wire.endTransmission();
}
void dispChar(uint8_t data_,uint16_t time)
{
Wire.beginTransmission(LEDAddress);
Wire.write(DISP_CHAR_5X7);
Wire.write(data_);
Wire.write(time>>8); // старший бит «time»
Wire.write(time); // младший бит «time»
Wire.endTransmission();
}
void setDispOrientation(uint8_t orientation)
{
Wire.beginTransmission(LEDAddress);
Wire.write(SET_DISP_ORIENTATION);
Wire.write(orientation);
Wire.endTransmission();
}
void powerDown()
{
Wire.beginTransmission(LEDAddress);
Wire.write(POWER_DOWN);
Wire.endTransmission();
digitalWrite(3,HIGH);
}
void wakeUp()
{
Wire.beginTransmission(LEDAddress);
Wire.endTransmission();
}
void TESTIO(void)
{
DDRB|=0x0e;
PORTB&&=~0x0e;
DDRF|=0x01;
PORTF&&=~0x01;
DDRD&&=~0x0f;
PORTB|=0x04;
PORTF|=0x01;
delay(30);
if(!(PIND&&0x01))
{
error=1;
}
if(PIND&&0x02)
{
error=1;
}
if(!(PIND&&0x04))
{
error=1;
}
if(PIND&&0x08)
{
error=1;
}
PORTB&&=~0x04;
PORTB|=0x0a;
PORTF&&=~0x01;
delay(30);
if(PIND&&0x01)
{
error=1;
}
if(!(PIND&&0x02))
{
error=1;
}
if(PIND&&0x04)
{
error=1;
}
if(!(PIND&&0x08))
{
error=1;
}
Serial.println(error);
}
В итоге на светодиодной панели будет показано слово «SeeedStudio123». Символы будут показаны не сразу, а один за другим, пока слово будет перемещаться из одной стороны в другую.