Отговори на тема  [ 3 мнения ] 
PWM CONTROL 
Автор Съобщение
Мнение PWM CONTROL
ZDRAVEITE QKO SE USUKAH NE6TO I IDEQ SI NQMA KAK DA STANE BEZ DA PREKUSVAM POREDICATA OT IMPULSI NA IZHODA :( IDEQTA MI E SLEDNATA ISKAM DA UPRAVLQVAM 3LED KANALA NA IZHODA 4REZ PWM KOITO SA NEZAVISIMI SUS "+" I "-" DA PROMENQM SILATA NE SVETENE NA OTDELNITE KANALI A OTDELNIQ KANAL IZBIRAM 4REZ "0" NA NQKOI PIN STAVA DUMA ZA 8051


Нед Фев 13, 2005 2:04 pm
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Дек 01, 2004 12:44 am
Мнения: 2811
Местоположение: София
Мнение Re: PWM CONTROL
Гост написа:
ZDRAVEITE QKO SE USUKAH NE6TO I IDEQ SI NQMA KAK DA STANE ....

Добре дошъл във форума! Само че хайде да опитаме нещо:
1. Това, дето си го написал да е на кирилица и ако може не само с главни букви.
2. Да се опиташ да обясниш точно какво искаш да направиш и какво не става в няколко изречения (не само с едно).
3. Ние да се опитаме да разберем проблема ти и да отговорим.
Става ли?


Нед Фев 13, 2005 4:04 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Първо не е лошо д шиещ на кирилица, или най малкото не смао с големи букви.
После, какво точно те притеснява не разбирам. Настройваш си единия таймер да ти генерира прекъсване, да речем на всяка 1 ms. като влезеш в прекъсването инкрементираш един таймер, да речем pwm_time ...ето така
if(pwm_time<98)
{
pwm_time++ ;
}
else
{
pwm_time=0 ;
out_1=1;
out_2=1;
out_3 =1;

if(pwm_time>duty_1)
{
out_1=0;
}
if(pwm_time>duty_2)
{
out_2=0;
}
if(pwm_time>duty_3)
{
out_3=0;
}

}
kato out_1=1 e komandata s koiato wdigash bit ot izhoda w 1-ca

a samata programa ti e :
while(1)
{
if(in_1)
{
if(duty_1>99)
{
duty_1=100;
}
else
{
duty_1 ++;
}
delay_ms(50);
}
f(in_2)
{
if(duty_1<1)
{
duty_1=0;
}
else
{
duty_1 --;
}
delay_ms(50);
}
.......
.......

}

така, в прекъсването какво правиш, инкрементираш един брояч, pwm_time, който го инкрементираш от 1 до 100, това ти дава стъпката на регулиране от 0-100, като в случая PWM-а е с честота 10 Hz (100 стъпки по 1 ms). После имаш 3 променливи, duty_1, duty_2, duty_3 които ти дават запълването за всеки канал. Когато pwm_time стане по голямо от съответната променлива, изхода на канала става 0. Когато брояча pwm_time стигне 100 се установява отново в 0, като при това всички изходи ставт 1.
Това ти реализира PWM .. е с малки отмествания м-у трите канала но за светодиода това едва ли има голиамо значение.

в main върртиш един цикъл, в който проверяваш има ли натиснат бутон, в случая in_1 и in_2, като първото е up второто down за канал 1. Ако откриеш натиснат бутон проверяваш променливата,ако не е с гранична стойност я инкрементираш, или декрементираш, след това чакаш 50 ms ... т.е. ако натиснесх бутона всеки 50 мс ще променят стойноста на запълване с 1.
Това е разбира се най-елементарното решение, не е много добро бих реализирал по друг начин бутоните но те са без значение, нали те интересуваше PWM-а .. а и не ми се обеснява сега другата реализация.


}


Нед Фев 13, 2005 4:12 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: jordan-bg и 9 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни