Перейти к содержанию

8-Канальный Шим На Atmega8


Кирилл84

Рекомендуемые сообщения

Доброго времени суток уважаемые!

нужна помощь в реализации 8ми канального ШИМ на Atmega8.

Собственно первоначальная задача состоит в том что бы управлять 8 светиками к примеру на порту "B" идея заключаеться в следующем: 8 светиков и банальный бегущий огонь туда-сюда, но подвох в том что бы первый светик загорался на 100% и переходил на 2ой со 100% свечением, а первый при этом плавно затухал т.е. 75%, 3-ий светик 100% 2-ой 75% 1-ый 50% и т.д.

В простонародии "бегущий огонь со шлейфом"

За любую помощь буду очень благодарен!

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Если не сложно могли бы вы по подробнее рассказать о программном ШИМе?

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

что такое ШИМ знаете

программно:

for х= 0 to 25

led= 1: пауза Х ms ; светимся это время

led =0: пауза 25 - х ; это время не светимся

закончить цикл

т.е., чем больше цикл, тем дольше светится

вот реальный код

For Temp = 0 To 20 ' ЯРКОСТЬ нарастает

Led = 1 : Waitms Temp : Led = 0

Temp2 = 20 - Temp : Waitms Temp2

Next Temp

For Temp = 20 To 0 Step -1 ' ЯРКОСТЬ уменьшается

Led = 1 : Waitms Temp : Led = 0

Temp2 = 20 - Temp : Waitms Temp2

Next Temp

больше 25 не делать - глаза будут видеть мерцание!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что такое ШИМ я знаю.

Вот набросал тут за пару минут функцию на AVR Studio что то похожее на ваш пример

void PWM (unsigned char i)
{
 PORTB = 0x01;
_delay_ms(i);
 PORTB = 0x00;
 _delay_ms(255-i);
}

в принцепи тоже самое что и вы сказали. Я прав?

Испробывал в Протеусе вроде работает, но Протеус не отображает чёткого ШИМ на светике только на Пртотеусовском осц. показывает.

Решил на железе собрать, работает, но очень мерчцает сильно светик, подцепил щуп осц. и в правду частота слижком маленькая. Решил _delay_ms перевести в _delay_us вообще перестал шим работать, на графике в протеусе только пополам 50% фронт и 50% скважность

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Может я ошибаюсь но Александр предоставил великолепный код, но для ПЛИС. То есть? то что вы написали будет работать с только с одним светодиодом может стоит попробовать создать цикл и какую то фиксированную задержку в зависимости от того с какой яркостью переключать надо светодиод либо пропускать либо нет

while(1)

{

PORTB=0XFF;

if(x%2) //остаток от деления половина яркости

//тушим нужный порт

if(x%3) //

//тушим следующий порт

x++;

__delay_cycles(1000);

}

Ссылка на комментарий
Поделиться на другие сайты

Например на STM32F100C4 эту задачу реализовать элементарно (если знакомы с ARM), а вот несчастную атмелку прийдется помучать.

Иван Сусанин - первый полупроводник

Ссылка на комментарий
Поделиться на другие сайты

Не надо ее мучать, запустите таймер 0 на безконечный счет при переполнении включайте все светодиоды, а компораторами таймера делайте сравнение, при совпадении гасите св. диод на нужном выводе.

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

На 8-мь (или больше) каналов. Запускаешь таймер. В его прерывании наращиваешь переменную (цикл от 0 до Х по кругу). В главном цикле проверяешь состояние этой переменной и сравниваешь с параметром ШИМ для каждого канала. В зависимости от значения <> для каждого канала вкл/выкл линию порта. Никакой зависимости от задержек в теле программы не будет. Таймер должен генерировать прерывания как мимнимум 50*Х(шагов ШИМ).

Ссылка на комментарий
Поделиться на другие сайты

Геннадий, полностью согласен

Вариантов может быть масса

Да и мучать ничего не надо

К сожалению, сейчас "сесть подумать и сделать" всё чаще заменяется на "да ну! возьму гигагерцовый проц и он всё успеет ;)

Изменено пользователем Гость
Ссылка на комментарий
Поделиться на другие сайты

Извините что молчал, в командировке был!

Значит-ся так:

Многоуважаемый Генадий спасибо за помощь и подсказку с таймером/счётчиком, я сообственно о нём думал изначально, но ни как не мог его привязать к программе. Как сказал Александр Д.

К сожалению, сейчас "сесть подумать и сделать" всё чаще заменяется на "да ну! возьму гигагерцовый проц и он всё успеет

Это не ко мне! Вот я сел и подумал, и привязал таки таймер/счётчик_0 к программе.

korsaj

Не надо ее мучать, запустите таймер 0 на безконечный счет при переполнении включайте все светодиоды, а компораторами таймера делайте сравнение, при совпадении гасите св. диод на нужном выводе.

Вроде на таймере/счетчике_0 нет регистра сравнения? или я ошибаюсь?

Да и потом, мне не нужно включать весь порт, мне нужен бегущий огонь с плавным гашением (затуханием).

Так вот: посидев и подумав (поломав не мало голову) сотворил вот что:TIMER.rar

Не судите строго, что смог так сказать, то смог :( Писал на AVR Studio. Там правда программа не на 8 светодиодов, а на 2 пока, но суть понятна.

Но есть одно "НО" как теперь сделать имеено бегущий огонь с плавным затуханием?

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Так и "беги" теперь. Только не по линиям порта, а по значениям ШИМ. Сделай, для наглядности, в RAM 8 байт, в которые будешь заносить статус линии. Например, 0-не горит, 1-горит (максимальное значение ШИМ), 2-изменяемая яркость, затухание (переменное значение ШИМ). Сменишь статус ячеек и обрабатывай их соответственоо 0-минимум ШИМ, 1-максимум ШИМ, 2-уменьшай значение ШИМ с желаемой скоростью.

Ссылка на комментарий
Поделиться на другие сайты

Уважаемые, а как ШИМ передать через сдвиговый регистр 74HC595?

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Кирилл как делается 8-ми канальный ШИМ хорошо описано http://pickit2.ru/do...ты:бегущие.огни хотя проект для ПИКов , для АВиРов логика построения та же...

к по вопросу как передать ШИМ: когда вы изменяете значение выводов портаХ , фактически вы изменяете значение переменной портХ , ничего не мешает в место прота изменять состояние какой нибудь дополнительной переменной и значение этой переменной записывать в 595 как смотрим :http://cxem.net/mc/mc118.php

Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

что такое ШИМ знаете

программно:

for х= 0 to 25

led= 1: пауза Х ms ; светимся это время

led =0: пауза 25 - х ; это время не светимся

закончить цикл

т.е., чем больше цикл, тем дольше светится

вот реальный код

For Temp = 0 To 20 ' ЯРКОСТЬ нарастает

Led = 1 : Waitms Temp : Led = 0

Temp2 = 20 - Temp : Waitms Temp2

Next Temp

For Temp = 20 To 0 Step -1 ' ЯРКОСТЬ уменьшается

Led = 1 : Waitms Temp : Led = 0

Temp2 = 20 - Temp : Waitms Temp2

Next Temp

больше 25 не делать - глаза будут видеть мерцание!

Александр,подскажите пожалуйста,как организовать многоканальный шим на основе этого кода?

Ссылка на комментарий
Поделиться на другие сайты

Еще один вариант - побитовая модуляция, не помню как правильно называется. Это когда значение ШИМ считывается по одному биту, а ширина импульса пропорциональна номеру бита. Например, для 4-битового кода abcd (a,b,c,d - биты, 0 или 1) цикл будет равен aaaaaaaabbbbccd (8a,4b,2c,1d), я такое использовал для управления 10-ю RGB-светодиодами, 5 бит на цвет (кажется) оказалось достаточно. Правда напрямую использовать мою наработку не выйдет, там пришлось городить динамическую индикацию, из-за чего и ограничивал разрядность.

led.rar

Изменено пользователем COKPOWEHEU

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

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...