Я не собираюсь тратить свое время, и просто разместить код вместе с объяснениемсерво не работает должным образом на AVR
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main(void){
sei(); //Enable interrupts
DDRB = (1 << PORTB3);//Set pin P3 as an output and other pins as inputs
//PORTB = 0xff;
DDRA = (1 << PORTA7);//Set pin A7 as an output and other pins as inputs
//PORTA = (1 << PORTA7);
TCCR0 = (1 << WGM00) | (1 << WGM01) | (1 << COM01);//Enable PWM, and configure Timer
TIMSK = (1 << TOIE0);//Enabling an interrupt
OCR0 = 255;//Setting comparison value for the Output compare unit
TCCR0 |= (0b110 << CS00);//Selecting the clock as the falling edge on a certain pin
while(1){
/*
* The portion of the code creates a square wave with a period of 39 us, which means that the falling edge occurs at a period of 78us, and since the output period of
* the PWM is 50Hz for a servo, that fits perfectly (1/(79*10^-6 * 256) ~ 50), but for some reason, the servo doesn't move...*/
PORTA ^= (1<< PORT7);
_delay_us(39);
}
}
Итак, в чем проблема ?? У меня на самом деле нет осциллографа для измерения частоты, поэтому не просите меня об этом, но особенная вещь, которую я заметил, это то, что напряжение на силовых проводах сервопривода составляло 2,7 В, когда должно было быть 5 В , но сам источник питания обеспечивал 5 В, и это произошло только тогда, когда я подключил сигнальный штырь к штырю ШИМ, и это произошло независимо от того, была ли подключена рельс 5 В к сервомеханизму или нет ... Любые идеи о том, что проблема является??
Если вы собираетесь downvote мне, скажи мне причину ... –