24-04-2022, 21:46
доброго времени суток господа, случилась у меня проблема, есть матрица, управляется яркость у неё прямоугольными импульсами с частотой от 6KHz до 7KHz . В 100% режиме яркости частота составляет 7KHz, а в 20% яркости 6KHz.
планирую управлять этим делом с МК atmega8.
яркость матрицы меняется в зависимости от освещения. схема представлена ниже.
на фоторезистор попадает солнечный свет при min сопротивлении фоторезистора яркость матрицы составляет 100% при максимальном 20%.
в коде программы оно работает как то не так, проверял на дисплейчике, выдаёт значения по частотам (или просто значения) и как бы при изменении света попадаемого на фоторезистор он меняет эти значения, но всё равно не так. а при подключении к матрице, вообще идет мерцание с частотой где то в 5-10мерцаний в секунду. может больше.
пробную схемку собрал на ардуино. подскажите где косяк, в схеме в коде или где?
ниже прикреплю код который я использовал
планирую управлять этим делом с МК 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);
}