Вообщем давно хотел сделать шим регулятор, но сам не особо разбираюсь с микроконтроллерами, но вот в интерене нашел что то похожее на то что я хотел и решил переделать это под нужное мне дело. Но только не все понимаю, вот и решил попросить помощи здесь.
автор так же написал что программа не совсем рабочая. Ну я хочу сделать так чтобы шим управлял яркостью всего лишь одного светодиода, но в двух режимах и чтобы настройки яркости сохранялись при отключении питания. т.е схемка примерно получается такая
Т.е. принцип работы такой при включении питания загорается диод и с помощью энкодера регулируется яркость, при нажатии на энкодер значение записывается, но при замыкании контакта на sb2 переходит в другой режим и тут уже своя яркость и так же настраивается и записывается, при размыкании снова переходит в начальный режим, вот как то так. Начал пытаться править код вот что пока получается
Код:
// Принцип работы энкодера. Управляем светодиодом с помощью энкодера #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/eeprom.h;
Обязательно на энкодере и обязательно не на CVAVR? Если нужен конкретно работающий девайс, то можно было бы сделать на ATtiny13(Мега8 уж слишком жирная для такого дела) и потенциометре, оцифровывающимся АЦП... Ну или на кнопках на худой конец. Хотя, если нужен конкретно аппарат, то можно и на tl494, и на генераторе пилы на трех транзисторах и компараторе.
Помочь могу только с кодом под Codevision(под энкодер тоже), за помощью с тем ужасом на кральях ночи из шапки обращайся к юзеру "YS", он у нас фанат пацановских компиляторов с вырвиглазным кодом.
_________________ I'm on a huge rock, flying through space!
А обязательно на программном ШИМе городить, может аппаратные все же удобнее? С энкодером дела не имел поэтому именно в его опросе помочь не могу, разве что идеей. Хранить и изменять можно только текущую мощность (в случае аппаратного ШИМа прямо в регистре OCRxy), по нажатию кнопки сохранять эту мощность в ПЗУ, изменять адрес и загружать оттуда другую. Грубо говоря, так
Код:
#define addr1 0x0000 //адрес первой программы #define addr2 0x0002 //адрес второй программы
unsigned char modeaddr=addr1;
OnChangeValue(){ //событие при изменении яркости OCRxy=value; } OnKeyPress{ //событие при нажатии на кноку eeprom_write_word(modeaddr00000,OCRxy); if(modeaddr==addr1) modeaddr=addr2; else modeaddr=addr1; OCRxy=eeprom_read_word(modeaddr); }
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Когда то пробовал attiny тоже что то подобное делал, мне показалось что ним все как то по сложнее. Да именно на энкодоре нужно, потенциометр это совсем не то, а по поводу шима городить начал на программном потому что изначально эту схемку делали на нем, я просто решил под себя переделать
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
По схеме предложение: Сдвинуть виры с 2.3.4 ног на 5.6.11
_________________ Разработал: -BLDC -ФУОЗ/МПСЗ -SMART BMS -ECU/EDC на STM32F4(43%)+CPLD(57%) -Моноинжектор на ATSAMD20G16 -контроллер эффектов для RGB LED ленты -умные часы/обратный счет/секундомер -устройство измерения емкости АКБ
По первой ссылке есть подробное описание того, как преобразовать угол поворота энкодера в значение переменной, с примером. По второй ссылке подробное руководство по настройке ШИМа, с демопрограммой. Вам осталось только совместить их - в демопрограмме по второй ссылке заменить обработку переменной ШИМ для плавного мигания на опрос энкодера с присвоением полученного с него значения регистру ШИМа.
Или и код за Вас написать?
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
YS Я уже просмотрел кучу подобных программ в том числе и ваши ссылки, где то есть одно где то другое, но чтобы все что нужно мне совместить нужно разбираться в этом поболее чем я, повторяюсь но именно поэтому я здесь и написал чтобы хоть кто нибудь помог а не показал как пользоваться гуглом, я специально выложил код который я уже попытался хоть как то видоизменить под свои нужды, но пока никто и нигде не подсказал иду я хотя бы в правильном направлении или нет.
Naman_S , вам ведь уже предложили сделать все это дело на аппаратном уровне. и еще вот это
Цитата:
Ну я хочу сделать так чтобы шим управлял яркостью всего лишь одного светодиода,
не слишком совпадает со схемой, которую вы предоставили. И вот этим кодом.
Код:
volatile char pwm_counter,pwm_r,pwm_g,pwm_b,
Прежде всего внесите ясность в техническое задание, и уже потом можно будет разбирать код и вообще делать что либо. Лично мне мало интересно разбираться с кодом, который не соответствует формулировке задания. Это аналогично написанию нового кода, только дольше.
Вы посмотрели верхнюю часть моего поста, там я указал что я нашел в интернете, а дальше я уже добавил схему которую я перерисовал немного под то что мне нужно, и строку кода Вы посмотрели тоже из того что было изначально, я оставил только. pwm_r и pwm_g, хотя уже понимаю что зря, думаю нужно оставить только pwm_r и изменять двух. разных режимах, только не знаю как это реализовать, а по поводу программного и аппаратного уровня тоже уже писал, что мне без разницы, я просто использую то что уже нашел в интернете
Последний раз редактировалось Аlex Вт сен 03, 2013 21:34:56, всего редактировалось 2 раз(а).
Начал пытаться править код вот что пока получается Код: // Принцип работы энкодера. Управляем светодиодом с помощью энкодера #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/eeprom.h;
Или у вас еще до этого места руки не дошли?(вроде самое начало текста и с этого должно начинаться написание программы.) Желательно показывать действующий проект,в котором вы работаете, а не то что якобы уже поменяли, а на самом деле все как было в прототипе так и показываете.
Если всего лишь один светодиод, то есть уже прекрасная тема c примером рабочим для tiny 13 и нужно всего лишь прикрутить туда енкодер, если так нужно. Кнопки очень легко в два режима назначить.
vitalik_1984 это да мой косяк, просмотрел, но думаю это тот случай когда эта ошибка ни на что не влияет. И хотел бы попросить пожалуйста не нужно всяких ссылок на разные проекты, где можно что то взять или уже к тому прикрутить что то, если бы для меня это было все так просто я бы не стал создавать тему. Мне именно нужна помощь людей разбирающихся. в коде, потому что проектов я просмотрел кучу, но в большинстве отсутствует запись переменных в память, а это основная моя загвоздка. Грубо говоря моя программа должна состоять из двух циклов, один из которых это когда нажата кнопка и это я еще более менее могу сделать, но вот с парой вопросов так никак и не разберусь: 1 это то что в изначальном коде три переменных со значением яркости и каждая выводится на свой порт вывода, мне же на сколько я понимаю нужно оставить только одну переменную и брать ее значение из памяти. Пока писал ответ дотумкал как это примерно сделать, но все таки остался тогда вопрос правильно ли в коде описан опрос энкодера и работа шим?
Я не разбирался с кодом, хотел, чтобы вы самостоятельно что то сказали что вам нужно и возможно выложили более свежий проект. Желательно дополнив проектом протеуса. И не нужно отказываться читать разные примеры. иногда они составляют основу кода. Не нужно зацикливаться на одном варианте.
На скорую руку сваял в CVAVR для tiny13. Аппаратный шим, обработка энкодера по прерыванию.
только не tiny13, по двум причинам первая это потому что уже все куплено для схемы на меги и вторая это потому что при предыдущем опыте с мегой я просто замучался, возможно тогда брак попался или он сам по себе такой, но я замучался его прошивать.
код легко портировать на мегу. Немного инициализацию изменить. Просто для таких целей мегу использовать слишком шикарно. Это как асфальтоукладчиком тесто на пельмени раскатывать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения