Вывод информации на 4 разрядный 7сегментный индикатор при помощи двух 74hc595

mag155
Offline
Зарегистрирован: 21.12.2017

Завтра буду возле компьютера брошу. Но там только добавлена вместо цыфр в 30 ой строке переменная которая выводит значение с потенцыометра.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Значит варианты следующие

1 не верно подключено

2 я один не понял сколько у вас 7 сегментных индикаторов ?

3 если вместо 63 выходит 636 - значит не корректно заполняете массив с цифрами и сами не понимаете как скетч работает 

mag155
Offline
Зарегистрирован: 21.12.2017

Индикаторов 6. Как работает скетч понимаю но не до конца. Это мой первый индикатор. Если укажите на ошибки буду оч благодарен.

mag155
Offline
Зарегистрирован: 21.12.2017

Вместо 36 выводит 636 то есть последняя цифра дублируются первой если 35 выводит 535 и т.д. Индикатор как у вас в 144. Сообщении.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

В 144 сообщении 8 а не 6 индикаторов, если вникли в скетч то там глобальная ошибка для ваших 6 индикаторов - цикл надо менять и размер буфера, в какой строке вы вводите две цифры для индикации?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Щас внимательно посмотрел, в 47 скетче жёстко прописано 4 индикатора, даже цикла нет, почему именно это вы взяли за образец, не понятно  в интернете поищите более продвинутый пример. 

mag155
Offline
Зарегистрирован: 21.12.2017

Окей благодарю будем искать .

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:
Окей благодарю будем искать .

че их искать то - ветку почитайте, первые попавшиеся, 123 сообщение, 144 сообщение - выкиньте все лишнее и будет вам счастье.

 

mag155
Offline
Зарегистрирован: 21.12.2017

Там даже коментов к строкам толком нет мне как начинающему совсем тяжко. Подскажите хоть примерно че там жа как сделать ??

alexeko
Offline
Зарегистрирован: 03.01.2014

Что мозг выносите? посмотри мой скетч  он вообще универсален.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:

Там даже коментов к строкам толком нет мне как начинающему совсем тяжко. Подскажите хоть примерно че там жа как сделать ??

ну извините :)

пишу обычно для себя а не для всеобщего обозрения, комментарии как то лень писать.

 

mag155
Offline
Зарегистрирован: 21.12.2017

Я так понял убираем часы датчики оставляем ??

alexeko
Offline
Зарегистрирован: 03.01.2014

Делаете массив с выводимыми данными (например 8888). Перед этим собирате данные с датчиков и по циклу, по времени, НЕ ИСПОЛЬЗУЙТЕ SLEEP!, закидываете в массив с выводимыми данными. Из массива в обработчик на вывод индикатора.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:

Я так понял убираем часы датчики оставляем ??

э...я не знаю нужны ли вам датчики.

если вы про мой скетч, то да, выкидываем часы, выкидываем получение температуры и давления,

заполняем массив цифр LED_BUF[8]

нужными значениями и все будет работать.

Можете для пробы вообще сначала ничего не убирать, а перед отображением в строке 259 заполнить буфер чем нибудь своим и посмотреть как будет работать, а потом уже убирать лишнее.

 

mag155
Offline
Зарегистрирован: 21.12.2017

Пробую 

 

mag155
Offline
Зарегистрирован: 21.12.2017

Пишет ошибка компиляции для ардуино уно . Наверно библиотеки не хватает ?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:

Пишет ошибка компиляции для ардуино уно . Наверно библиотеки не хватает ?

наверное да :)

в начале скетча есть же список библиотек - что мешает подключить?

mag155
Offline
Зарегистрирован: 21.12.2017

По закрывал все не нужное 

