Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/82: Рейтинг темы: голосов - 82, средняя оценка - 4.83
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
1

BAM. Управление яркостью светодиодов.

23.03.2013, 18:57. Просмотров 14933. Ответов 27
Метки нет (Все метки)

Подкиньте, пожалуйста идей, как лучше сделать. Хочу чтобы параллельно обрабатывалось какое-то кол-во светодиодов. Скажем пусть пока будут 8 штук. В идеале, разбросанные по разным портам. Одним или все портом пока получилось. А вот чтобы несколько,
пока в затруднениях. Сразу хочу сказать, в Си слаб, пишу на асме. Отвечать в алгоритмах.
Что пока получилось: видео

Итак, почему я выбрал BAM. Потому что вроде как требует меньше ресурсов. Как я сделал на данный момент. На видео видно, что работает сразу весь порт. Тут неважно, один светодиод или весь порт. Пока я разбирался как BAM работает. Вроде несложно. Алгоритм у меня следующий получился:
PROC_BAM_CNT_1 - Счетчик сдвигов. Инициализируется в основном цикле числом 7, так как мы закидываем в регистр сравнения нижеупомянутую переменную.

BAM_OCR_VOT - Переменная загружаемая в регистр сравнения восьмибитного таймера 0 или 2. В основном цикле в регистр сравнения закидывается 0b10000000, в переменную закидываем 0b01000000. В прерывании эта переменная закидывается в регистр сравнения и сдвигается вправо.

Для регулировки яркости написал пока простую таблицу от 2 до 255 и обратно до 1.
PROC_BAM_VOT - В этой переменной обрабатываемое на данный момент значение яркости. В основном цикле считали из таблицы значение, в нижеупомянутую переменную закинули указатель на следующее значение. По старшему биту проверили, горит\не горит светодиод. выставили пин, сдвинули влево закинули в переменную. В прерывании как только прошли все 8 битов BAM, cчитывается из таблицы следующее значение.

POINT_BAM_VOT (двухбайтная переменная) - Указатель на следующее значение из таблицы.

Ну а дальше все просто. В основном цикле мы уже завели старшее значение BAM. В прерывании обрабатываются остальные 7 битов BAM, счетчик обнулился, считываем новое значение яркости. Дальше идет по 8 раз.

Ну а на таблице для нескольких светодиодов я споткнулся. Прикидываю как оптимизировать таблицу.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 18:57
Ответы с готовыми решениями:

Управление яркостью светодиодов бинарной модуляцией [AVR studio]
Здравствуйте, нужно реализовать эффект на светодиодах с изменением их яркости. Эффект такой:самый...

Управление яркостью лампочки
Здравствуйте. Есть контроллер, который через оптопару и симистор будет управлять яркостью обычной...

Управление яркостью светодиода двумя кнопками на Atmega8
задача была такая но проверить сейчас не на чем может кто посмотреть и сказать правильно я написал...

ATMega16 (ASM). Плавное управление яркостью, генерация звука и отображение на семисегментнике
Всем привет!!! помогите пож-та. у меня такая проблема. необходимо объединить 3 пункта программы и...

Последовательное плавное управление яркостью светодиодов
Нужно написать программку на Atmega48 в CodevisionAVR Используя PORTD 0 1 2 С начало загорается...

27
koyodzo
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 122
25.03.2013, 01:55 21
Перечитал Вашу реализацию... Сама реализация простая, но громоздкая по используемой памяти, с гибкостью тоже не всё ОК
Я говорил о том, что для получения постоянной яркости 8 светодиодов, выбираемой произвольно для каждого из возможных 256 уровней по-минимуму нужно 8 байт для хранения текущей яркости (можно было бы описать без использования конкретных цифр, более абстрактно, но ТС лучше понимает на конкретных примерах). И выше описал свой вариант, где отображение (обеспечение требуемой яркости свечения) происходит независимо от собственно изменения этой яркости. А Ваш вариант предполагает "развёрнутый цикл отображения" и требует соответственно намного большего количества данных. Да, конечно разворачивать можно "на лету" и в таком варианте тоже, но код будет тяготеть к "спагетти".
Понимать сложно возможно потому, что нужно перейти от категорий ассемблера ("регистр", "ячейка", "состояние пина" ...) к более крупным категориям, как "задача", "объект/структура", "текущая яркость". Каждое из этих понятий может быть описано в понятиях ассемблера, но придётся очень много писать, да и алгоритмы реализации каждого из них тоже могут быть разными
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
25.03.2013, 11:12 22
Цитата Сообщение от dosykus_2
http://www.batsocks.co.uk/readme/p_art_bcm.htm
Вам не надоело велосипед изобретать ?
Уже готовое есть по ссылке...
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
25.03.2013, 15:32 23
Цитата Сообщение от dosykus_2
Вам не надоело велосипед изобретать ?
Уже готовое есть по ссылке...
Может сначала тему почитаем, поймем о чём она , ссылки посмотрим из первого поста, а уж потом писать будем.
Кстати - то что по ссылке у трех участвующих в разговоре есть в формате pdf и раньше чем давали ссылку
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
25.03.2013, 20:19 24
YTYOUT. Выкладываю табличку. Вдруг пригодится...
Сервис\Надстройки\Пакет анализа. Макросы включи.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
25.03.2013, 21:37 25
Спасибо!!
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
30.03.2013, 20:58 26
Цитата Сообщение от YTYOUT
Я с тебя потом кодом возьму, если вдруг понадобиться. :) Успехов!
YTYOUT! Ты там код просил? Держи, народ! :) Пока решение в лоб. Табличный метод. Но не как YTYOUT говорил, а ближе к тому как Koyodza объяснял.
Взамен давайте обсудим как сделать следующее:
Пишем такой список-инструкции что делать:
Зажечь, потушить, плавно зажечь, плавно погасить. С параметрами, скажем 8 светодиод в течении 500 мс плавно зажечь\погасить. Тут я еще плохо представляю, как разбить значение яркости на 500 мс.
В общем, присоединяйтесь! :)
В архиве проект. Асм. AVR_Studyo 4.19. Файл Excel. Конструктор эффектов.
Видео
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
30.03.2013, 21:18 27
Скачал. Буду прикидывать. От комметов в коде аж в глазах рябит. :)

http://www.terraitistronica.ru/news_postup.php?ID=2706 Глянь пока, подумай и ответь в личку. ASM там лёгкий и как "родной".
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
30.03.2013, 22:52 28
Цитата Сообщение от YTYOUT
От комметов в коде аж в глазах рябит. :)
Поправил. Сразу говорю, я комменты практически никогда не пишу. Стараюсь понятнее писать. Да и на комменты уходит много времени. А я работаю. И эта программа на данный момент делается на энтузиазме. А свободного времени мало.
Что-либо мутить если и буду с этим проектом, то позже.
0
30.03.2013, 22:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2013, 22:52

Управление яркостью через триммер и АЦП
Суть задания-используя переменный резистор стенда(подключенный к ацп) управлять яркостью...

ATmega48. Управление режимами светодиодов
Подскажите люди добрые ..... где тут прописана кнопка изменение режимов света диодов ??? Где это...

Управление блоком светодиодов (Code Vision AVR)
Имеется следующее задание: Запрограммировать мигание блоков светодиодов с портом B в Code Vision...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru