то выходящий сигнал не стабильный, прыгает частота и ШИМ не работает,
Так не надо все сразу проверять.
Зафиксируйте значение шим на одном значении и проверьте как ведет себя частота.
Скорее всего надо проверять код.
Частота прыгает только с выхода драйвера, со стороны мк все нормально работает.
Вот мой код:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int pwm_duty = 0; // Скважность
void PWM_Duty_Controls (void) //Настройка портов на внешнее прерывание энкодера
{
//Настройка портов на внешнее преривание
DDRD &= ~(1<<2);
PORTD |= (1<<2);
DDRC &= ~(1<<0);
PORTC |= (1<<0);
//Внешние преривыния
MCUCR |= (1<<ISC01); //Прерывание по спаду
GICR |= (1<<INT0);
sei();
}
ISR(INT0_vect)
{
if (~PINC & (1<<0))
{
pwm_duty++;
_delay_ms(50);
}
else
{
pwm_duty--;
_delay_ms(50);
}
OCR2 = pwm_duty;
}
void PWM_8Bit_settings (void) //Настройка ШИМ на 2ом таймер счетчике 8 бит
{
DDRB |= (1<<3); //ШИМ PB3
TCCR2 |= (1<<WGM20); //8 бит ШИМ с точной фазой
TCCR2 |= (1<<COM20);
TCCR2 |= (1<<CS20); //Без делителя частоты
OCR2 = 127;
}
int main(void)
{
PWM_Duty_Controls();
PWM_8Bit_settings();
while (1)
{
}
}
Добавлено after 3 minutes 7 seconds:PRoman,
Там вариантов всего два. Либо проблема с питанием драйвера, линии питания и цепь общего провода, либо неисправность самого драйвера. Проверьте ещё раз линии питания и общего провода подключения драйвера, проверьте надёжность соединения минусов блоков питания 5 Вольт и 12 Вольт и если с питанием точно всё в порядке, то тогда меняйте драйвер на новый.
Да вроде все нормально по питанию, единственное уже грешу на макетную плату, может из за неё такие проблемы ?