Jump to content

Recommended Posts

Эта тяга к прекрасному быстро заканчивается когда требуется готовая либа для работы с ЛСД или чем то подобным коих на етих языках весьма мало и грустно :)

В точку!А когда приспичит собрать первые часы,или термометр,вот тут баскомовские библиотеки очень кстати будут.

Share this post


Link to post
Share on other sites

А вот Баском зараза водил меня за нос,а я доверял ему как толковой проге :bomb: Оказалось,что он тасует мне неверные нерабочие HEX файлы

А как это возможно,чтобы баском за вас загружал хексы для прошивки?Никогда о подобном не слышал...

Кстати,мой USBASP,правда самодельный, не видит МК,если МК тактируется от внутреннего генератора в 1мгц. Тини13 с завода по умолчанию имеет именно 1мгц.

Лечилось так:захожу в баскоме в настройки программатора,меняю тактовую частоту программатора с авто на 50гц,запитываю МК от USBASP,считываю МК и меняю фьюзы МК на что-нибудь больше 1мгц.Если МК рабочий(у меня несколько тини13 с алиэкспресс оказались полностью дохлыми),то все дышит.

На вашем скрине программы используется директива $PROG.Если вы прошиваете фьюзы из меню "Загрузка в МК" F4,то этой директивой обычно не пользуются. Также в программе указана тактовая частота 9,6 мгц,а фьюз деление на 8 (divide clock by 8 ) не отключен,значит программа будет работать на частоте 1,2 мгц. Если вы хотите "считать" состояния порта,то используем PIN,если нет, то можно использовать PORT.

$regfile = "attiny13a.dat"

$Crystal=9600000

$hwstack=12

$swstack=12

$framesize=20

Config PORTB.4=Output

Do

set PORTB.4

Wait 1

reset PORTB.4

Wait 2

Loop

End

Я делал примерно так. Программа простая,как автомат Калашникова,работает также))

Share this post


Link to post
Share on other sites

Эта тяга к прекрасному быстро заканчивается когда требуется готовая либа для работы с ЛСД или чем то подобным

Для употребления таких веществ уже библиотека нужна?

Хватит путать ЛСД (LSD) и ЖК(LCD)


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

15 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений.

Подробнее

Есть у меня вопрос по правке прошивки одного интересного девайса. Опыта в этом деле почти нет, по этому прошу отнестись с пониманием к возможным ошибкам в описании задачи.

Собрал термостат для котла отопления из дружественного форума. Суть работы довольно проста - управление моностабильным или бистабильным реле для включения/отключения котла.

Вот часть кода которая отвечает за управление реле

//==============================================================
// Управление реле
//==============================================================
#ifdef BISTABLE_RELAY
/* Бистабильное реле */
void relay (char s)
{
#asm ("cli") /* ATOMIC */
if (s)
{ /* SET */
 PORTC |= 0x10;
delay_ms(50);
PORTC &= ~0x10;
}
else
{ /* RESET */
 PORTC |= 0x20;
delay_ms(50);
PORTC &= ~0x20;
};
#asm ("sei") /* END ATOMIC */
}
#else
/* Моностабильное реле */
void relay (char s)
{
#asm ("cli") /* ATOMIC */
if (s)
{
 PORTC |= 0x10;
}
else
{
PORTC &= ~0x10;
};
#asm ("cli") /* END ATOMIC */
}
#endif

Для бистабильного реле подается управляющий импульс включения на 50мсек на одну ногу мк

или управляющий импульс выключения на другую ногу

Для моностабильного реле включаем или отключаем сигнал на одной и той же ноге мк.

Играя с устройством я попробывал увеличить длительность импульса до 1 - 5 сек и заметил что у меня на самом деле получилось подобие некого цикла. Тоесть должно же быть так:

температура в комнате ниже измеренной = подаем одиночную команду включения (устанавливаем управляющий выход мк в лог 1 на 50мсек), после чего снимаем управляющий сигнал и ждем пока температура не вырастет

После того как температура вырастет от желаемой на 0.2 град подаем такой же сигнал отключения реле на другую ногу мк и снова ждем.

Я же получаю постоянную серию управляющих импульсов (как бы цикл). Тоесть если измеренная температура ниже желаемой у меня будут постоянные управляющие сигналы с некой скважностью пока температура не достигнет желаемой + гистерезис. И далее та же картина но уже с сигналом отключения реле.

Если использовать вариант с моностабильным реле, то тут все работает нормально.

Я бы хотел понять почему не работает как нужно режим с бистабильным реле.

А также например сделать так чтобы для включения реле мк подавал одиночный импульс скажем на секунду и для отключения этот же сигнал подавался снова, такой же длительности на ту же ногу мк. Исполнительное устройство не проблема подкорректировать а вот прошивку изменить для меня сложновато.

Автор этого проекта выложил исходники. Выкладываю их тут и буду рад если кто найдет время объяснить и помочь в моем вопросе.

Может достаточно просто изменить синтаксис, но я в этом не спец

main.txt

Share this post


Link to post
Share on other sites

У вас происходит постоянный вызов функции relay из программы. В случае моностабильного реле вы его просто не видите, так как состояние порта С при таком вызове не изменяется. А в случае бистабильного импульс виден. Собственно ничего страшного в этом нет, если на бистабильное реле будут постоянно идти импульсы. Если хотите от этого избавиться, то нужно перелопачивать весь код и искать, каким образом избавиться от ненужных вызовов функции. На мой взгляд это лишнее.

А также например сделать так чтобы для включения реле мк подавал одиночный импульс скажем на секунду и для отключения этот же сигнал подавался снова, такой же длительности на ту же ногу мк. Исполнительное устройство не проблема подкорректировать а вот прошивку изменить для меня сложновато.

А какой в этом смысл? Вы рискуете в этом случае потерять синхронизацию. Контроллер ведь не знает, в каком положении находится ваше реле и после первого же сбоя в схеме будет тупо гнать импульс за импульсом не подозревая, что реле работает уже в противоположной фазе, т.е. включается, когда надо отключиться и наоборот.

Edited by Sergey-Ufa

Share this post


Link to post
Share on other sites
                     

Выбираем преобразователь для портативных устройств

Портативные устройства могут различаться по типам элементов питания, а также по разным функциям. В статье на примере 3-х устройств демонстрируется, как многоканальные SIMO-преобразователи помогают эффективно реализовывать потенциал системы питания и первичного элемента, а также гибко подстраиваться под требуемый функционал.

Читать статью

Прикрепленные файлы:

main.txt 43,35 Кб

И что это за код ? Как он относится к тому, который Вы нам показали в посте ?

Где в нём включение реле, сравнение с температурой, .... ?

Ну а вообще, Вы просто хотите иметь триггер, запоминающий состояние. Ну так и напишите его :)

Share this post


Link to post
Share on other sites
Вот часть кода которая отвечает за управление реле/////

Для бистабильного реле подается управляющий импульс включения на 50мсек на одну ногу мк

или управляющий импульс выключения на другую ногу

этот код ничего общего с управлением би_реле не имеет... это в лучшем случае третья часть необходимого кода... и постоянное отключение прерывания на 50мсек при каждом вызове функции наводит на мысль, а на вообще тогда прерывание....

Share this post


Link to post
Share on other sites

Там (в аттаче) вообще код для PIC'ов, а в посте у vova_ua для АВР'а. Человек "блуждает где-то в облаках" :)

Share this post


Link to post
Share on other sites

У вас происходит постоянный вызов функции relay из программы.

Вы рискуете в этом случае потерять синхронизацию.

Очень хорошее замечание. В таком случае я бы хотел реализировать аналогию с бистабильным реле но в идеале по такому алгоритму:

Если температура ниже желаемой = выдавать импульсы включения бистабильного реле по такому вот принципу - первый импульс дительностью 1сек, далее пауза скажем в пол часа далее снова импульс в 0.5 сек, пауза в пол часа, импульс 0.5сек и т.д. пока температура не привысит желаемую + гистерезис.

Ипмульсы отключения реле по такому же алгоритму.

Термостат этот у меня работает в безпроводном режиме, применен приемник и передатчик на 433МГц

Так вот все это нужно для уменьшения потребления тока передающей части и улучшения стабильности работы в случае кратковременного либо длительного отключения приемной части.

И что это за код ?

В посте только часть кода, в прикрепленном файле исходник.

Я бы с радостью написал все что угодно, но в моем посте я четко описал суть ситуации и мои познания в этом деле.

Там (в аттаче)

1. читайте пожалуйста мой пост полностью особенно о том что я очень далек от программирования, хотя с помощью гугла удалось добавить подсветку в эту прошивку.

2. я вижу что часть кода которую я привел в посте и возможно в аттаче действительно на мой взгяд "чайника" не для AVR, но также вижу что он закомменчен и никак не влияет на работу прошивки.

3. Я блогодарен всем откликнувшимся. Но друзья! Есть задача, нужен совет либо конкретная помощь, какую вот например предоставил - Sergey-Ufa

Edited by vova_ua

Share this post


Link to post
Share on other sites

В посте только часть кода, в прикрепленном файле исходник.

А Вы сами качали и смотрели то, что прикрепили ? В прикреплённом файле не то что исходник, кусок из которого Вы выложили, там вообще нет ничего общего с тем, что Вы описываете.

Где код, в котором идёт сравнение с уставкой, решение включать или выключать реле, и т.д... ? Там какая то куча условий с каким то портами, задержки, всё запутанно и в кучу свалено...

Вы только твердите, что далеки от программирования и что Вас не слушают. Только Вы сами не слышите. Вам говорят, что выложенного Вами - мало. Решать Вашу проблему нужно не в Вашей функции relay, а там, где решается включать его или отключать.

Как можно дать совет, не видя ситуации ? Мы не экстрасенсы...

Далее, Вы просите советов. Чем Вам вот эта фраза:

Ну а вообще, Вы просто хотите иметь триггер, запоминающий состояние. Ну так и напишите его
не совет ?

На сколько я понял, Вы просто его проигнорировали. Вопрос вот только почему ? Неужели Вы на столько компетентны в этом, чтобы могли отсеивать правильные/неправильные советы ?

Если бы Вы его не игнорировали, то у Вас по-любому появились бы вопросы по нему.

А совет, между прочим, в отличии от тех, которые Вы посчитали "правильными", был в тему. Но Вы же у нас понимаете в советах, куда нам там...

Всего наилучшего :bye:

Share this post


Link to post
Share on other sites

только что скачал исходник который прикрепил выше.

Вот наверное та часть кода о которой Вы упоминаете.

//==============================================================
// Управление реле
//==============================================================
#ifdef BISTABLE_RELAY
/* Бистабильное реле */
void relay (char s)
{
#asm ("cli") /* ATOMIC */
   if (s)
   { /* SET */
    PORTC |= 0x10;
 delay_ms(50);
 PORTC &= ~0x10;
   }
   else
   { /* RESET */
 PORTC |= 0x20;
 delay_ms(50);
 PORTC &= ~0x20;
   };
#asm ("sei") /* END ATOMIC */
}
#else
/* Моностабильное реле */
void relay (char s)
{
#asm ("cli") /* ATOMIC */
   if (s)
   {
    PORTC |= 0x10;
   }
   else
   {
 PORTC &= ~0x10;
   };
#asm ("cli") /* END ATOMIC */
}
#endif

//==============================================================
// Сравнение температур и выдача команды
//==============================================================
void compare (void)
{
if ((temp2-hyst)>=temp) // Желаемая тем-ра больше измеренной - вкл. реле
{
 relay(1);
   }
   else if (temp>=(temp2+hyst)) // Желаемая тем-ра меньше измеренной - откл. реле
   {
 relay(0);
   };
}

Я не игнорирую советы, которые дали форумчане. Просто некоторые из них не могут быть актуальными так как не соответствуют тому что я описал в задаче.

Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер.

Я упомянул иной алгоритм который мне был бы полезен - Вы не обратили на него никакого внимания.

Сравните совет который дал Sergey-Ufa и иные советы и увидите что иные советы куда менее информативны и конкретны.

В идеале я бы конечно хотел чтобы знающий человек просмотрел на досуге код и указал как бы мне решить мою ситуацию. Я не ставлю для себя задачу освоить программирование, так как для этого уже немного поздновато. Я нуждаюсь в помощи с этой задачей что и описал выше

и что самое главное я действительно благодарен всем откликнувшимся не зависимо от советов

Share this post


Link to post
Share on other sites
Просто некоторые из них не могут быть актуальными так как не соответствуют тому что я описал в задаче
Вот, что Вы написали :
Я же получаю постоянную серию управляющих импульсов (как бы цикл). Тоесть если измеренная температура ниже желаемой у меня будут постоянные управляющие сигналы с некой скважностью пока температура не достигнет желаемой + гистерезис. И далее та же картина но уже с сигналом отключения реле.

Я Вам дал совет с запоминанием состояния. Что не так ? Каким образом он не соответствует написанному Вами ? Поясните...

Сравните совет который дал Sergey-Ufa и иные советы и увидите что иные советы куда менее информативны и конкретны
Какой более информативен ? Что у Вас происходит постоянный вызов функции relay ? Т.е. Вы этого в своей же собственной программе не видите ?

Или что Вы рискуете рассинхронизировать программу с реле ? Дак это и ежу понятно. Если для Вас это не логично, тогда не в ту степь Вы полезли.

Вы просто не поняли сути его поста. Вот его ответ на Ваш вопрос :

. Если хотите от этого избавиться, то нужно перелопачивать весь код и искать, каким образом избавиться от ненужных вызовов функции
А Вы увидели очевидные для Вас вещи (ну или то, что хотели услышать), а остальное - мимо ушей.

А теперь Вы возьмите и сравните советы и ответы, может всё таки чего и уловите, соответствующего Вашим "запросам"...

ЗЫ: Ничего против поста Sergey-Ufa не имею, он всё верно написал. Просто некоторые не умеют читать и вникать в суть написанного.

Share this post


Link to post
Share on other sites
Что не так ? Каким образом он не соответствует написанному Вами ? Поясните...

Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер.

Согласитесь же - Вы ведь тоже пропускаете многое из написанного мной мимо ушей ;)

Но ведь я никого и никак не хочу задеть или обидеть, у меня совсем иная задача. Тем не менее если я задел Вас, прошу простить :)

Давайте попробую максимально конкретизировать вопрос!

Я бы хотел найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его

Если Вы например имеете свободное время и желание помочь и можете просмотреть код и помочь в этом вопросе - буду благодарен. Если же нет, то возможно не стоит тратить время на мой вопрос ;)

Share this post


Link to post
Share on other sites
Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер.
Опять двадцать пять. Причём тут то, что Вы не разбираетесь в программировании ? Я вам дал совет. Если бы Вы его не проигнорировали и хотели бы им воспользоваться, но не понимали бы как, Вы бы задали наводящие вопросы. Но от Вас только и было слышно, что все советы - говно и не удовлетворяют Вашим требованиям.

Меня лично Вы ничем не обидели и не задели. Принимать советы или нет - дело Ваше.

Я бы хотел найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его
С трудом представляю ситуацию, в которой Вы не понимаете как сделать запоминание текущего состояния реле и по этому состоянию решать о включении/отключении реле.

Заводим переменную, после каждого изменения состояния реле пишем в неё значение этого состояния, и перед каждым вкл/откл реле проверяем эту переменную (предыдущее состояние). Если оно изменилось - выполняем действие, не изменилось - ничего не делаем.

Вот и вся магия... :)

Share this post


Link to post
Share on other sites

1. я не говорил что советы говно ;)

2. мне не нужен триггер. Вопрос - найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его

Так как желаемый алгоритм управления я также описал выше. Но с этим я сам разберусь после того как не без посторонней помощи исправлю баг с вызовом функции.

3. магия... Очень тонко подметили. Для Вас возможно это как азбука, для меня - магия ;)

Share this post


Link to post
Share on other sites

Не знаю что такое s и с чем оно сравнивается. По этому как получится.

Если, не понятная мне s имеет значение нужное значения для включения нагрева или чего там и не примет противоположное значение пока не выполнится условие, тогда как-то так.

bool position=false;
void relay (char s)
{
#asm ("cli") /* ATOMIC */
 if( s)
 { /* SET */
if(position==false)
{
		 PORTC |= 0x10;
delay_ms(50);
PORTC &= ~0x10;
position=true;
};
 }
 else
 { /* RESET */
if(position==true)
{
	 PORTC |= 0x20;
delay_ms(50);
PORTC &= ~0x20;
position=false;
}
 };

Вопрос одноразового исполнения кода - это отключение питания. Или отключение бесконечного цикла. Но как и в первом так и вовтором случае измерений не будет.

Edited by Rhime

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

Share this post


Link to post
Share on other sites
найти баг в коде который есть причиной постоянного вызова функции (relay)
мне не нужен триггер
У Вас противоречия :)

Вам, как раз, и нужен триггер :)

И найти Вам нужен не баг (его просто нет), а дополнить программу. Я написал каким образом дополнить. Не хотите слушать - дело Ваше.

Share this post


Link to post
Share on other sites

мне не нужен триггер. Вопрос - найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его

Постоянный вызов функции relay это не баг. Он вероятно заложен в программу специально, чтобы состояние реле точно соответствовало требованию контроллера. Вызов relay встроен через compare() вот отсюда:

// Прерывание от DS1307 ежесекундно
interrupt [EXT_INT1] void ext_int1_isr(void)
          { ..................................................
            compare(); // Сравнение температур
          }

Можно изменить функцию compare так, чтобы она вызывала relay только тогда, когда контроллер изменяет состояние реле или каждые полчаса согласно вашим требованиям. Но при этом может пострадать надежность работы регулятора, так как контроллер будет исправлять возможную ошибку работы реле не каждую секунду, а лишь через полчаса. Код может выглядеть так:

// Сравнение температур и выдача команды
//==============================================================
void compare (void)
        {static char RelayStatus;
         static int Time;
         Time++;
          if ((temp2-hyst)>=temp) // Желаемая тем-ра больше измеренной - вкл. реле
            {if((RelayStatus==0)||(Time>1800))
                {relay(1);
                 Time=0;
                 RelayStatus=1;
               };
            }
         else
            {if (temp>=(temp2+hyst)) // Желаемая тем-ра меньше измеренной - откл. реле
               {if((RelayStatus==1)||(Time>1800))
                   {relay(0);
                    Time=0;
                    RelayStatus=0;
                   };
                };
            };
}

Если я правильно понял Alex'а, RelayStatus исполняет роль того триггера, о котором он писал. Сразу говорю, что этот код не компилировался и досконально не проверялся и может служить лишь как подсказка, в каком направлении можно двигаться.

Edited by Sergey-Ufa

Share this post


Link to post
Share on other sites

Здравствуйте всем.У меня тут новая заморочка.Решил все-таки разобраться,что же произошло с Баскомом.Ведь раньше все работало,а потом как кто подменил.

Программатор USBASP,в меню программы он есть,она его поддерживает.Скорости для него выбраны в том же окошке 32 Кгц.При попытке программирования диодик на программаторе мигает,в микруху вроде все пишется,даже последующая сверка выдает,что все Ок,а прога не работает... Программирую используя Sinaprog 2.1.1.

Программатор простой и удобный.Хексовские файлы откомпилированной Баскомом проги шьет,но и они не работают.... :unknw:

Проргамма в Баскоме.Отмечено какие использовал кнопки

dZlO.th.jpg

Это что выдал компилятор

Vhfyp.th.jpg

И,наконец,та же прога в микропаскале.Хекс код работает на ура.

Qbjy.th.jpg

В чем дело? Может кто подскажет? Почему хексовские файлы баскома неработоспособны? Может где-то настройки барахлят? Баксом переустанавливал уже раза 4 и все попусту.Но ведь раньше работало! Он,правда,крякнутый,но раньше проблем не было.

Прошу прощения.Тут забарахлил старый фотохостинг,а с новым еще не освоился и получился конфуз.Исправляюсь...

8T71.jpg

JbW1v.jpg

Blz3b.jpg

Share this post


Link to post
Share on other sites

Доброго всем времени суток. Проблему с кодом решить не могу ,дело вот в чем, значение "n" должно прибавляться при достижении "hag"=360, который в свою очередь работает от таймера, а оно(значение n) считает только до 7 и почему то сбрасывается сам собой, вопрос: почему?

#include <avr/io.h>
#include <avr/interrupt.h>
int d=0;
int n=0;
volatile unsigned int hag = 0;
unsigned char cw_dir[]=
{
(0b00000001),// 0-45 // 0
(0b00000101),// 45-90 // 1
(0b00000100),// 90-135 // 2
(0b00000110),// 135-180 // 3
(0b00000010),// 180-225 // 4
(0b00001010),// 225-270 // 5
(0b00001000),// 270-315 // 6
(0b00001001) // 315-360 // 7
};// по часовой
ISR(TIMER0_OVF_vect)//OVF " срабатывает при переполнении" для оборотов
{
hag++;
if (hag>=360)
{
n++;
hag=0;
}
}
int main(void)
{
DDRB = 0b00111111; // PB0, PB1, PB2, PB3... - выходы
DDRD = 0b11111111; // инициализация D
ADMUX |=(1<<REFS0) // источн напряж.AVcc
	 |(0<<MUX3); // вход PORTC.0

GICR |= (1 << INT1)
 |(1 << INT0); // Разрешаем внешние прерывания
MCUCR|= (1 << ISC01); // Прерывание по заднему фронту INT0

TCCR0=0b00000011;// запуск таймера и предделитель на 64
TIMSK|=(1<<0);//прерывание в вектор при переполнении
sei();//глобально разрешаем прерывания
TCNT0=0b00000000;//запуск счетчика 0 с нуля
while(1)
{
//Hag();
vivod();
}
}
vivod()
{
PORTD=n;
}

объясните пожалуйста что не так. Заранее спасибо!

Edited by KRISS

Share this post


Link to post
Share on other sites

К сожалению не помогает, ни volatile ни static, пробовал менять тип данных, результата никакого. Это может быть связано с портом вывода??

Share this post


Link to post
Share on other sites

К сожалению не помогает, ни volatile ни static, пробовал менять тип данных, результата никакого. Это может быть связано с портом вывода??

у ПИКов может. у АВиРов не знаю,

а если значение в порт выводить в прерывании по условию? что-то меняется

Share this post


Link to post
Share on other sites

Вы имеете в виду так?

ISR(TIMER0_OVF_vect)//OVF  " срабатывает при переполнении" для оборотов
{
hag++;
if (hag>=360)
{
 n++;
 hag=0;
}
PORTD=n;
}

Если идти таким способом то но считает все равно до 7(стабильно) 8 цифра срабатывет но сразу же сбрасывается.

Share this post


Link to post
Share on other sites
ISR(TIMER0_OVF_vect)//OVF " срабатывает при переполнении" для оборотов
{
hag++;
if (hag>=360)
{
n++;
PORTD=n;
hag=0;
}

}

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By MirVsem
      Добрый день.
      Есть интересные модули ибп для слаботочки до 1А.
      m.aliexpress.ru/item/4000109380893.html
       По цене идеально подходит для зоопарка роутеров, IoT устройств... Переключение на резерв (туда-обратно) без просадки. Зарядка литиевой банки как положено, всякие защиты от перегрузки и прочее. Казалось бы все замечательно. 
      НО как всегда не без ложки дёгтя.
       Защита от переразрядки работает неадекватно. Хотя возможно это не сама защита, а повышающий модуль. На пороге ~3в у него срабатывает циклический перезапуск и так пока банка не просядет ниже 3в. Точно померять нечем.
      Из наблюдений. Проверил напряжение переключается с 12в на 9в и щелчки. Естественно нагрузка в это время дико насилуется (роутер свистит минут 5 пока полностю не отключится)
      Вопрос к гуру. Возможно ли что-то доработать в даном модуле чтобы исправить этот досадный баг?
    • By Юлия Михайлова
      Требуються люди умеющие работать с микроконтролерами esp 32 и stm32 , так же будет плюсом опыт работы с raspberry , требования опыт работы не мение 1,5 года , возраст не старше 35 лет , готовы взять на удаленную работу просьба отправлять резюме , и звонить по номеру +380 (68) 227 82 52
    • Guest Роман
      By Guest Роман
      Добрый день, форумчане. Такая задача. Хочу создать несколько устройств на светодиодах. Задача каждого в том, чтобы от движения (датчик вибрации, наклона) светодиод начинал моргать, переливаться и т.д. Подпитывается всё от батарейки, конечно же как можно меньших размеров (таблетка).
      Собственно я уже реализовал такое пробное устройство на ATtiny13, вибродатчике 18015 и батарейке CR1220. Всё работает, но хотелось бы это дело и удешевить и уменьшить в размерах, если это конечно же возможно. Особо в параметрах МК я не разбираюсь, но могу сказать что мне от неё точно нужно:
      1) Маленький размер
      2) Как минимум 1 канал ШИМ (а лучше 3, для переливания трёх светодиодов RGB)
      3) Память на 1Кб (программу для одного такого устройства приложу ниже, может её можно и сократить, но не факт что такую же, но на три диода получится ужать)
      4) Низкое потребление или возможность подключения режимов с низким потреблением.
      5) Работа от 3В. (от таблетки)
      6) Возможность программирования через Arduino UNO (но другие варианты тоже рассматриваю, просто Arduino уже есть)

      Повторюсь пока что нашел и использовал только ATtiny13, который меня вполне устроил, но он достаточно дорогой и в корпусе SOIC его найти достаточно проблематично. К тому же как мне показалось, он слишком хорош для такого проекта. Повторюсь, я чайник, и может есть какие-то более дешевые аналоги.

      Очень надеюсь на Вашу помощь. Заранее большое Вам спасибо!
      Прикладываю обещанный мною код:
      int vib = 4; int led = 0; long loopTime = 5000; void setup() { pinMode(led, OUTPUT); pinMode(vib, INPUT); } void loop() { if (digitalRead(vib)){ unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) { for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } digitalWrite(led, LOW); delay(600); } } }  
    • By Sambler
      У меня была похожая тема,  я решил проблему установив в include util/delay.h
      Но возникла еще одна ошибка, не могу понять, что оно хочет


      p.s. Я обещал, что предыдущая - последняя тема, но я ошибся, не думал, что тут 2 разные программы будут. В этот раз 100 процентов последняя тема и пойду сдавать работы Ы)

       

    • By LemonTV
      Есть картинка из сайта с фьюзами, есть программа avrdude_prog3.3 Как выставить правильно фьюзы чтобы не испортить мк? Незнаю как это сделать есть прямые и инверсные фьюзы, ГДЕ СТАВИТЬ ГАЛОЧКИ И КРУЖОЧЕК НА ПРЯМЫХ ИЛИ ИНВЕРСНЫХ?


  • Сообщения

    • Да вот ждём-с вынесения вердикта гаагского суда, а пока гадаем.
    • Не считайте их за дураков, спецов от ивл они тоже накупили. Тем более, что эти спецы стоят гораздо дешевле, чем те ивл, которые они купили.
    • На настоящих микросхемах маркировка  (белой краской) не стирается ацетоном хоть как замачивай. Еще можно проверить подав питание без установки на радиатор, на фейке нет "тепловушки" Вот уж несколько лет не могу нигде найти одну 1514а, заказывал на али несколько шт. _ сгорели сразу, покупал здесь на форуме, тож левак... На фотке справа оригинал (нужна еще одна) кстати у "санкенов" тож не стирается ацетоном маркировка
    • А что кого то ДНР сбили разве?
    • @Михайлик ,не,не наш выбор. Наш А то сортир даже непонятной конструкции-это неприемлимо
    • ты тупишь - один нолик потерял после запятой.
    • Экс-министр обороны ДНР прогнозирует, что ситуация с эпидемией коронавируса и введенным режимом карантина может резко снизить доходы россиян и привести к росту социального напряжения... и в итоге этот военный специалист по сбиванию ракетами бройлеров окажется на гаагских нарах.  
×
×
  • Create New...