7-сегментный дисплей с контроллером. Отзыв...

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
souchkov
Сообщения: 16
Зарегистрирован: 05 фев 2013, 15:28

7-сегментный дисплей с контроллером. Отзыв...

Сообщение souchkov »

Хотелось бы высказаться о данных индикаторах http://pacpac.ru/product/com-11440-7-se ... lay-green/
понравились... купил под свой проект сразу 8 штук. управление очень простое, цеплял через I2C.

До этого игрался с индикатором от грове http://www.seeedstudio.com/wiki/Grove_-_4-Digit_Display
, об этом мнение не однозначное, как просто часики, пойдет, а вот когда нужно обслуживать несколько, никаких пинов не хватит.
ну и небольшой кусочек кода.. инициализация вначале нужна, т.к. запоминает состояние в которым был выключен... у меня раздельное питание с ардуиной..

Код: Выделить всё

//Given a number, i2cSendValue chops up an integer into four values and sends them out over I2C
void initDisplay(int display_address) {
 Wire.beginTransmission(display_address);
 Wire.write(0x76);  //очистка дисплея
 Wire.write(0x79); //Cursor control 	0x79 	0-3 	0=left=most, 3=right-most
 Wire.write(0x00); //Cursor control 	0x79 	0-3 	0=left=most, 3=right-most
 Wire.write(0x7A); // Brightness control command
 Wire.write(100); // Set brightness level: 0% to 100%
 Wire.write(0x77); // Decimal control command
 Wire.write(0b00000000); //  Turns on colon, apostrophoe, and far-right decimal
//  I2C address Config 	0x80 	1-126 	Data byte is I2C addres
//  Factory reset 	0x81 	None
// https://github.com/sparkfun/Serial7SegmentDisplay/wiki/Special-Commands
 Wire.endTransmission(); 
}

void DispBrightness(int display_address,int Brightness) { //  контроль яркости дисплея 0-100%
 if(Brightness>0 && Brightness<=100) {
   Wire.beginTransmission(DISPLAY_ADDRESS1);
   Wire.write(0x7A); // Brightness control command
   Wire.write(Brightness); // Set brightness level: 0% to 100%
   Wire.endTransmission();
 }
}
void DyspSendValue(int display_address,int tempCycles) { //  i2cSendValue(cycles); //вывод 4 символов на дисплей
 Wire.beginTransmission(display_address); // transmit to device #1
 Wire.write(tempCycles / 1000); //Send the left most digit
 tempCycles %= 1000; //Now remove the left most digit from the number we want to display
 Wire.write(tempCycles / 100);
 tempCycles %= 100;
 Wire.write(tempCycles / 10);
 tempCycles %= 10;
 Wire.write(tempCycles); //Send the right most digit
 Wire.endTransmission(); //Stop I2C transmission
}

//Given a string, i2cSendString chops up the string and sends out the first four characters over i2c
void DyspSendString(int display_address, char *toSend) {
 Wire.beginTransmission(display_address); // transmit to device #1
 for(byte x = 0 ; x < 4 ; x++)
    Wire.write(toSend[x]); //Send a character from the array out over I2C
 Wire.endTransmission(); //Stop I2C transmission
}

Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение Mr.Kubikus »

Думаю прикрутить этот индикатор к проекту "Умный цветок". Чтобы влажность грунта показывал в процентах.
С уважением, Григорий
GitHub FB ВК
souchkov
Сообщения: 16
Зарегистрирован: 05 фев 2013, 15:28

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение souchkov »

всплыл косячок с данным индикатором, возможно кому то поможет мой опыт, а может тут просто конфликт с другими устройствами на I2C шине.... категорически отказались эти индикаторы выставлять адрес 0x76 на I2C шине. после каждой попытки уходили в нирвану. Приходилось цепляться по UART и ресетом приводить их в чувство.
А еще один индикатор я все таки убил. при попытке включить 8 релюшек одновременно, ардуина минут через 10 начала хаотично перегружаться, похоже не хватило ей питания.. индикатор в процессе этого насилия умер, и больше не подает признаков жизни.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение Mr.Kubikus »

А как релюшки были связаны с индикатором?
С уважением, Григорий
GitHub FB ВК
souchkov
Сообщения: 16
Зарегистрирован: 05 фев 2013, 15:28

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение souchkov »

а ни как... на общем питании сидели.... все моргать начало, мега перегружалась и помер индикатор...
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение Mr.Kubikus »

Ясно. Попробую воспроизвести баг с I2C у себя.
С уважением, Григорий
GitHub FB ВК
souchkov
Сообщения: 16
Зарегистрирован: 05 фев 2013, 15:28

Re: 7-сегментный дисплей с контроллером. Отзыв...

Сообщение souchkov »

в свое время попалась программка I2C scaner, вот ее вывод..

Scanning...
I2C device found at address 0x50 ! вот это непонятно кто светится......
I2C device found at address 0x5A ! MPR121 сенсорная клавиатура
I2C device found at address 0x68 ! DS1307 часики
I2C device found at address 0x72 ! остальные адреса - индикаторы.
I2C device found at address 0x73 !
I2C device found at address 0x74 !
I2C device found at address 0x75 !
I2C device found at address 0x77 !
I2C device found at address 0x78 !
done
в примере для MPR121 странные определения, без которых я обошелся.. но там софтовый I2C, пришлось переделать все на аппаратный, были конфликты с другими железками...
#define MPR121_R 0xB5 // ADD pin is grounded
#define MPR121_W 0xB4 // So address is 0x5A
#define MPR121addr 0x5a

код I2c сканера, может тоже кому пригодится...:

Код: Выделить всё

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
Ответить