Частотное управление яркости матрицы
#1
доброго времени суток господа, случилась у меня проблема, есть матрица, управляется яркость у неё прямоугольными импульсами с частотой от 6KHz до 7KHz . В 100% режиме яркости частота составляет 7KHz, а в 20% яркости  6KHz. 
планирую управлять этим делом с МК atmega8.
яркость матрицы меняется в зависимости от освещения. схема представлена ниже.
на фоторезистор попадает солнечный свет при min сопротивлении фоторезистора яркость матрицы составляет 100%  при максимальном 20%.
в коде программы оно работает как то не так, проверял на дисплейчике, выдаёт значения по частотам (или просто значения) и как бы при изменении света попадаемого на фоторезистор он меняет эти значения, но всё равно не так. а при подключении к матрице, вообще идет мерцание с частотой где то в 5-10мерцаний в секунду. может больше.
пробную схемку собрал на ардуино. подскажите где косяк, в схеме в коде или где?

   

ниже прикреплю код который я использовал 
Код:
//Include the graphics library.
#include "U8glib.h"
#include <TimerOne.h>
//Initialize display.
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);

//Constants
const int pResistor = A0; // Photoresistor at Arduino analog pin A0

//const int ledPin9 = 9;     // Led pin at Arduino pin 9
//const int ledPin8 = 8;     // Led pin at Arduino pin 8
//const int ledPin7 = 7;     // Led pin at Arduino pin 7
//const int ledPin6 = 6;     // Led pin at Arduino pin 6

//const int lcdPin5 = 5;     // lcd pin at Arduino pin 5
//const int lcddPin4 = 4;    // lcd pin at Arduino pin 4
//const int lcdPin3 = 3;     // lcd pin at Arduino pin 3

//Variables
int value;          // Store value from photoresistor (0-1023)
int frequency;          // Store value from photoresistor (6000-7000)
//int precentfrequency ;  // Store value Precent of frequency (20-100)

char Valuefrequency[5];
//char Precentfrequency[4];
//char ValuePhotoResist[5];

void setup() {
  pinMode(pResistor, INPUT);// Set pResistor - A0 pin as an input (optional)

// pinMode(ledPin9, OUTPUT);  // Set lepPin - 9 pin as an output
// pinMode(ledPin8, OUTPUT);  // Set lepPin - 8 pin as an output
// pinMode(ledPin7, OUTPUT);  // Set lepPin - 7 pin as an output
// pinMode(ledPin6, OUTPUT);  // Set lepPin - 6 pin as an output

  u8g.setFont(u8g_font_unifont);
}

void loop() {
  //that for write from light sensor
  value = analogRead(pResistor);

  if (value > 818) {
    frequency = 7000;
   // precentfrequency = 20;
   // LedSwitched(9);
  }
  else if (value > 716) {
    frequency = 6875;
   // precentfrequency = 30;
   // LedSwitched(9);
  }
  else if (value > 613) {
    frequency = 6750;
   // LedSwitched(8);
  //  precentfrequency = 40;
  }
  else if (value > 511) {
    frequency = 6625;
  //  LedSwitched(8);
  //  precentfrequency = 50;
  }
  else if (value > 409) {
    frequency = 6500;
  //  LedSwitched(7);
  //  precentfrequency = 60;
  }
  else if (value > 306) {
    frequency = 6375;
    //LedSwitched(7);
   // precentfrequency = 70;
  }
  else if (value > 204) {
    frequency = 6250;
   // LedSwitched(6);
   // precentfrequency = 80;
  }
  else if (value > 102) {
    frequency = 6125;
  //  LedSwitched(6);
  //  precentfrequency = 90;
  }
  else if (value > 0) {
    frequency = 6000;
  //  precentfrequency = 100;
  }

  // convert Value to string [buf]
  //itoa(value, ValuePhotoResist, 10);
  itoa(frequency, Valuefrequency, 10);
// itoa(precentfrequency, Precentfrequency, 10);

  u8g.firstPage();
  do {
   // draw(5, 20, ValuePhotoResist);
   // draw(5, 35, Precentfrequency);
    draw(5, 50, Valuefrequency);
  } while (u8g.nextPage());

  ///Speed of loop every 500 ms=  1/2 Second
  delay(50); //Small delay
}
/*
void LedSwitched(int i)
{
  if (i == 9)
    digitalWrite(ledPin9, HIGH);   //Turn led on 9
  else
    digitalWrite(ledPin9, LOW); //Turn led off

  if (i == 8)
    digitalWrite(ledPin8, HIGH);   //Turn led on 8
  else
    digitalWrite(ledPin8, LOW); //Turn led off

  if (i == 7)
    digitalWrite(ledPin7, HIGH);   //Turn led on 7
  else
    digitalWrite(ledPin7, LOW); //Turn led off

  if (i == 6)
    digitalWrite(ledPin6, HIGH);   //Turn led on 6
  else
    digitalWrite(ledPin6, LOW); //Turn led off
}*/
void draw(u8g_uint_t x, u8g_uint_t y, const char *s)
{
  //Write text. (x, y, text)
  u8g.drawStr(x, y, s);
}
#2
Привет, первый раз слышу чтобы яркость управлялась частотой, обычно это делает ШИМ, надо смотреть не частоты, а проценты заполнения импульсов,
(24-04-2022, 21:46)Kuhtur97 : есть матрица, управляется яркость у неё прямоугольными импульсами с частотой от 6KHz до 7KHz . В 100% режиме яркости частота составляет 7KHz, а в 20% яркости 6KHz.
модель матрицы не помешает.