1 (Вчера 15:52:51 отредактировано Karl2233)

Тема: Тестер стабилитронов и светодиодов на 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%
}