#include <Wire.h>
//#include <DallasTemperature.h>
#include <SPI.h>
//#include <Adafruit_BMP280.h>
#define DS_TPN 8 // DS18B20 grey
// GND black +5V white
//OneWire oneWire(DS_TPN);
#define RTC_SDA A4 // - 
#define RTC_SCL A5 // - black// GND white +5V grey
//RTC_DS1307 RTC;
//#define LED_PWM 9 // - OE on 74HC595
#define LED_SCLK 10 // - blue
#define LED_RCLK 11 // - green
#define LED_DIO 12 // - maroon
// GND yellow +5V orange
#define CYCLE_GET_TIME 60
#define CYCLE_SHOW 4
#define CYCLE_GET_TEMP 243
#define BMP_SCK 4
#define BMP_MISO 5
#define BMP_MOSI 6
#define BMP_CS 7
//Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
byte LED_0F[33] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xC2, 0x89, 0xF9, 0xF1, 0xC3, 0xA9, 0xC0, 0x8C, 0x98, 0x92, 0xC1, 0x91, 0xFE, 0xBF, 0xFF, 0x9C, 0xAB};
// 0123456789AbCdEFGHIJLnOPqSUY_- (null) (degree) (mm)
byte LED_NU[8] = {16, 32, 64, 128, 1, 2, 4, 8};
byte LED_BUF[8] = {30, 30, 30, 30, 30, 30, 30, 30};
byte LED_PWM = 3; // level light 7 = MAX 0 = MIN
byte PWM_MAX[8] = {0b00000001, 0b00010001, 0b00100101, 0b01010101, 0b01011101, 0b11011101, 0b11111101, 0b11111111}; // matrix level light
byte cicle_pwm = 0; //0..7
byte dd = 99; // day
byte mm = 99; // month
byte yh = 99; // high year
byte yl = 99; // low year
byte ho = 99; // hour
byte mi = 99; // minute
float tt = 99; // temp
float pr = 99; // pressure
float ut = 99; // street temp
byte lu = 10; // last data street temp - MAX = 9
unsigned long timerSec = 0;
byte timerGetTime = 37;
byte timerShow = 0;
byte timerGetTemp = 242;
byte flShow = 0; // 0 time and temp 1 date 2 press
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_SCLK, OUTPUT);
  pinMode(LED_RCLK, OUTPUT);
  pinMode(LED_DIO, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
  Serial.begin(9600);
  delay(1000);
 // sensors.begin();
  pinMode(LED_PWM, OUTPUT);
  Wire.begin();
 // if (! RTC.begin()) {
    while (1);
  }
  //if (! RTC.isrunning()) {
    // following line sets the RTC to the date & time this sketch was compiled
    // RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
 // }
 // bmp.begin();
//}
byte addPoint(byte inByte) {
  byte outByte = (inByte << 1);
  outByte = (outByte >> 1);
 return outByte;
}
void showLedBuf() {
  // select level light
  byte flbit;
  flbit = bitRead(PWM_MAX[LED_PWM], cicle_pwm);
  if (flbit == 1) {
    for (byte i = 0; i <= 7; i++) {
      digitalWrite(LED_RCLK, LOW);
      //shiftOut(LED_DIO, LED_SCLK, MSBFIRST, LED_0F[LED_BUF[i]]);
      shiftOut(LED_DIO, LED_SCLK, MSBFIRST, LED_BUF[i]); // full light
      shiftOut(LED_DIO, LED_SCLK, MSBFIRST, LED_NU[i]);
      digitalWrite(LED_RCLK, HIGH);
    }
  } else {
    // delay analog full light
    for (byte i = 0; i <= 7; i++) {
      digitalWrite(LED_RCLK, LOW);
      shiftOut(LED_DIO, LED_SCLK, MSBFIRST, 255); // empty
      shiftOut(LED_DIO, LED_SCLK, MSBFIRST, 255);
      digitalWrite(LED_RCLK, HIGH);
    }
  }
  // -
  ++cicle_pwm;
  if (cicle_pwm > 7) {
    cicle_pwm = 0;
  }
}
 void loop() {
  // put your main code here, to run repeatedly:
  // count timers
  unsigned long ctmr = (long(millis() / 1000));
  if ((timerSec > 4294900) && (ctmr < 100)) {
    timerSec = 0;
  }
  if (ctmr > timerSec) {
    timerSec = ctmr;
    ++timerGetTime; ++timerShow; ++timerGetTemp;
    if (timerGetTime >= CYCLE_GET_TIME) {
      timerGetTime = 0;
      // get time and date
 //     DateTime now = RTC.now();
 //     dd = now.day();
 //     mm = now.month();
  //    yh = (now.year()) / 100;
    //  yl = (now.year()) % 100;
    //  ho = now.hour();
    //  mi = now.minute();
    }
    if (timerShow >= CYCLE_SHOW) {
      timerShow = 0;
      switch (flShow) {
        case 1 : {
            // show date
            if ((dd >= 1) && (dd <= 31)) {
             if (dd < 10) {
               LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[(dd % 10)];
              } else {
             LED_BUF[0] = LED_0F[(dd / 10)]; LED_BUF[1] = LED_0F[(dd % 10)];
              }
            } else {
              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30];
           }
            LED_BUF[1] = addPoint(LED_BUF[1]);

            if ((mm >= 1) && (mm <= 12)) {

              if (mm < 10) {

                LED_BUF[2] = LED_0F[0]; LED_BUF[3] = LED_0F[(mm % 10)];

              } else {

                LED_BUF[2] = LED_0F[(mm / 10)]; LED_BUF[3] = LED_0F[(mm % 10)];

              }

            } else {

              LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];

            }

            LED_BUF[3] = addPoint(LED_BUF[3]);

            if ((yh >= 20) && (yh <= 29) && (yl >= 00) && (yl <= 99)) {

              LED_BUF[4] = LED_0F[(yh / 10)]; LED_BUF[5] = LED_0F[(yh % 10)];

              if (yl < 10) {
            LED_BUF[6] = LED_0F[0]; LED_BUF[7] = LED_0F[(yl % 10)];

              } else {

                LED_BUF[6] = LED_0F[(yl / 10)]; LED_BUF[7] = LED_0F[(yl % 10)];

              }

            } else {

              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];

            }

            ++flShow;

            break;

          }

        case 2 : {

            // show press

            if ((pr >= 600) && (pr <= 900)) {

              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30]; LED_BUF[5] = LED_0F[30];  LED_BUF[6] = LED_0F[32]; LED_BUF[7] = LED_0F[32];

              int hp = int(pr);

              LED_BUF[2] = LED_0F[(hp / 100)];

              byte pd = hp % 100;

              LED_BUF[3] = LED_0F[(pd / 10)]; LED_BUF[4] = LED_0F[(pd % 10)];

              flShow = 0;

              break;

            } else {

              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30]; LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];

              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];

              flShow = 0;

            }

          }

        default : {

            // show time and temp

            if ((ho >= 0) && (ho <= 23)) {

              if (ho < 10) {

                LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[(ho % 10)];

              } else {

                LED_BUF[0] = LED_0F[(ho / 10)]; LED_BUF[1] = LED_0F[(ho % 10)];

              }

            } else {

              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30];

            }

            LED_BUF[1] = addPoint(LED_BUF[1]);

            if ((mi >= 0) && (mi <= 59)) {

              if (mi < 10) {

                LED_BUF[2] = LED_0F[0]; LED_BUF[3] = LED_0F[(mi % 10)];

              } else {

                LED_BUF[2] = LED_0F[(mi / 10)]; LED_BUF[3] = LED_0F[(mi % 10)];

              }

            } else {

              LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];

            }

            // show temp
        if ((tt >= (-30)) && (tt <= 40)) {

              byte ta;

              if (tt < 0) {

                LED_BUF[4] = LED_0F[29]; ta = abs(tt);

              } else {

                LED_BUF[4] = LED_0F[30]; ta = tt;

              }

              if (ta < 10) {

                LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[(ta % 10)];

              } else {

                LED_BUF[5] = LED_0F[(ta / 10)]; LED_BUF[6] = LED_0F[(ta % 10)];

              }

              LED_BUF[7] = LED_0F[31];

            } else {

              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];

            }

            ++flShow;

          }

      }

    }

    if (timerGetTemp >= CYCLE_GET_TEMP) {

      timerGetTemp = 0;

      // get temp and bar

   //   sensors.requestTemperatures(); tt = sensors.getTempCByIndex(0);

      Serial.print("current DS18B20 = "); Serial.println(tt);

      if (tt == 0.00) {

        tt = 99;

      } else {

        tt = tt + 0.51;

      }

      // get bmp280

  //    pr = bmp.readPressure() / 133.322;

    }

  }

  // show info

  showLedBuf();

  // set display light

//  word ll = analogRead(FOTORES);

 // LED_PWM = map(ll, 0, 1023, 0, 7);

  //--- end loop

}

Не судите строго .

showLedBuf(); Пишу значение выдает ошибку ??

 

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

вы если сложно воспринимаете чужой код, попытайтесь сначала что нибудь попроще написать

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define PB2_HIGH sbi(PORTB,PB2);
#define PB2_LOW cbi(PORTB,PB2);
#define PB3_HIGH sbi(PORTB,PB3);
#define PB3_LOW cbi(PORTB,PB3);
#define PB4_HIGH sbi(PORTB,PB4);
#define PB4_LOW cbi(PORTB,PB4);

#define FOTORES A1 // grey
// GND yellow +5V maroon

#define LED_SCLK 10 // - blue PB2
#define LED_RCLK 11 // - green PB3
#define LED_DIO 12 // - maroon PB4
// GND yellow +5V orange

byte LED_0F[33] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xC2, 0x89, 0xF9, 0xF1, 0xC3, 0xA9, 0xC0, 0x8C, 0x98, 0x92, 0xC1, 0x91, 0xFE, 0xBF, 0xFF, 0x9C, 0xAB};
// 0123456789AbCdEFGHIJLnOPqSUY_- (null) (degree) (mm)
byte LED_NU[8] = {16, 32, 64, 128, 1, 2, 4, 8};
byte LED_BUF[8] = {0, 1, 2, 3, 4, 7, 8, 9};
byte LED_PWM = 3; // level light 7 = MAX 0 = MIN

void setup() {
  // put your setup code here, to run once:
  // OFF unused pins
  pinMode(0, OUTPUT); digitalWrite(0, LOW);
  pinMode(1, OUTPUT); digitalWrite(1, LOW);
  pinMode(3, OUTPUT); digitalWrite(3, LOW);
  pinMode(10, OUTPUT); digitalWrite(10, LOW);
  pinMode(13, OUTPUT); digitalWrite(13, LOW);
  pinMode(A0, OUTPUT); digitalWrite(A0, LOW);
  pinMode(A2, OUTPUT); digitalWrite(A2, LOW);
  pinMode(A3, OUTPUT); digitalWrite(A3, LOW);
  pinMode(A6, OUTPUT); digitalWrite(A6, LOW);
  pinMode(A7, OUTPUT); digitalWrite(A7, LOW);
  //--
  pinMode(LED_SCLK, OUTPUT);
  pinMode(LED_RCLK, OUTPUT);
  pinMode(LED_DIO, OUTPUT);
}

byte addPoint(byte inByte) {
  byte outByte = (inByte << 1);
  outByte = (outByte >> 1);
  return outByte;
}

