mit prozessor proggen hab ich noch keine ahnung, aber der wird doch au irgendwo n schwingkreis (oszilator?) haben, welcher ihn taktet. vlt den mal etwas "abändern", also nen gröseren kondensator reinhaun, wenn der auserhalb liegt.

ansonsten erkundig dich mal nach dem sleep-teil (_delay_ms_ oder was das ist) ob der richtig ist. ansonsten, dieses

for(i=0;i<6;i++)

ist doch irgendwie quatsch, oder? damit machst du aus i irgendwie immer 1, und dann wieder null nach dem durchlaufen der schleife, und bevor sie wieder gestartet wird, wieder 1. zumindest wärs in C++ so, oder der compiler regt sich auf...

schau mal, wie es mit dem wär:
Code:
...

int i=0 ... ; //sollte glaub auserhalb der funktionen sein :-)

void rotate(direction)
{

...
while(i<6)
{
PORTA =step[i];
_delay_ms(1000);
i++;
}
}
zumindest kenn ichs so mit C++ progs
(evtl das while durch for ersetzen)