Most az általam megírt szoftvert fogjuk működésre bírni. A programot C nyelven írtam, WinAVR fordítóval fordítottam, és AVRStudio fejlesztőkörnyezetben készítettem.
A Fuse biteken nem szükséges állítani, minden legyen úgy, ahogy az alapbeállításban van.
A C kód a következő:
#include<avr/io.h>
#include<util/delay.h>
#define DELAY 0
#define DELAY_STEP 3
void Forward()
{
PORTB = (1<<PB2);
_delay_ms(5);
PORTB = 0;
_delay_ms(DELAY);
PORTB = (1<<PB3);
_delay_ms(5);
PORTB = 0;
_delay_ms(DELAY);
PORTB = (1<<PB1);
_delay_ms(5);
PORTB = 0;
_delay_ms(DELAY);
PORTB = (1<<PB0);
_delay_ms(5);
PORTB = 0;
_delay_ms(DELAY);
}
void Reverse()
{
PORTB |= (1<<PB0);
_delay_ms(DELAY_STEP);
PORTB = 0;
_delay_ms(DELAY);
PORTB |= (1<<PB1);
_delay_ms(DELAY_STEP);
_delay_ms(DELAY);
PORTB |= (1<<PB3);
_delay_ms(DELAY_STEP);
PORTB = 0;
_delay_ms(DELAY);
PORTB |= (1<<PB2);
_delay_ms(DELAY_STEP);
_delay_ms(DELAY);
}
int main ()
{
DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3);
PORTB = 0;
while(1)
{
Forward();
}
return 0;
}
A kódot próbáltam minél érthetőbben írni. A működését leírom röviden:
A DELAY megadásával beállíthatjuk a motor sebességét, minél kisebb ez az érték, annál gyorsabb a motor, minél nagyobb, annál lassabb. A DELAY_STEP-hez nem kell nyúlnunk, ezzel azt állíthatjuk be, hogy a motor mennyi ideig kapjon áramot, tulajdonképpen az erejét állíthatjuk be. Ha túl sokáig kap áramot, akkor nagyon melegedni fog, ha túl kevés ideig, akkor pedig nem lesz elég erős.
Tartalmaz továbbá két függvényt, melyeknek neve Forward és Reverse, azaz előre, és hátra. A két függvény egészlépéses üzemmódban vezérli a motort, ezt könnyet átírhatjuk féllépésesre. Továbbá átírhatjuk, hogy mi adjuk meg hogy hány lépést mennyen előre, vagy hátra.
A main függvényben először beállítjuk a kimeneti portokat, majd minden portbitet 0-ba állítunk, és a végtelen ciklusban meghívjuk az egyik függvényt.
Fordítás után nincs más dolgunk, mint beégetni az ATtiny13-ba, vagy letölthető innen a lefordított .hex fájl (9.6MHz), innen pedig az eredeti .c fájl.