Andy1988
07.02.2006, 23:24
Hi.
Ich hab mir vorgestern ne H-Bridge gebaut, mit der ich meine RB35 Motoren regeln möchte.
Heute hab ich mich mal ein bischen mit dem AVR-C beschäftigt. Ports ein- und ausschalten is kein Problem (is ja im Prinzip nur Bitshifting).
Jetzt wollte ich meinen Motor regeln. Da hab ich das hier geschrieben:
int main(void)
{
//Port D als Output
DDRD = 0xff;
//10 Bit Phase Correct PWM, max Wert 1023
TCCR1A = (1<<WGM10) | (1<<WGM11) |(1<<COM1A1);
//Takt = CPU-Takt/64
TCCR1B = (1<<CS10) | (1<<CS11);
//Port D Bit 7 (Enable) auf I
PORTD |= (1 << PD7);
while(1)
{
PORTD |= (1 << PD6);
for(uint16_t i = 0; i <= 1023; i++)
{
OCR1A = i;
_delay_ms(5);
}
PORTD &= ~(1 << PD6);
PORTD |= (1 << PD5);
for(uint16_t i = 0; i <= 1023; i++)
{
OCR1A = i;
_delay_ms(5);
}
PORTD &= ~(1 << PD5);
}
return 0;
}
Der Motor regelt jetzt auch schön, allerdings fängt der an zu stottern. Dazu komm ich gleich noch. Ich glaub ich weiß, woran das liegt.
Aber regel ich jetzt ALLE ausgänge? Ich will doch nur einem Pin sagen, wie der den Saft ein- und ausschalten soll. Nicht allen. Und hier liegt anscheinend auch das Problem mit dem stoppen. Der Motorregler ist ein L298. Der hat ja eine Enable Leitung und zwei für die Richtung. Anscheinend wird jetzt die Enable Leitung UND die Richtungsleitung "ge-pwm-t". Also stottert der so.
Wie kann ich denn jetzt dem AVR sagen, dass er nur einen Pin "pwm-em" soll?
edit:
Das stottern ist weg. Hab den Takt von CPU-Takt/64 auf CPU-Takt/8 gestellt. Jetzt scheint das zu gehen. Aber da bleibt immenroch die Frage, ob der alle Pins regelt. Müsste er eigentlich, weil ich ja nirgendwo angebe, welchen Port er regeln soll.
Ich hab mir vorgestern ne H-Bridge gebaut, mit der ich meine RB35 Motoren regeln möchte.
Heute hab ich mich mal ein bischen mit dem AVR-C beschäftigt. Ports ein- und ausschalten is kein Problem (is ja im Prinzip nur Bitshifting).
Jetzt wollte ich meinen Motor regeln. Da hab ich das hier geschrieben:
int main(void)
{
//Port D als Output
DDRD = 0xff;
//10 Bit Phase Correct PWM, max Wert 1023
TCCR1A = (1<<WGM10) | (1<<WGM11) |(1<<COM1A1);
//Takt = CPU-Takt/64
TCCR1B = (1<<CS10) | (1<<CS11);
//Port D Bit 7 (Enable) auf I
PORTD |= (1 << PD7);
while(1)
{
PORTD |= (1 << PD6);
for(uint16_t i = 0; i <= 1023; i++)
{
OCR1A = i;
_delay_ms(5);
}
PORTD &= ~(1 << PD6);
PORTD |= (1 << PD5);
for(uint16_t i = 0; i <= 1023; i++)
{
OCR1A = i;
_delay_ms(5);
}
PORTD &= ~(1 << PD5);
}
return 0;
}
Der Motor regelt jetzt auch schön, allerdings fängt der an zu stottern. Dazu komm ich gleich noch. Ich glaub ich weiß, woran das liegt.
Aber regel ich jetzt ALLE ausgänge? Ich will doch nur einem Pin sagen, wie der den Saft ein- und ausschalten soll. Nicht allen. Und hier liegt anscheinend auch das Problem mit dem stoppen. Der Motorregler ist ein L298. Der hat ja eine Enable Leitung und zwei für die Richtung. Anscheinend wird jetzt die Enable Leitung UND die Richtungsleitung "ge-pwm-t". Also stottert der so.
Wie kann ich denn jetzt dem AVR sagen, dass er nur einen Pin "pwm-em" soll?
edit:
Das stottern ist weg. Hab den Takt von CPU-Takt/64 auf CPU-Takt/8 gestellt. Jetzt scheint das zu gehen. Aber da bleibt immenroch die Frage, ob der alle Pins regelt. Müsste er eigentlich, weil ich ja nirgendwo angebe, welchen Port er regeln soll.