void showLedBuf() {
  for (byte lp = 0; lp <= LED_PWM; ++lp) {
    for (byte i = 0; i <= 7; i++) {
      PB3_LOW;
      for (byte j = 0; j <= 7; j++) {
        if (bitRead(LED_BUF[i], (7 - j))) {
          PB4_HIGH;
        } else {
          PB4_LOW;
        }
        PB2_HIGH;
        PB2_LOW;
      }
      for (byte j = 0; j <= 7; j++) {
        if (bitRead(LED_NU[i], (7 - j))) {
          PB4_HIGH;
        } else {
          PB4_LOW;
        }
        PB2_HIGH;
        PB2_LOW;
      }
      PB3_HIGH;
    }
  }
  for (byte lp = 0; lp < (7 - LED_PWM); ++lp) {
    PB3_LOW;
    PB4_HIGH;
    for (byte j = 0; j <= 15; j++) {
      PB2_HIGH;
      PB2_LOW;
    }
    PB3_HIGH;
    delayMicroseconds(350);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  // set display light
  word ll = analogRead(FOTORES);
  LED_PWM = map(ll, 0, 1023, 0, 7);
  // show info
  showLedBuf();
  //--- end loop
}

 

пробуйте, если индикаторы аналогичные и подключено верно, должна быть строчка цифр 0, 1, 2, 3, 4, 7, 8, 9

mag155
Offline
Зарегистрирован: 21.12.2017

Я так понял раз так много выходов вы ришили что у меня индикатор без регистроф ? У меня такой как на вашем фото с двумя регитрами

mag155
Offline
Зарегистрирован: 21.12.2017

Залил скетч еле светятся все 6 какимито обрубками цыфр

mag155
Offline
Зарегистрирован: 21.12.2017

У меня пины DIO.SCK.RCK подключил аналогично вашим SCLK.RCLK.DIO

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я ничего не решил, я пытаюсь со вчерашнего вечера понять что у вас за индикаторы, а вы все темните, давно бы уже скинули ссылку с описанием или хотя бы фото.

Если обрубки цифр и еле светяться значит с большой вероятностью у вас другие индикаторы с общим катодом, а то что еле светяться - могли бы и догадаться пин А1 контроллера на +5м или земплю повесить, т.к. от его уровня яркость зависит.

ЗЫ. Совсем обленились :(

 

mag155
Offline
Зарегистрирован: 21.12.2017

mag155
Offline
Зарегистрирован: 21.12.2017

Может какой другой индикатор посоветуете ? А то я до этого наверно еще не дорос . Или экранчик какой ?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

нормальный экран, но сам не пробовал,

в строках 25 и 26 уменьшаете массивы до 6,

экспериментируете с содержимым массива в строке 25, т.к. не понятно что там китайцы скоммутировали,

вместо процедуры вывода пишите shiftOut (примеры в ветке или интернете), потом уже разберетесь как работаете - сами переделайте процедуру под свой индикатор.

http://codius.ru/articles/%D0%A2%D1%8E%D0%BD%D0%B8%D0%BD%D0%B3_Arduino_%...

http://codius.ru/articles/Arduino_%D0%A1%D0%B4%D0%B2%D0%B8%D0%B3%D0%BE%D...

https://mysku.ru/blog/ebay/35339.html

 

mag155
Offline
Зарегистрирован: 21.12.2017

Прокоментируте пожалуйста строки с 32 по 41 ?

mag155
Offline
Зарегистрирован: 21.12.2017

А0. Это фоторезистор яркость сегментов а вот остальное это что ?

mag155
Offline
Зарегистрирован: 21.12.2017

Точнее A3

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

http://arduino.ru/Reference

почитайте - тут почти все есть, и в том числе команды с 31 по 42 строку

что такое А0 А3 в ваших вопросах? если аналоговые пины , то в каком контексте вопрос?

ЗЫ. Я честно говоря фигею от вас, я бы уж давно загуглил что это за команды и не задавал глупых вопросов на форуме.

Вас в школе и институте (если был) не учили пользоваться литературой?

 

mag155
Offline
Зарегистрирован: 21.12.2017

Еду в машине а ответ хочется узнать. Ну вы понимаете интересно ж так что ....Приеду к компу обязательно разберусь.

mag155
Offline
Зарегистрирован: 21.12.2017

Нет что это за команды я знаю. Я имел в виду зачем они там все на выход стоят если используется только одна.?

mag155
Offline
Зарегистрирован: 21.12.2017

И зачем они все LOW.?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:
Нет что это за команды я знаю. Я имел в виду зачем они там все на выход стоят если используется только одна.?

не помню, привычка отключать все не используемые пины

mag155
Offline
Зарегистрирован: 21.12.2017

Я понял. Почерк автора так сказать.К стати если их даже не отключать на выходе у них ноль все равно. Достаточно только обозначить пин на выход и там сразу 0.

mag155
Offline
Зарегистрирован: 21.12.2017

Всем привет. Пошесть просто пошла купил дисплей 12с переходником. Подключил SCL d a5 ,SDA в A4 .

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
void setup()
{
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("iarduino.ru");
  lcd.setCursor(8, 1);
  lcd.print("LCD 1602");
}
void loop()
{
  // Устанавливаем курсор на вторую строку и нулевой символ.
  lcd.setCursor(0, 1);
  // Выводим на экран количество секунд с момента запуска ардуины
  lcd.print(millis()/1000);
}

Загрузил пример и не работает . И что странно на дисплее когда подать питание светится только нижняя строка бубиками а верхняя нет. Подскажите в чем проблема ????

mag155
Offline
Зарегистрирован: 21.12.2017

Доброго времени суток ! Решил добить вопрос по индикатору . Но не совсем пойму строка 25 и 26 это массивы и в них ци фры так вот что это за цифры и от куда они берутся? 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

23 строка - массив байт, в каждом из которых биты, обозначающих какие светодиоды(сегменты данного конкретного индикатора ) будут светиться, т.е. матрица свечения

24 строка - описание каждого байта - т.е. какой сивол будет на индикаторе

25 строка - бит индикатора( общий анод) который нужно зажеч, вот так через ж... китайцы спаяли не подряд

26 непостредственно что должно отображаться на индикаторах = порядковый номер из массива строки 23

 

т.е. например 0 в первом байте 26 строки означает что сначала посылается байт выбора индикатора (16 из строки 25)

потом уже сам байт матрицы 0xC0  (или наоборот - не помню, сначала 0xC0 потом 16)

mag155
Offline
Зарегистрирован: 21.12.2017

26 строкой мы указываем что у нас будут цифры от 1 до 9 ? Но 25 переключает аноды каждого разряда ? Или каждого сигмента ?

mag155
Offline
Зарегистрирован: 21.12.2017

23 и 26 строки понятны а вот от куда берутся цыфры в 25 ? Это номера сегментов (диодов )?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Да, 8й (или 1 ый} бит это точка

mag155
Offline
Зарегистрирован: 21.12.2017

То есть в одном цифра их 7 плюс точка . Тогда откуда такие цифры как 128 ? Даже если считать 8 цифр и в них по 8 диодиков то это всего 56 . Каким образом формируются цифры в 25 строке ?

mag155
Offline
Зарегистрирован: 21.12.2017

Или это количество бит ?

mag155
Offline
Зарегистрирован: 21.12.2017

Я понял 16 это две цывры(диодиков ) 32. 4 цифры и ид. Верно ?

mag155
Offline
Зарегистрирован: 21.12.2017

Цифри отображаются не правильно пишу 2 отображается перевернутая шесть. Не правильно аноды переключаются ?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:

Цифри отображаются не правильно пишу 2 отображается перевернутая шесть. Не правильно аноды переключаются ?

если в инверсии -  надо инвертировать отправляемые байты или да возможно ваш индикатор с общими катодами

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

mag155 пишет:
Я понял 16 это две цывры(диодиков ) 32. 4 цифры и ид. Верно ?

нарисуйте цифры из 25 строки в двоичной системе и увидите что там всего одна 1ка - это и есть тот индикатор который отображается в данный конкретный момент времени, соотвественно поочередно зажигая их с высокой частотой - человеку кажеться что они горят одновременно

mag155
Offline
Зарегистрирован: 21.12.2017

Да вы правы индикатор оказался с общим катодом. Я подключил 4 сегментный индикатор без здвиговог регистра и опять не чего не работает и прозвонил его оказалось что он с общим катодом.

mag155
Offline
Зарегистрирован: 21.12.2017

Изменил в примере 0 на 1 то есть начал зажигать ну лем все работает .

mag155
Offline
Зарегистрирован: 21.12.2017

Подключил резистор через беременную вывожу значения все клас. Подключил библиотеку тензодатчика чтоб выводить вес индикатор вес выводит но цифры мерцают не успеваю разогрется. Может контроллер не успевает подсчитывает информацию с датчика усреднять ее и при этом сегменты зажигать ??