gpt4 book ai didi

使用avr控制多个 Helm 机

转载 作者:行者123 更新时间:2023-11-30 19:13:34 25 4
gpt4 key购买 nike

我想尝试使用av​​r和timer1通过直接切换输出来控制大约20个伺服系统(用于机器人)。这就是我到目前为止所能想到的。但是当我尝试添加最后两个 Helm 机时,所有 Helm 机都失败了。我认为这是一个时间问题。但我不知道如何纠正这个问题。我上网查了一下,没有找到具体的答案。

如果有人能指出一个关于控制多个伺服系统的好来源,那将非常有帮助

int main(void)
{
DDRB = 0xFF;
DDRA = 0xFF;

TCCR1A |= 1<<WGM11;
TCCR1B |= 1<<WGM12 | 1<<WGM13 | 1<<CS10;
TIMSK |= 1 << OCIE1A;

ICR1 = 19999; // Clear on reaching this point.
uint16_t count = MIN_VAL;
uint16_t count2 = 2000;
uint16_t c_rp = MIN_VAL;
uint16_t c_rp2 = 1000;
uint16_t c_rp3 = MIN_VAL;



sei();
while(1)
{
// Control PORT B PINS
// TCNT1 counts upwards and on reaching count
// an then the pin goes low
// SERVO 1
if( ( PORTB & (1<<PIN) ) && TCNT1 >= count)
{
PORTB &= ~(1<<PIN);
if (count < MAX_VAL)
count += INC_VAL; // CHANGING SERVO POSITION
else
count = MIN_VAL;

}

// SERVO 2
if( ( PORTB & (1<<PIN2) ) && TCNT1 >= count2)
{
PORTB &= ~(1<<PIN2); // CONSTANT SERVO POSITION

}


// Control PORT A PINS
// SERVO 3
if( ( PORTA & (1<<RP) ) && TCNT1 >= c_rp)
{
PORTA &= ~(1<<RP);
if (c_rp < MAX_VAL)
c_rp += INC_VAL;
else
c_rp = MIN_VAL;

}

// SERVO 4
if( ( PORTA & (1<<RP2) ) && TCNT1 >= c_rp2)
{
PORTA &= ~(1<<RP2);

}

}


ISR (TIMER1_COMPA_vect) // ISR called when TCNT1 equals ICR1
{
PORTB |= (1<< PIN ) | (1<< PIN2) ;
PORTA |= (1 << RP ) | (1 << RP2) | (1<< RP3);
}

最佳答案

通过这种无耻的 self 推销,我至少可以得到 12 个。不过,它可能会为您指明正确的方向: https://github.com/pengumc/servocontroller/blob/ef4d7c69e96375feeab30072e7b7f7975616cc87/src/ServoControllerI2C.c

关于使用avr控制多个 Helm 机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com