eugmai86 » 05 мар 2011, 22:17
Спасибо, вот попробовал на железе, так сказать. Не работает должным образом. Не знаю на что грешить.
#include <tiny2313.h>
unsigned int pp=100;//переменная для ШИМ скорость нарастания напряжения
//Попрограммы обработки прерываний
interrupt[EXT_INT0]void yvel_pwm(void) //обработка прерываний кнопки "+"
{
pp++;//увеличение при нажатии на кнопку "+" на 1
}
interrupt[EXT_INT1] void ymen_pwm(void)//обработка прерываний кнопки "-"
{
pp--;//уменьшение при нажатии на кнопку "-" на 1
}
//инициализация ШИМ
void init_pwm (void)
{
TCCR0A = (0 << 7) | (0 << 6) // OC0A выключен
| (1 << 5) | (0 << 4) // включить OC0B, очистить OC0B on compare match, set OC0B at TOP
| (0 << 1) | (1 << 0); // PWM, phase correct, 8 bit
TCCR0B = (0 << 2) // PWM, phase correct, 8 bit
| (0 << 2) | (1 << 1) | (0 << 0);
DDRD = (1 << 5); //PD5 выход шим
}
int main (void)
{
GIMSK=0b11000000; //разрешаем прерывание int0 и int1
MCUCR=0b00001111;// прерывание по возрастающему фронту - для кнопки 1 и 2
for (;;)//бесконечный цикл
{
OCR0B = pp;
init_pwm();
}
return(0);
}
Смысл программы в следующем, при возникновении прерывания int0 или int1 значение OCR0B должно меняться, соответственно, и меняется заполнение сигнала открывающего транзистор на выходе шим. Транзистор работает в ррежиме ключа на мотор. Увы, мотор меняет скорость вращения при каждом прерывании хаотично. Буду признателен за подсказку.