Програмный ШИМ на С. Что за МК видно ниже а также частоту ШИМ
Диод дополнительно подключен для себя. Захотелось вдеть еще одну дорожку и ее частоту для проверки верности расчета делителя.
Успехов. Хотя на своей шкуре испытал что лучше. Именно начать самому ну а потом уже можно подглядывать.
Код:
#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; \\Просто включаем светодиод он к ШИМ никакого отношения не имеет просто мне так захотелось
}
}