Среда, 24.04.2024, 01:12
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Делаем плавную регулировку яркости на ШИМ (PWM), ATMega16
Давайте сделаем плавную цифровую регулировку яркости светодиода. Для плавной регулировки используем ШИМ. Широтно-импульсная модуляция (ШИМ, англ. Pulse-width modulation (PWM)).

Для этого запустим Code Vision AVR, в многих микроконтроллерах есть встроенный ШИМ, выберем следующие установки:


Для реализации ШИМ*а используем Timer 0

Вот подчищаем код и дописываем:


#include <mega16.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=P State0=P 
PORTA=0x03;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x08;



// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6B;
TCNT0=0x00;
OCR0=0x00;

while (1)
  {
  // Place your code here
  if((PINA.0==0)&(OCR0!=0xff)) // увеличивать пока не достигло максиума
  {
  delay_ms(10); // задержка 10 мс.
  OCR0+=1; //увеличиваем заполнение
  }
  if((PINA.1==0)&(OCR0!=0x00)) // уменьшать пока не достигло миниума
  {
  delay_ms(10); // задержка 10 мс.
  OCR0-=1; //уменьшаем заполнение
  }
   
 };
   
}

Собираем схему:

Все файлы проекта в закладке «Файлы».

Огромная благодарность KDAlex'y)))

Категория: Учимся работать с AVR | Добавил: my-avr (08.02.2009)
Просмотров: 34753 | Комментарии: 19 | Рейтинг: 4.0/6 |
Всего комментариев: 191 2 »
19 Антон  
0
Куплю трех кнопочный регулятор яркости светодиодов 12 вольт. пишите на почту toni-van@ya.ru

17 George  
1
Спасибо за статью.
Есть вопросик как записывать в EEPROM состояние яркости светодиода, что-бы при отключении питания яркость не сбивалась.

16 Сергей  
0
1. Конденсатор должен быть керамический (у Вас электролит).
2. Резистор должен быть включен последовательно, между С1 и U1, так как когда он(конденсатор) разряжен, можно представить, что вместо конденсатора линия, закороченная на корпус, следовательно МК может выйти из строя.
3. Много раз убеждался на собственном опыте: Даже если в эмуляторе схема работает как надо, не факт что в реальности не получатся угли =)

15 master3763  
0
Скажите пожалуйста как этот код можно переделать для atmega8 ?
Делаю вот так,

#include <mega8.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{

PORTC=0x03; // Vystavliaem 3 pervyx bita porta C na 1 (vmesto porta A kak u Atmega16)
DDRC=0x00; // Vystavliaem port C kak vxod

PORTB=0x00; // Vystavliaem vse bity porta B na 0
DDRB=0x08; // Vystavliaem B3 kak vyxod ostalnye kak vxod

PORTD=0x00; // Vystavliaem vse bity porta D na 0
DDRD=0x00; // Vystavliaem port C kak vxod

// Nastroyjki ? Kakie nastrojki ?
TCCR0=0x6B;
TCNT0=0x00;
OCR2=0x00;

while (1)
{
// Place your code here
if((PINC.0==0)&(OCR2!=0xff)) //
{
delay_ms(10); //
OCR2+=1; //
}
if((PINC.1==0)&(OCR2!=0x00)) //
{
delay_ms(10); //
OCR2-=1; //
}

};

}

Некак не получается, объязните какую роль играют вот эти строчки ?

TCCR0=0x6B;
TCNT0=0x00;
OCR2=0x00;

14 KoLLinZ  
0
конденсатор порядка 47ммкФ надо, но не больше 1000... иногда 470мкФ много,
а вот резистор включен не правильно :)

13 Сергей  
0
фузы какие?

12 Денис  
0
а как сделать для 30 светиков к примеру. Это я освоил, и дале передлал, убрал кнопки теперь плавно моргает (плавно загорается и тухнет)

10 Сергей  
0
Все бы хорошо на твоем сайте только почему в таком важном примере нету обработки прерывания, без которой код не работает? )

11 HiSER  
0
Это просто макет, который показывает как использовать PWM

9 KAO  
0
Я новичок, обьясните мне подалуйста эту строчку
if((PINA.0==0)&(OCR0!=0xff))
и эту
if((PINA.1==0)&(OCR0!=0x00))
smile

18 Ipmax  
0
if((PINA.0==0)&(OCR0!=0xff)) - Если КОНТАКТ(пин).0 будет равен нулю то значение OCR0 увеличивать до максимума 

if((PINA.1==0)&(OCR0!=0x00)) - Если КОНТАКТ(пин).1 будет равен нулю то значение OCR0 уменьшать до минимума

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

8 SpSpider  
0
хех, я на мегу8 ШИМ сделал)
и НЕ НАДО КОНДЕНСАТОРОВ!!
Люди!! ну мы же МК используем!! ну что вы как дети просто..
подумайте, что конденсатор делает?? а разве программно это не реализовать?)))
в следующих уроках хоть все уже с этим ясно))

1-10 11-17
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 863
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz