Moin, ich habe mich jetzt mal an die Möglichkeiten des PWM-Generators der Atmels gemacht.
Dabei gibts natürlich mal wieder Probleme.
Und zwar kann ich nen Servo anhängen (habe mal vorsichtshalber nen ganz billigen genommen, aber der S8051BB reagiert genauso).
Wenn ich den Servo anschliesse, dann summt er die ganze Zeit ziemlich laut, verstellt zwar seine Position, aber kommt einfach nicht zur ruhe, der Motor wird dabei auch recht schnell ziemlich heiss).
Ich hole mir die 5V vom VTG-Pin des PortB, Gnd ebenso und das PWM-Signal vom OC0 pin (PinB3) und zwar vom STK500-Board.
Hier mal der C-Code des Programms
Zitat:
#include <avr/io.h>
int main(void)
{
int seta, setb;
DDRB=0xff;
DDRA=0x00;
PORTA=0xff;
OCR0=128;
TCCR0 = (1<<WGM00) | (1<<COM01) | (1<<CS00); // Timer Register auf Phasenrichtigen PWM-Mode setzen, die Art der High- und Low-Zeit bestimmen, kein Prescaling verwenden (mit 1024 wars aber genauso)
for(;
{
if (bit_is_set(PINA, PINA0))
{
if (seta==0)
{
OCR0 = OCR0+10;
seta = 1;
}
}
if (bit_is_clear(PINA, PINA0)) seta=0;
if (bit_is_set(PINA, PINA1))
{
if (setb==0)
{
OCR0 = OCR0-10;
setb=1;
}
}
if (bit_is_clear(PINA, PINA1)) setb=0;
} //Mit PINA0 und PINA1 kann ich den Soll-Wert um 10 hoch- bzw runtersetzen. Das drumrum dient dazu, dass Pro Tastendruck nur je einmal gezählt wird und nicht bei jedem Taktdurchgang...
}
|
Gibt es Maximalwerte/-frequenzen... die die Servos verstragen? Oder wo könnte noch der Fehler liegen?