roboforum.ru

Технический форум по робототехнике.

Програмный ШИМ на С. Текст программы.

Програмный ШИМ на С. Текст программы.

Hamileon » 11 май 2006, 18:53

Програмный ШИМ на С. Что за МК видно ниже а также частоту ШИМ
Диод дополнительно подключен для себя. Захотелось вдеть еще одну дорожку и ее частоту для проверки верности расчета делителя.

Успехов. Хотя на своей шкуре испытал что лучше. Именно начать самому ну а потом уже можно подглядывать.

Код: Выделить всёРазвернуть
#include <90s2313.h>  

int pwm_t = 0; \\счетчик
int scv = 10; // Скважность  - Мощность в процентах x 100. Те 10 это 100 процентов соотведственно 1 это 10%.

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{            

PORTB.3 = 0;    Выключаем светодиод Те просто в окне будет выключатся включатся с частотой 2KHZ

if (pwm_t == 10) pwm_t = 0;    Если нужно разьяснить это напишите
if (pwm_t == 0 ) PORTB.2 = 1;  
if (pwm_t >= scv) PORTB.2 = 0;  
pwm_t++;

 TCNT0 = 0x06; //Значение от которого возобновляется счет. ЭТО НЕ КАКИМ БОКОМ НЕ ОТНОСИТЯ К ШИМ. ЭТО РАСЧЕТНАЯ ЧАСТЬ ЧТОБЫ ПОЛУЧИТЬ ЗАВЕТНУЮ ЧАСТОТУ 2. ТЕ Делитиель поделил итд но остались копейки то есть не ровно 2. И тут мы решаем что давайте всегда считать не от 0 до 255 а от 0x06 и в этом случае частота будет ровно 2.
}        
     
void main(void) {
//TIMER0 initialize - prescale:8
// desired value: 2KHz
// actual value:  2,000KHz (0,0%)

TCCR0 = 0x00; //stop timer
TCNT0 = 0x06; //set count
TCCR0 = 0x02; //start timer
MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x02;    
// Global enable interrupts
#asm("sei")      

   
          DDRB.2=1;  \\Это моторка )
          DDRB.3=1;    \\Просто светодиод
       
         
          while(1) {    
   
                 PORTB.3 = 1; \\Просто включаем светодиод он к ШИМ никакого отношения не имеет просто мне так захотелось
          }
}

Hamileon » 11 май 2006, 19:06

PS: Если будете тестить в VM LABe то поставте мощность не 10 те 100%
а меньше иначе можете перепугатся что нет ни каких перепадов ничего недвигается итд  :P  просто не забывайте что 100% это прямая.

avr123.nm.ru » 11 май 2006, 20:21

только скважность это величина противоположная величине ШИМ !  смотрите задачу 11.

и посмотрите там же как оформлять многострочный комментарий.

Какой алгоритм работы задержки на кнопку ?

Hamileon » 12 май 2006, 03:49

while(1) {        
           if (PINB.3 == 0)scv++,Delay_10ms(1);
           if (scv>10)scv = 10;      
}          

Или это описывается по другому ?
У меня в VMLab задержка нажатия и отпуска кнопки 6 мс.
В реальной жизни эта величина больше.

Кто как с этим борится и какие уже отработанные методы решения есть ?

avr123.nm.ru » 12 май 2006, 09:29

в курсе советую ВСЕГДА писать скобки   {     }

========

КодеВижен  правильно делает паузы если ему сообщили частоту работы МК !

а VMLAB правильно их воспроизводит и показывает.

Hamileon » 12 май 2006, 14:24

ШИМ С. Управление мощностью двумя кнопками.

#include <90s2313.h>  

int pwm_t = 0;
int scv = 0; // Скважность  - Мощность в процентах x 100


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{            

if (pwm_t == 10) pwm_t = 0;    
if (pwm_t == 0 ) PORTB.2 = 0;  
if (pwm_t >= scv) PORTB.2 = 1;  
pwm_t++;

 TCNT0 = 0x06; //reload counter value
}        
   

   
     
void main(void) {


//TIMER0 initialize - prescale:8
// desired value: 2KHz
// actual value:  2,000KHz (0,0%)

TCCR0 = 0x00; //stop timer
TCNT0 = 0x06; //set count
TCCR0 = 0x02; //start timer
MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x02;    
// Global enable interrupts
#asm("sei")                    


           DDRB.2=1;      
           DDRB.3=1;
           //*******************
           
          DDRB.3=0;
          PORTB.3 = 1;  
         
           
          DDRB.4=0;
          PORTB.4 = 1;
             
           
 
        while(1) {        
           if (PINB.3 == 0){ while(PINB.3 == 0);scv++; }    
           if (scv>10)scv = 10;                
           if (PINB.4 == 0){ while(PINB.4 == 0);scv--; }    
           if (scv<0)scv = 0;                                
               
          }    }    
   
Все 100% рабочее. Кнопка замыкается на землю. "B3 и B4"
Нет задержек кнопка работает по отпуску.

PS: To 123AVR я думаю несложно было догадатся что коментарии писал уже в форуме.

avr123.nm.ru » 12 май 2006, 16:07

ладно...

тогда вот это повторю:

скважность это величина противоположная величине ШИМ !  смотрите задачу 11.

Hamileon » 13 май 2006, 21:05

:)


cron
Rambler\'s Top100 Mail.ru counter