Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

алгоритм ШИМ для atmega8

Отправлено BATCOH 15 марта 2007 г. 18:21


День Добрый!
Я вернулся))
Успел сделать следущее:
1.включил таймер счетчик Timer/Counter 0
2.задал частоту таймера без предделителя(частота внутренней синхронизации 1МГц)
3.алгоритм шим для 4 каналов:

void pow (unsigned char port0,unsigned char port1,unsigned char port2,unsigned char port3)
{
if ( TCNT0>=port0)PORTD.0 =0;
else PORTD.0 =1;
if ( TCNT0>=port1)PORTD.1 =0;
else PORTD.1 =1;
if ( TCNT0>=port2)PORTD.2 =0;
else PORTD.2 =1;
if ( TCNT0>=port3)PORTD.3 =0;
else PORTD.3 =1;
}

теперь если в main() написать
while(1)
{
pow(40,150,74,0);
}

то всё будет отлично.
НО!!!!!!!

мне нужно плавно гасить и зажигать св.диоды, причём за разное время.
написал функцию для плавного загорания и погасания 4х св.диодов поочерёдно:

void var1(void)
{
while(1)
{

for (a=0;a<=8;a++)
{
if(a==0)//первый светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (i,0,0,0);

}
}
if(a==1)//первый светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (i,0,0,0);
}
}
if(a==2)//второй светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,i,0,0);

}
}
if(a==3) //второй светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,i,0,0);
}

}
if(a==4) //третий светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,0,i,0);

}
}
if(a==5) //третий светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,0,i,0);
}

}
if(a==6) //четвертый светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,0,0,i);

}
}
if(a==7) //четвертый светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,0,0,i);
}

}

}
}
}

TMI - время задержки.
При TMI равным 1 или 2 всё работает нормально, но если пытаться увеличить это время, то становиться заметным мерцание св.диодов.
Я думаю что применение задержек delay_ms здесь не уместно.
Что вы можете посоветовать?

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru