Первый опыт с аттиньками, поэтому прошу понимания у всех.
Задание: 1) При включении кнопки зажигается фонарик на полную мощность (кнопка фиксируемая) - 1 подаем на PB0 2) При полунажатии на кнопку должен переключиться режим, экономящий яркость - 1-ки подаем на PB0 и PB1 3) При повторном полунажатии фонарик должен вернуться в первоначальный режим (вот здесь и есть проблема, пока что всеми попытками переключение только в одну сторону) 4) Раз в минуту контролируется уровень батареи, подключенной к PB4 (он же ADC2), суть в считывании уровней АЦП (эта часть вроде как работает), при достижении определенных уровней, зажигаем синий или красный светодиоды.
Переключение режимов так же смотрится по уровню ADC2, при полунажатии происходит падение уровня, которое должно фиксироваться. Собрано на резистивном делителе с номиналами 30 кОм и 10 кОм. (Схема пинов во вложении)
Код:
#include "main.h" // < All settings are here #include <util/delay.h> #include <avr/io.h> #include <avr/sleep.h> #include <avr/interrupt.h> #include <stdbool.h> // bool in C99 // Яркость нагрузки, 0 - выключен, 255 - максимальная (ШИМ) u8 rate; // Направление изменения яркости нагрузки, 1 - прибавить ШИМ, 0 - убавить ШИМ u8 rate_dir = 0; // Состояние заднего светодиода LED2 bool led_state = false; int count = 0; uint8_t countMode = 0; //????? ?????????? ?????? uint8_t reqChangeMode = 0; //????, ???????????? ????? ????????? ???????? ????? volatile _Bool direction = 0; // Направление бегущего огонька u16 x;
в этом месте while (adc_raw < BAT_WARNING_BLUE) { PORTB = 0b00000111; у тебя прошивка просто повесится и никуда дальше не пойдет. убери строку while (adc_raw < BAT_WARNING_BLUE) { и закрывающую ее скобку. оставь также, как сделано в других if. дальше я смотреть не стал. там тоже может быть куча ошибок.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, та ваша подсказка помогла исправить ту проблему, спасибо большое. Но появилась новая, не поможете еще случайно?
В этом кусочке функции bat_check надо добавить мигание раз в 3 секунды примерно.
Код:
if (adc_raw < BAT_WARNING_RED) { PORTB = 0b00001001; }
А в этом кусочке тоже мигание, но раз в секунду.
Код:
if (adc_raw < BAT_SHUTDOWN) PORTB = 0b00001100;
Если делать с обычными delay, то прога зацикливается на этом моменте и не выводится. А с прерываниями тут я еще не такой продвинутый пользователь, как тут лучше всего поступить?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Dimon456, да просто гавно кетайское у меня такая стояла сначала из 20нажатий тока 12-14 -включали ее... пришла в кетаянском приборе с завода когда из 20 нажатий она стала срабатывать 4-5 раз терпение лопнуло и я взялся за паяло и заменил гавно брендом... и забыл про это... конечно можноб наехать на шопик по гарантии на предмент ремонта за их щет но ждать по полгода замены ну нах...
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
во-первых, я не пишу на Си для МК, хотя и понимаю, что там написано. во-вторых, у меня сейчас нет времени составлять пример. в-третьих, есть в этом разделе тема "Таймеры/счётчики в AVR". скорее всего там достаточно примеров использования таймеров и прерываний для них.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Первый опыт с аттиньками, поэтому прошу понимания у всех.
Задание: 1) При включении кнопки зажигается фонарик на полную мощность (кнопка фиксируемая) - 1 подаем на PB0 2) При полунажатии на кнопку должен переключиться режим, экономящий яркость - 1-ки подаем на PB0 и PB1 3) При повторном полунажатии фонарик должен вернуться в первоначальный режим (вот здесь и есть проблема, пока что всеми попытками переключение только в одну сторону) 4) Раз в минуту контролируется уровень батареи, подключенной к PB4 (он же ADC2), суть в считывании уровней АЦП (эта часть вроде как работает), при достижении определенных уровней, зажигаем синий или красный светодиоды.
Переключение режимов так же смотрится по уровню ADC2, при полунажатии происходит падение уровня, которое должно фиксироваться. Собрано на резистивном делителе с номиналами 30 кОм и 10 кОм. (Схема пинов во вложении)
Не понял, что за кнопка такая… потому использовал распространённый вариант – кнопка без фиксации. Питание МК подразумевается от двух батареек ААА. Как понял алгоритм, так и написал. А именно: 1. При удержании нажатой кнопки более 3 сек. – на выводе РВ0 появляется лог 1. 2. При лог 1 на выводе РВ0, последующими короткими нажатиями кнопки (менее 3 сек) осуществляется управление выводом РВ1 – режим триггера. При первом коротком нажатии появляется лог 1. При повторном коротком нажатии лог 1 сбрасывается в 0. 3. При лог 1 на выводе РВ0 и удержании нажатой кнопки более 3 сек. – на выводе РВ0 лог 1 сбрасывается в 0. 4. Напряжение питания измеряется раз в минуту. 5. При снижении напряжения примерно ниже 2,6 В, начнёт мигать жёлтый светодиод (раз в три сек.) 6. При снижении напряжения ниже 2 В, начнёт мигать красный светодиод (раз в сек.).
Схема:
Прошивка:
Вложение:
LED_Driver.hex
МК тактируется на заводских установках (1,2 МГц). Компаратор отключил.
Название темы LED Driver на Attiny13A, ну так создайте LED Driver - стабилизатор тока светодиодов.
Потребуется компаратор, к сожаления у внутреннего компаратора AVR вывод сравнения не выведен наружу, этот вывод выведен наружу только в PIC, поэтому внешний. Пока батарея не сядет до какого-то значения световой поток будет постоянен.
Самсусамыч, у мну есть вот такой фонарикСпойлерпосле некоторого срока эксплуатации родной акб приказал долго жить, пришлось менять. Так как такого акб не найдешь, был заменен на акб от сотового телефона, +добавлена для ограничения тока заряда такая платкаСпойлерестественно зарядка не от сети, а от шнурка.
Я хочу сказать следующее, толку от вашего указателя заряда акб - ноль. Акб еще не разредился до такого напряжения, что бы контроллер заряда, встроенный в саму акб, отключил акб, а фонарик светит уже тускло. За то при полном заряде акб слишком большой ток идет на светодиоды - они имеют свойство быстро выходить из строя.
Самсусамыч писал(а):
Вы читали первый пост ТС?
я так и не добился, что же за кнопка такая? если как на фотоаппарате - так там два контакта.
Самсусамыч писал(а):
Или Вам не важно какое устройство необходимо ТС?
Название темы LED Driver, пишите тогда - LED Выключатель.
Так как такого акб не найдешь, был заменен на акб от сотового телефона, +добавлена для ограничения тока заряда такая платка...
Я хочу сказать следующее, толку от вашего указателя заряда акб - ноль.
Касаемо Вашей схемы возможно и так, а вот что касаемо схемы ТС, возможно и нет. В любом случае это будет оценивать ТС, а не Вы. Или Вы экстрасенс? Знаете чем и как ТС будет управлять? А если ТС подобным устройством планирует управлять уже готовым токовым стабилизатором для светодиодов? Не стоит бежать впереди паровоза… нужно дождаться ответа ТС, и тогда будет ясно...
Цитата:
Акб еще не разредился до такого напряжения, что бы контроллер заряда, встроенный в саму акб, отключил акб, а фонарик светит уже тускло. За то при полном заряде акб слишком большой ток идет на светодиоды - они имеют свойство быстро выходить из строя.
Правильно ли я понял, что Вы описываете вариант переделанный схемы своего фонарика? Тогда зачем Вы недостатки своей схемы пытаетесь переложить на схему ТС, которую ни разу не видели? Это как-то выглядит странно, если не сказать глупо.
Цитата:
Название темы LED Driver, пишите тогда - LED Выключатель.
Что за манера придираться к словам не понимая их значения? Драйвер в электронике переводится как устройство (или схема) управления... так, что в названии ТС нет противоречий. А то что Вы себе напридумывали свои определения, так это никому не интересно.
{я так и не добился, что же за кнопка такая? } Я думаю, что это кнопка с фиксацией, только «полунажатие» это когда контакты уже замкнулись, но ещё не зафиксировались. При отпускании контакты размыкаются.
_________________ Я всё-всё узнAю и стану профессором.
Так, если кто-то еще смотрит эту тему, дошла я до такого варианта. В итоге при постоянном опросе АЦП на таком участке if (adc_raw < BAT_SHUTDOWN) ловились помехи, в итоге работало некорректно. Сделала опрос заряда батареи раз в 100 циклов, в итоге теперь не реагирует на timer1 и timer2 для режимов с миганием, а мигает с периодом этих 100 циклов на уровне примерно 0.65 В. Как поправить, чтобы реагировало на все счетчики?
Код:
#ifndef MAIN_H_ #define MAIN_H_
// Frequency definition for gcc. Do not forget to set proper fuses. // Определение частоты для компилятора. Не забудь выставить частоту фьюзами. #define F_CPU 1200000UL // Attiny13 1.2MHz / PWM 4.6 KHz / CKDIV8 = 0 //#define F_CPU 9600000UL // Attiny13 9.6MHz / PWM 36.8 KHz / CKDIV8 = 1
А какая у вас проблема с таймерами? Единственное, в коментарии написано // 001 - тактовый генератор CLK/1 (скорость шим = CLK/256 = 4687.5 Гц) а реально сконфигурирован на clkIO/64, T=53.(3)us.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения