Вот, потихоньку делаю корпус на ГРИ) Нужно ли дальше запихивать лампы? Или наоборот сильно глубоко?) Определится не могу)
Вложения
-
112.4 KB Просмотры: 571
Собрал свой тестер на ардуино со сменными панелями под разные лампы (пока изготовил под имеющиеся ИН-12, ИН-4, ИН-2).@Dimasssiusis, у тех, кто давно в теме - тестер давно уже есть, а для собрать часы один раз он совсем не нужен... Я собрал себе универсальный тестер с функцией прожарки ламп по одному из доступных в интернете вариантов. Из элементов только микроконтроллер, конденсатор, катушка, 13 транзисторов, диод и горсть резисторов. Питание от USB, жарит/проверяет любые лампы.
Посмотреть вложение 22290Посмотреть вложение 22291
Для универсальности сейчас подключена колодка, у которой на другом конце просто контакты от разъема питания - одеваются на любые ножки. Для эстетов можно сделать переходник под любой патрон.
Неее, там пирамидка маленькая))) Общий дизайн мне не очень пока нравится, со временем переделаю на smd.@psyx86, Бутерброд из 3-х плат выглядит люто... Но главное, чтобы работало!
Установил версию прошивки 2.6.1, огромная благодарность автору, намного интереснее версии 2.5.Всем привет!
Доработал немного оригинальную прошивку для часов!
Что нового:
ver 2.6
ver 2.6.1
- Исправлены все предыдущие баги оригинальной прошивки.
- Добавлен режим автосмены эффекта вместо 0-го(без эффекта).
- Добавлен будильник с 4-мя режимами работы(однократный, каждый день, по будням и по дням недели).
- Добавлен календарь.
- Добавлена настройка времени день/ночь с кнопок.
- Добавлена настройка скорости 1-го эффекта день/ночь.
- Добавлена возможность выбора активного/пассивного бузера будильника.
- Добавлена возможность выбора активного/пассивного бузера будильника.
Управление:
Настройка времени: Удерживать "среднюю" кнопку
- Левая кнопка - выбор, остальные "меньше" и "больше"
- Клик по "выбору" - смена настройки часы/минуты | месяц/дата
- Клик "меньше" или "больше" - изменение времени
- Удержать "больше" - переход к настройке месяца/даты
- Удержать "меньше" - переход к настройке года
- Удержать "выбор" - возврат к режиму часов
Настройка будильника: Удерживать "левую" кнопку
- Левая кнопка - выбор, остальные "меньше" и "больше"
- Клик по "выбору" - смена настройки часы/минуты | режим будильника/день недели
- Клик "меньше" или "больше" - изменение времени/режима
- Удержать "меньше" или "больше" - переход к настройке режима/времени
- В 4м режиме будильника клик "меньше" или "больше" - изменение дня недели/включения 1 или отключения 0 будильника
- Удержать "выбор" - возврат к режиму часов
Режимы будильника:
- 00 - выключен
- 01 - однократный
- 02 - каждый день
- 03 - по будням
- 04 - выбор по дням недели
Настройка ночной подсветки: Удерживать "правую" кнопку
- Левая кнопка - выбор, остальные "меньше" и "больше"
- Клик по "выбору" - смена настройки час перехода в ночной режим/час перехода в дневной режим
- Клик "меньше" или "больше" - изменение времени
- Удержать "выбор" - возврат к режиму часов
Управление эффектами В РЕЖИМЕ ЧАСОВ:
Клик по "левой" кнопке переключает режимы подсветки ламп
Клик по "средней" кнопке включает - 1 и выключает - 0 режим "глюков"
- Отключена - 0
- Постоянное свечение - 1
- Дыхание - 2
Клик по "правой" кнопке переключает режимы перелистывания цифр
- Автоматическая смена эффектов - 0
- Плавное угасание - 1
- Перемотка по порядку числа - 2
- Перемотка по катодам - 3
- Поезд - 4
- Резинка - 5
Прошивку можно скачать в этом посте.
Да, понимаю, просто времени нет заняться тестером, что успел сделать - так и отписался, вот схема моей штуковины:@Dimasssiusis, вопросов было гораздо больше. Ну, если измерения произведены правильно, то проблема в дросселе.
Я так и не понял - Вы применяете резистор в анодной цепи и какой?
Извиняюсь, схему дал не полную, не все влезло, вот нормальная:@Dimasssiusis, какие-нибудь конденсаторы байпаса стоят? В частности, перед DC-DC конвертором со стороны 5В.
Сопротивление в анодной цепи в 10кОм, по моим расчётам, даёт примерно 7мА ток. Импульсов у Вас нет, фактически Вы прожигаете лампу постоянным напряжением. Думаю, что просто не хватает тока. С сопротивлениями меньше номиналом, думаю, просадка будет значительно выше. Но Вы утверждали, что у Вас и в холостом ходу 160. Попробуйте байпас на вход DC/DC поставить.
Черырехслойная? Она двухслойная И размеры 100*100, чтобы плата была 2$, Вы, просто, не так подумали))Шикарно живёте, для такого проекта - 4-х слойную плату!
Уточню, сейчас разбираю режим холостого хода и Ваше утверждение, что в нём, независимо от установленной скважности - постоянно 160В на конденсаторе 4,7 мкФ 400В.
1. Надеюсь, все измерения проводились с полностью выкрученным на 500кОм потенциометром и отключённой нагрузкой любого типа.
2. Хотелось бы увидеть скетч, который использовался для управления скважностью ШИМ. Если не здесь, то хотя бы в личку.
3. Измерьте напряжение на затворе IRF840, оно должно меняться при изменении скважности ШИМ.
4. По возможности, измерьте входной ток через разъём питания и напряжение на входе (5В).
5. Конденсатор C3 нужно увеличить значительно, до 1000мкФ, возможно ещё больше. Думайте об этом как о преобразовании напряжений. Пропорционально напряжению возрастает и запасаемая энергия. У Вас напряжение возрастает в 180/5=36 раз, как минимум во столько же должен быть больше входной конденсатор (5*36=180мкФ). Аналогично, с током: ток в 7мА на входе превращается в 250мА и даже это - не полная картина. При duty=160 ток передаётся только 60% времени, и КПД преобразования вряд ли дотягивает до 80%. Т.о. амплитуда тока на входе будет 250/(0,6*0,8)=500мА (выдерживает ли сердечник Вашего дросселя такой ток?). Провод к USB разъёму, очевидно, длинный, при таких токах возможны просадки напряжения на импульсах, поэтому конденсатор там жизненно необходим. Вопрос, почему это происходит на холостом ходу, когда токи должны составлять раз в 20 меньшую величину - как раз и является исследуемой проблемой.
// "минимальный" код для работы часов, можете начать с него разработку своей прошивки
// проверочный код для индикаторов, выводит 0-9 по очереди на каждую лампу
#define DELAY 500000 // задержка между сменой цифр, мс
#define DUTY 200 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
//#define BACKL 11 // подсветка
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// pinMode(BACKL, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
// включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
setPWM(6, DUTY);
// setPWM(BACKL, 1); // шим на светодиоды подсветки
/*
// перенастраиваем частоту ШИМ на пинах 3 и 11 на 7.8 кГц и разрешаем прерывания по совпадению
TCCR2B = (TCCR2B & B11111000) | 2; // делитель 8
TCCR2A |= (1 << WGM21); // включить CTC режим для COMPA
TIMSK2 |= (1 << OCIE2A); // включить прерывания по совпадению COMPA
*/
}
void loop() {
while (true) {
for (int i = 0; i < 10; i++) {
setPin(opts[0], 1); // тупо перебираем числа от 0 до 1
setDig(i);
delay(DELAY);
}
}
}
Похоже, что лампа полуживая, случайно не розовым цветом горит?Подскажите, пожалуйста. Собрал часы на ин-12 на плате Гайвера. 3-я лампа при нормальном режиме работы горит тускло, иногда моргает, иногда неполностью цифра загорается. В режиме проверки ламп на максимальной яркости все в норме, лампа горит отлично. Соплей, флюса нигде нет.
Также при изменении настроек яркости на максимум в прошивке часов, лампа вообще не загорается. При понижении до 12-13 загорается и работает нормально.
В чем может быть проблема?
Согласен, лопухнулся. Посчитал 4 картинки, как 4 разных слоя.Черырехслойная? Она двухслойная
Красный цвет - верхний слой, синий цвет - нижний
здесь лишний.while (true) {
...
}
#define SHOWTIME 5
#define PAUSETIME 1
void loop() {
static unsigned long mytime = millis();
static unsigned long showtime = millis();
static byte cathode = 0;
static boolean on_off = false;
if (mytime-millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
setDig(cathode);
on_off = false;
} else if (showtime-millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off ^= 1;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0)
}
}
ни то, ни другое напряжения не соответствуют тому, что должно быть. Вам нужно померить напряжение между выводом D6 и землёй. Впрочем, тут и мультиметр может врать безбожно, если он совсем простой.При скважности 160 на транзисторе 1.5 вольт, при скважности в 200 на транзисторе 0,8- 0,9 вольт (если я то, что нужно, замеряю)
Да, при разводке ошибся, D7 не поддерживает ШИМНа схеме затвор подключен к D7, на плате и в скетче - на D6. Предполагаю, что вывод 6 - верный.
#define DELAY 10000 // задержка между сменой цифр, мс
#define DUTY 200 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
#define SHOWTIME 5
#define PAUSETIME 1
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
//#define BACKL 11 // подсветка
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
setPWM(6, DUTY); // включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
}
void loop() {
static unsigned long mytime = millis();
static unsigned long showtime = millis();
static byte cathode = 0;
static boolean on_off = false;
if (mytime-millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
setDig(cathode);
on_off = false;
} else if (showtime-millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off ^= 1;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0);
}
}
Ну, это уже близко. (5*200/255=3,9; 5*160/255=3,1).Мой мультиметр показывает напряжение в 4 вольта ровно (между D6 и землей) на DUTY 200
И 3,19 при DUTY 160
попробуйте переместитьничего не происходит
static unsigned long mytime = millis();
static unsigned long showtime = millis();
static byte cathode = 0;
static boolean on_off = false;
Ничего не поменялось((Ну, это уже близко. (5*200/255=3,9; 5*160/255=3,1).
попробуйте переместить
без слов static перед надписью "распиновка ламп" в глобальной области.C++:static unsigned long mytime = millis(); static unsigned long showtime = millis(); static byte cathode = 0; static boolean on_off = false;
#define DELAY 10000 // задержка между сменой цифр, мс
#define DUTY 160 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
#define SHOWTIME 5
#define PAUSETIME 1
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
unsigned long mytime = millis();
unsigned long showtime = millis();
byte cathode = 0;
boolean on_off = false;
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
setPWM(6, DUTY); // включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
}
void loop() {
if (mytime - millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
setDig(cathode);
on_off = false;
} else if (showtime - millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off ^= 1;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0);
}
}
Да, заработало теперь)) Только катоды не перебираетПонял. Поставьте
setDig(cathode);
в setup после setPWM и на всякий случай замените
on_off ^= 1;
на
on_off = !on_off;
#define DELAY 1000 // задержка между сменой цифр, мс
#define DUTY 200 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
#define SHOWTIME 1
#define PAUSETIME 1
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
unsigned long mytime = millis();
unsigned long showtime = millis();
byte cathode = 0;
boolean on_off = false;
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
setPWM(6, DUTY); // включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
setDig(cathode);
}
void loop() {
if (mytime - millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
on_off = false;
} else if (showtime - millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off = !on_off;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0);
}
}
Под этой строчкой было:потому что строчку пропустили под if (++cathode > 10 )...
Если ее добавить, то перестает работать:Её не переносить надо было, а скопировать.
void loop() {
if (mytime - millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
setDig(cathode);
on_off = false;
} else if (showtime - millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off = !on_off;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0);
}
}
Следовал Вашим инструкциям:Что-то, значит, сделали не так.
#define DELAY 1000 // задержка между сменой цифр, мс
#define DUTY 160 // скважность ШИМ. От скважности зависит напряжение! у меня 175 вольт при значении 180 и 145 вольт при 120
#define BOARD_TYPE 0
#define SHOWTIME 1
#define PAUSETIME 1
// пины
#define KEY0 8 // часы
#define BTN1 3 // кнопка 1
#define BTN2 4 // кнопка 2
#define BTN3 5 // кнопка 3
#define GEN 6 // генератор
#define DECODER0 A0
#define DECODER1 A1
#define DECODER2 A2
#define DECODER3 A3
unsigned long mytime = millis();
unsigned long showtime = millis();
byte cathode = 0;
boolean on_off = false;
// распиновка ламп
#if (BOARD_TYPE == 0)
byte digitMask[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // маска дешифратора платы in12_turned (цифры нормальные)
byte opts[] = {KEY0}; // порядок индикаторов слева направо
#endif
#include "GyverHacks.h"
void setDig(byte digit) {
digit = digitMask[digit];
setPin(DECODER3, bitRead(digit, 0));
setPin(DECODER1, bitRead(digit, 1));
setPin(DECODER0, bitRead(digit, 2));
setPin(DECODER2, bitRead(digit, 3));
}
void setup() {
Serial.begin(9600);
// настройка пинов на выход
pinMode(DECODER0, OUTPUT);
pinMode(DECODER1, OUTPUT);
pinMode(DECODER2, OUTPUT);
pinMode(DECODER3, OUTPUT);
pinMode(KEY0, OUTPUT);
pinMode(GEN, OUTPUT);
// задаем частоту ШИМ на 5 и 6 выводах 31 кГц
TCCR0B = TCCR0B & 0b11111000 | 1; // ставим делитель 1
setPWM(6, DUTY); // включаем ШИМ, от скважности зависит напряжение! у 175 вольт при значении 180 и 145 вольт при 120
setDig(cathode);
}
void loop() {
if (mytime - millis() >= DELAY) {
setPin(opts[0], 0);
showtime = mytime = millis();
if (++cathode > 10) cathode = 0;
setDig(cathode);
on_off = false;
} else if (showtime - millis() >= (on_off ? SHOWTIME : PAUSETIME)) {
on_off = !on_off;
showtime = millis();
setPin(opts[0], on_off ? 1 : 0);
}
}