Lirzman писал(а):На осциллографе сигнал такой формы(PB0):
______ _____ _____
| | | | | |
|20мс |_|20мс |_|20мс |
чето первернутый он у вас.
Технический форум по робототехнике.
Lirzman писал(а):На осциллографе сигнал такой формы(PB0):
______ _____ _____
| | | | | |
|20мс |_|20мс |_|20мс |
|t1 | t0 |
___|---|____|--------|_______
|<- P ->|
aesok писал(а):Условие не нужно. Просто настрой таймер как тебе нужно.
Удали голобальную переменную cur_state; и добавь локальную статическую в обработчик прерывания.
if(cur_state==1)//Импульс 20мс
{TCCR1B =0x02;}
else //управляющий импульс
{
TCCR1B =0x01; //Старт таймера при делителе = 1024
//Биты CS10 CS11 CS12
}
Lirzman писал(а):Я её глобальной сделал потому что управляющий импульс использует делитель 0x01(TCCR1B) а 20мс импульс - (0x02).
Поэтому без условия не обойтись,
- Код: Выделить всё • Развернуть
if(cur_state==1)//Импульс 20мс
{TCCR1B =0x02;}
else //управляющий импульс
{
TCCR1B =0x01; //Старт таймера при делителе = 1024
//Биты CS10 CS11 CS12
}
Можно конечно перевести 20мс задержку под делитель 1, только от перемены мест слагаемых сумма не меняется
if(cur_state == 0) {
>>>>> TCCR1B =0x01; <<<<<<
//вывести '1'
TCNT1=gangle; //настроить таймер на задежку t ms
PORTB SET_B(gservo);//Выставить 1 на ножку
cur_state = 1;
} else
{
//вывести '0'
>>>> {TCCR1B =0x02;} <<<<
TCNT1 = period; //настроить таймер на задежку (20) ms
PORTB CLR_B(gservo);//Выставить 1 на ножку
cur_state = 0;
}
avr123.nm.ru писал(а):точно померить сигналы можно при выводе их с помощью инструментов "ГРАФ" в PROTEUS
Lirzman писал(а):С первой сервой я разобрался
ЗЫ за что отвечает параметр -Os?
Скомпилил с ним, но эффекта -0.
Всмысле ни хуже ни лучше.
//************ПРОЦЕДУРА ПОЗИЦИОНИРОВАНИЯ СЕРВЫ********************
void Pos(char servo,long int angle)
{
PORTB SET_B(servo);//Выставить 1 на ножку
gservo=servo;//Номер сервы
gangle=angle;//Управляющий импульс
//TCNT1=gangle;//Управляющий импульс
}
Lirzman писал(а):Что еще за "ГРАФ"?
По английйски как он называется?
aesok писал(а):нужно подавать этот импульс постоянно с периудом 20мс
avr123.nm.ru писал(а):попробуйте вот эти примеры: DAC0808.DSN или Invosc.DSN
avr123.nm.ru писал(а):aesok писал(а):t1 = 1.6+\-0.7мс
лучше 1.5 ...
Q. What is servo deadband?
A. Deadband reflects the time it takes for a servo to respond when stick movement is given. Standard servos have a deadband of around 8us and high performance servos have a deadband of 1~3us.