-
Сообщения
-
алиэкспрессу этим вы врядли что-то докажете, скорее наоборот. Упалили. Вскрыть посылку на камеру и тут же ее проверить, тогда да.
-
Ответная часть не в одном экземпляре. Проблема вряд ли с той стороны. Что-то с пультом, думаю.
-
Всем доброго времени суток. На работе случилась беда, навернулся котел, точнее программно-таймерное устройство, дергающее за "веревочки" цепей данного котла. Как у нас в стране обычно бывает, нет ни документации на это устройство, ни описания логики данного механизма. Ну и соответственно вся возня, касаемая ремонта, легла на плечи коллектива. Недолго думая, обложился всем схемами, которые мог найти, частично методом частичного разбора и замеров расчертил полную схему данного котла. Постепенно логика работы сломанного программно-таймерного устройства стала понятна. Было принято решение воссоздать данный модуль на базе AVR контроллера со всеми вытекающими. В спринт лайот накидал печатку, заказал, и пока она доставляется занялся набором программы в среде Arduino IDE. И буквально с первых же попыток написать скетч понял, что с печатками я поторопился, как я уже потом понял, программно-таймерное устройство c момента запуска должно единожды прогнать перечень команд в void setup и начать следить да датчиками уже в void loop. Следовательно для такого исполнения программы понадобилось дополнять схему парой транзисторов и реле, для коммутации питания ардуино самой на себя. Ну что-то я в дебри полез. Нужен совет по скетчу. Дабы оставить печатные платы без изменений в первоначальном заказанном виде, хочу избавиться от удерживающего питание реле. Но это получится сделать только если есть возможность в void setup скинуть скетч на начало работы при определенных условиях, но только не средствами reset, а именно программно? Чтото вроде того, что при начале скетча, при несоблюдении условий продолжения работы void setup начинал выполняться с первой строки. Ниже часть пока еще сырого пробного скетча. #include <OLED_I2C.h> OLED myOLED(4, 3, 4); extern uint8_t RusFont[]; extern uint8_t SmallFont[]; const int buttonPinSTART = A0; // вход для контроля пуск/стоп программы (так же через диод запитывается пин +5v, на который приходит питание через реле, управляемого 13 пином) const int buttonPinFIRE = A1; // вход для контроля пламени const int ledPin2 = 2; // пин питания дисплея const int ledPin5 = 5; // вывод для реле вентилятора const int ledPin6 = 6; // вывод для реле аварии const int ledPin7 = 7; // вывод для реле воздушной заслонки const int ledPin8 = 8; // вывод для реле соленоид2 const int ledPin9 = 9; // вывод для реле розжига const int ledPin10 = 10; // вывод для реле соленоид1 const int ledPin13 = 13; // вывод подтяжки питания int buttonStateSTART = LOW; int buttonStateFIRE = HIGH; void setup() { pinMode(buttonPinSTART, INPUT); pinMode(buttonPinFIRE, INPUT_PULLUP); pinMode(ledPin2, OUTPUT); // Пин питания дисплея pinMode(ledPin5, OUTPUT); // Пин управления pinMode(ledPin6, OUTPUT); // Пин управления pinMode(ledPin7, OUTPUT); // Пин управления pinMode(ledPin8, OUTPUT); // Пин управления pinMode(ledPin9, OUTPUT); // Пин управления pinMode(ledPin10, OUTPUT); // Пин управления pinMode(ledPin13, OUTPUT); // Пин удержания питания микроконтроллера digitalWrite(ledPin2, HIGH); // Подклюаем дисплей delay(1500); myOLED.begin(); myOLED.clrScr(); // Стираем все с экрана myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print( "------" , CENTER, 12); // Выводим текст ------ myOLED.print( "------" , CENTER, 30); // Выводим текст ------ myOLED.print( "------" , RIGHT, 48); // Выводим текст ------ myOLED.update(); digitalWrite(ledPin13, HIGH); // Подтягиваем питание ардуино через реле delay (2000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } myOLED.clrScr(); myOLED.print( "GJLUJNJDRF R GECRE" , CENTER, 24); // Выводим текст ПОДГОТОВКА К ПУСКУ myOLED.update(); delay(2000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } myOLED.clrScr(); myOLED.print( "------" , CENTER, 24); // Выводим текст myOLED.print( "------" , CENTER, 36); // Выводим текст myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } digitalWrite(ledPin7, HIGH); myOLED.clrScr(); myOLED.print( "------" , CENTER, 24); // Выводим текст myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } digitalWrite(ledPin5, HIGH); delay(300); ..... ..... ..... ..... ..... } } void loop() { ..... ..... ..... ..... ..... } В данном варианте, при отмене запуска ардуинка проделывает кое какие манипуляции, в зависимости от части кода и снимает питание с пина13 (реле поддержки питания), которое тем временем обестачивает контроллер. Вроде бы задача выполнена, но есть баг. К примеру механик решил выключить котел, повернул тумблер в *0* на стадии предпускового продува камеры, пошел цикл завершения работы. А механик передумал останавливать котел, не дождался пока завершится процесс выключения, врубает тумблер в "работу", при этом в void setup программа отключает подтяжку питания, но продолжает выполнять последовательность действий запуска. В конечном итоге сработает авария, условия которой прописано в void loop. Но момент все равно неприятный. Есть ли возможность в данной строке delay(1000); digitalWrite(ledPin13, LOW); delay(300); вписать команду, которая заставит void setup прервать выполнение программы и вернуться к началу (повторюсь, без reset), ну и соответственно избавиться от использования 13 пина и соответственно танцев с подтягиванием питания Написал много, так как тяжело выразить словами всю кашу, которая на данный момент у меня в голове, возможно и сам за выходные немного отдохну и решение придет само собой) Возможно я изначально неправильно выбрал подход к данному скетчу. Не представляю как в void loop это все заставить работать, так как основному телу программы не нужна цикличность.
-
Ещё парочку реле надо добавить, а то несерьёзно как-то.
-
By demiurg1978 · Posted
Вариант первый. ldi r16, 1 Cycle: dec r16 Проверка на переполнение или отрицательное число, не помню команду. Если да, выход, если нет lsl r16 rjmp Cycle Получили бит в соответствии с переменной от 0 до 7. Второй вариант. Создаем таблицу. Table_bits: .db 0b00000001, 0b00000010 .db 0b00000100, 0b00001000 .db 0b00010000, 0b00100000 .db 0b01000000, 0b10000000 Установка адреса указателя на flash таблицу. Прибавляем переменную. Считывает значение. Получаем бит в соответствии с переменной от 0 до7. Народ. В данном случае вопрос касается алгоритмов. Вы не правы, отправляя тс читать книги. В книгах зачастую нет ответа на такие вопросы.
-
-
Similar Content
-
By PEF
Для начала хочу всех коллег и друзей поздравить с наступившим новым годом и пожелать, чтобы все плохое осталось в прошлом году, а Новый год принес нам всем только хорошее.
В связи со своей болезнью и праздниками появилось свободное время, стал почаще заглядывать на сайт и честно скажу, тоска зеленая, скукотища. «Как выковырять аккумулятор из бритвы?» или «как убрать мигание из ленты?» - совсем не вдохновляет.
И тут я вспомнил свои давние проблемки с зарядкой разнотипных аккумуляторов, которые время от времени появляются. У меня дома довольно много используется аккумуляторов разных типов емкостей и напряжений. Что, если создать универсальное устройство для их заряда, контроля параметров и тренировки любых типов аккумуляторов в диапазоне напряжений 1,2 .. 16В и зарядно разрядных токов 0,1 .. 5А?
Применив даже простенький доступный контроллер ATmega328P эту задачу реализовать вполне возможно. Использование современных полевых MOSFETs транзисторов с сверх низким сопротивлением в открытом состоянии позволяет работать с токами до 5А без радиаторов.
Вот я и решил разработать такое устройство.
Как я себе представляю этот зарядник.
1. Это устройство с внешним питанием. Отдельный блок питания 19,,24В 4..5А
2. Устройство должно позволять устанавливать предельное напряжение заряда от 1,25 до 17В с точностью не хуже 50мВ.
3. Пределы установки токов и зарядно разрядных токов 0,1 .. 5А. При разряде токами более 1А, разряд происходит на внешний нагрузочный резистор (лампочка от фары 12В).
4. Контроль энергии, потребленной при зарядке, и ,соответственно, при разряде. Определение реальной емкости аккумулятора.
5. Обеспечение режимов тренировки аккумулятора.
6. Пульсации токов заряда и разряда должны быть на выше 5%.
Представляю силовую часть схемы, а также обвязку датчика тока.
Схема позволяет без коммутаций в зависимости от подачи ШИМ сигнала от контроллера на вход либо HIN либо LIN обеспечивать соответственно регулируемый заряд или разряд.
Усилитель напряжения со средней точкой на U1A датчика тока позволяет обеспечить с 10ти битным АЦП АТМеги дискретность 10мВ.
Решение по конкретному применению определенной модели транзисторов и операционника пока не принял это совсем не проблема. На схеме транзисторы и операционник обстрактные.
Хотел бы от коллег получить замечания по схемотехнике и может дополнения по функциям устройства.
Зарядник31.pdf
-
By Ruslan Dumbrovskiy
Привет всем. Имеется схема измерителя емкости конденсаторов. Она как приставка к обычному китайскому мультиметру , тоесть измерения выполняются по напряжению заряда измеряемого конденсатора! Есть три позиции : 50 пик - 1Н , 1н-100Н , 0,1 мкФ - 10 мкФ. Схема построена на генераторе , который выполняет микросхема КР140уд7 или ее аналог 741 . Перерыл все свои микросхемы + платы такой не нашел . Я нахожусь сейчас в деревенской местности , здесь ни людей нет , что занимаются электроникой ни магазинов нет. Заказ будет очень долго идти. У меня просьба помочь туда встроить какой нибудь другой генератор , и правильно подключить. Другие микросхемы у меня есть , ну покрайней мере поискать могу. То что нашел - таймер NE555, К157уд2, КР140уд1Б (или это 16) , TL062, HEF4069UBP - но это по соображение что может подойти. А так ещё могу что-то поискать . Ссылка со схемой ниже. Всем спасибо https://meandr.org/archives/30298#respond
-
By Пентагрид
Пару месяцев назад понадобилось замерить ESR электролитических конденсаторов, собрал популярный пробник-приставку из журнала Радиомир 2012-03/04, схема которой гуляет по сети.
Существенные отличия от оригинала: использована 74HC00 вместо К561ЛН2, да частота 130 кГц вместо 100 кГц.
Откалибровал и протестировал несколько обычных электролитов 3300 мкФ 25/30 В (новые, с проверенными ёмкостями, от Jamicon, Rubycon и др.), отложил их в коробку. Через пару недель они понадобились, по привычке подключил к С-метру, а тот показывает половину ёмкости ~(1500-1600) мкФ. Для эксперимента подал на них 12 В и оставил на час; осторожно разрядил, и снова половина номинальной ёмкости. И сейчас то же самое.
Подозреваю, что под действием импульсов постоянного напряжения высокой частоты:
1. Электролит испарился;
2. Оксидный слой стал толще.
Каково ваше мнение по данному случаю?
-
By Falconist
"Уж сколько раз твердили миру..." что получивший широкое распространение в Интернете миф (не побоюсь уточнения: дурацкий миф), что при ремонте УМЗЧ первым делом нужно менять ВСЕ конденсаторы, не столько бесполезен, сколько вреден, "...а воз и ныне там". Приведу цитату из реальной темы, начатой одним "юным дарованием" (выделения мои):
Более показательного примера бездумного применения упомянутого выше мифа найти трудно. Дефекты не только не устранены, но и многократно умножены.
Во множестве тем я последовательно и упорно пытался развенчать этот миф. К сожалению, инерцию мышления "большинства" так быстро не переломить...
Так всё-таки, нужно менять конденсаторы или не нужно? Нужно. Но только те, которые утратили емкость и/или имеют повышенное Эквивалентное Последовательное Сопротивление (ЭПС, ESR)! А определить это возможно исключительно с помощью соответствующих приборов (измерителей С/ESR). Есть в наличии? Тогда меряйте и меняйте на здоровье себе и ремонтируемому девайсу. Нет? Подмышку и к Мастеру!
Собственно ремонт состоит всего из двух действия: 1) Нахождение детали(ей), вышедшей(их) из строя; 2) Замена ее(их) на исправные. ВСЁ!!! Все остальные действия - это не ремонт, как таковой. Их можно назвать "профилактикой", "апгрейдом", "модернизацией", как угодно еще, но не "ремонтом". На первый взгляд - просто. В действительности - очень сложно. Чтобы успешно отремонтировать даже самый простой девайс нужно иметь опыт, как минимум на порядок больший, чем для того, чтобы его просто спаять по готовой схеме. К сожалению, подавляющее большинство "юных дарований" считает наоборот: "В электронике ничего не понимаю, но паять умею"...
Боюсь, что и эта тема останется "гласом вопиющего в пустыне", но если хоть кто-то задумается, перед тем, как хвататься за паяльник - уже будет хорошо.
P.S. Параллельная тема в профессиональном разделе: http://forum.cxem.net/index.php?/topic/159558-менять-или-не-менять-конденсаторы-в-аудиотехнике/
-
By РадиоНастройщик
Измерение ESR - это конечно хорошо, но но до сих пор нет общего мнения по поводу его правильного применения, поэтому я задумался о методе измерения именно в рабочем режиме, а конкретно - это должна быть синусоида частотой 50-100 Гц, амплитуда измерения должна быть на 20% меньше рабочего напряжения, в реальном режиме учитывается утечка по сопротивлению, учитывать нагрев конденсатора, обеспечить минимум разрядного тока конденсатора, из расчета 1 Ампер на 1000 микрофарад и зарядный ток конденсатора из расчета 10 Ампер на 1000 микрофарад.
Схема приведена ниже, я при моделировании поставил именно те номиналы, которые были применены при сборке. Пока с рабочим напряжением не не пробовал, руки не дошли, а вот все остальное реализовано достаточно просто. Хотелось измерять внутрисхемно, на уровне 200-300 милливольт, поэтому был применен трансформатор с выходным напряжением 1 Вольт от выжигательного аппарата, с достаточно большим током, порядка 10 Ампер. Диод D1 обычный кремниевый на 10 Ампер, диод D2 кремниевый на 1 Ампер, измерительная головка сопротивлением 1 кОм (режим 0.1 Вольт у ТЛ-4М2).
Результат мне понравился, при своей простоте измерения были достаточно точными. Это прототип, поэтому можно улучшить схему. Принцип следующий - конденсатор заряжается максимальным током в первом полупериоде, во втором полупериоде разряжается нелинейным током примерно 10% от исходного, при этом учитывается утечка конденсатора. Без конденсатора головка измеряет среднеквадратичное напряжение, а в случае измерения конденсатора измеряется уже постоянный ток, так как конденсатор сглаживает пульсации и и за счет этого на плюсе повышается напряжение, то есть это обычный режим блока питания.
По-хорошему, С2 надо убрать, а цепь D2-R3 питать обмоткой трансформатора по напряжению на 5-10% выше, чем вторичная, при этом можно применять как стрелочный прибор, так и цифровой вольтметр без переделки. Точность измерения малых величин при этом повысится, так как синфазно включенные обмотки компенсируют друг-друга, несмотря на плавающее сетевое напряжение 220 Вольт.
Я чаще измерял конденсаторы до 100 мкФ, поэтому и привожу схему именно для этого случая, диапазон 1-100 мкФ измеряется достаточно точно, хотя и менее 1 мкФ измеряется с приличной точностью цифровым вольтметром. Построено это было давно, такая схема помогает при измерении непонятной керамики с низким ESR. Пробовал измерять и 1000 мкф, точность сохраняется, только R1 надо уменьшить до 10 Ом.
Как вариант - можно перевести на другие частоты, но изначально надо понимать, что измеряем, если блок питания питается от сети 220 Вольт, то частота должна быть 50 Гц. Если ремонтируем зарядку, то применяем частоты 30-50 кГц. Но в общем случае, 50-100 Гц, на мой взгляд, это самое универсальное решение в случае измерения суммарной емкости и плотности электролита, а не измерения емкости обкладок, без учета электролита и индуктивности выводов, на 100 кГц, к примеру.
-