Паразитная засветка гри

Тема в разделе "Флудилка", создана пользователем Funny59, 6 апр 2020.

Метки:
  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Отметаем подозрения на оптопары и неправильную полярность сканирования - тк крайние знакоместа не засвечиваются.
    Идеи -
    1. Меняете местами сами индикаторы. Смотрите не привязан ли глюк к определенному индикатору.
    2. Меняете местами адресацию знакомест, например проводки A2 и A3 ( к оптопарам) средних знакомест подключайте к крайним. Смотрим не привязан ли глюк к определенному гнезду.
    3. То что засветка сильно выражается именно на средних знакоместах - Возможно надо изменить сам процесс сканирования. Перед моментом изменения цифры (катода) вставлять паузу полного погасания всех знакомест. И после тоже паузу - на случай инерционности индикаторов, оптопар или дешифратора. Скорость сканирования больше 30 циклов в секунду ставить смысла не имеет. Так что задержки по 1-2 мС не повредят.
    ПС. Это обычные метОды электронщика. Выложьте сам скетч, можно будет прогнать в симуляторе.
    В какую ? По логике можно свести в точку HV. Динамички на таких индикаторах не видел, так что бог его знает...
     
    Последнее редактирование: 11 апр 2020
    Funny59 нравится это.
  2. Funny59

    Funny59 Нерд

    Вот код, задержки все есть
    Код (C++):
    #include <uRTCLib.h>

    uRTCLib rtc(0x68);
    const int anod[] = {6, 8, 9, 7, 10}, cathod[] = {14, 16, 17, 15};
    int t = 3, tm;

    void SetDigit(int n){
      const int digit[] = { 4, 6, 7, 3, 2, 8, 9, 0, 1, 5};
      n = digit[n];
      if(n%2 == 1)digitalWrite(cathod[0], HIGH); else digitalWrite(cathod[0], LOW);
      if((n>>1)%2 == 1)digitalWrite(cathod[1], HIGH); else digitalWrite(cathod[1], LOW);
      if((n>>2)%2 == 1)digitalWrite(cathod[2], HIGH); else digitalWrite(cathod[2], LOW);
      if((n>>3)%2 == 1)digitalWrite(cathod[3], HIGH); else digitalWrite(cathod[3], LOW);
      return;
    }

    void dot(){
      static long long t = 0, state = 0;
      if(millis() - t > 1300){
        t = millis();
        if(!state){
          digitalWrite(10, HIGH);
          state = 1;
        } else {
          digitalWrite(10, LOW);
          state = 0;
        }
      }
      return;
    }

    void setup() {
      Wire.begin();
      //rtc.set(0, 40, 10, 3, 8, 4, 20);
      //  RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
      for(int i = 0; i < 5; i++) pinMode(anod[i], OUTPUT);
      for(int i = 0; i < 4; i++) pinMode(cathod[i], OUTPUT);
      digitalWrite(10, LOW);
      SetDigit(0);
    }

    void loop() {
      rtc.refresh();
      tm = rtc.hour()*100 + rtc.minute();
      for(int i = 0; i < 4; i++) {
        digitalWrite(anod[i], HIGH);
        SetDigit(tm/int((pow(10, i)))%10);
        delay(3);
        digitalWrite(anod[i], LOW);
        delayMicroseconds(300);
      }
      dot();
    }
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А так ?
    Код (C++):
    void loop() {
      rtc.refresh();
      tm = rtc.hour()*100 + rtc.minute();
      for(int i = 0; i < 4; i++) {

      SetDigit(tm/int((pow(10, i)))%10);
      delay(1);        // Можно попробовать уменьшить или убрать совсем
      digitalWrite(anod[i], HIGH);
      delay(8);  
      digitalWrite(anod[i], LOW);
      delay(1);       // Можно попробовать уменьшить или убрать совсем

      }
      dot();
    }
     
    Последнее редактирование: 11 апр 2020
    Funny59 нравится это.
  4. Funny59

    Funny59 Нерд

    СПАСИБО! Всё заработало
    Код (C++):
        SetDigit(tm/int((pow(10, i)))%10);
        delayMicroseconds(300);
        digitalWrite(anod[i], HIGH);
        delay(3);
        digitalWrite(anod[i], LOW);
        delayMicroseconds(300);
     
  5. Funny59

    Funny59 Нерд

    Осталось нафиг отпаять все диоды и резисторы
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Устаканьте избыточность - поскольку в каждый момент времени включена только одна оптопара, логичней объединить катоды светодиодов оптопар, и через резистор - заземлить, а R1-R5 убрать.

    Учись студент !!!
     
    Последнее редактирование: 12 апр 2020
  7. Airbus

    Airbus Радиохулиган Модератор

    Так дело в коде было?Или в схемотехнике?
     
  8. Funny59

    Funny59 Нерд

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