Тема: Тестер стабилитронов и светодиодов на Attiny13
Возникла идея вот такого прибора:
Тестер светодиодов и стабилитронов с ручной регулировкой тока от 1мА до 30мА и с выходом ШИМ для dcdc step up 50-55В.
Железо:
Attiny13, ssd1309, lm317hv, операционник для измерения тока, цепочка для step up.
Функционал: измеритель напряжения и тока, выход ШИМ для формирования напряжения 50-55В.
Алгоритм:
Подключаем светодиод или стабилитрон, меряем напряжение при разных(1-30мА) токах.
Дисплей:
Двухцветный, в верхней строке отображается ток, ниже и крупнее - напряжение.
Сделал запрос ChatGPT но код какой-то странный и не работает.
Уважаемый liman324, нет ли у Вас времени и желания реализовать такой прибор?
Вот собственно код от ChatGPT
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1309.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// Создаем объект дисплея
Adafruit_SSD1309 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Пины для аналоговых входов
const int voltagePin1 = A0; // Первый вольтметр
const int voltagePin2 = A1; // Второй вольтметр
const int pwmPin = A2; // Выход ШИМ
void setup() {
// Инициализация дисплея
display.begin(SSD1309_I2C_ADDRESS, 0x3C); // Укажите адрес дисплея
display.clearDisplay();
// Настройка аналоговых входов
analogReference(DEFAULT);
// Настройка выхода ШИМ
pinMode(pwmPin, OUTPUT);
// Установка ШИМ на 60% заполнения и частота 70 кГц
setupPWM();
}
void loop() {
// Чтение значений с аналоговых входов
int sensorValue1 = analogRead(voltagePin1);
int sensorValue2 = analogRead(voltagePin2);
// Преобразование значения в напряжение (например, делитель на 10V)
float voltage1 = sensorValue1 * (5.0 / 1023.0) * 10; // Умножаем на коэффициент делителя
float voltage2 = sensorValue2 * (5.0 / 1023.0) * 10; // Умножаем на коэффициент делителя
// Отображение значений на дисплее
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1309_WHITE);
display.setCursor(0,0);
display.print("Voltage 1: ");
display.print(voltage1);
display.println(" V");
display.setCursor(0,10);
display.print("Voltage 2: ");
display.print(voltage2);
display.println(" V");
display.display();
delay(1000); // Обновление каждые 1 секунду
}
void setupPWM() {
// Установим режим Fast PWM на PB2 (A2)
TCCR0A |= (1 << COM0A1) | (1 << WGM00) | (1 << WGM01); // Устанавливаем режим Fast PWM
TCCR0B |= (1 << CS00); // Предделитель на 1, чтобы получить максимальную частоту
// Устанавливаем заполнение на 60%
OCR0A = (255 * 60) / 100; // Заполнение на уровне 60%
}