Witam,
Cały dzień męczę się z programem do uc na przerwaniach. Ponieważ jestem początkujący, narobiłem masę błędów. No ale...
Na pinach 0,1,2,4 portu D są tranzystory w układzie darlingtona
na int1 jest wejście step z EMC2
a na pinc1 jest sygnał lewo , prawo.
Niby wszystko się świeci, ale silnik się nie kręci. Steruję halfstepem.
Prosiłbym o pomoc!
Cały dzień męczę się z programem do uc na przerwaniach. Ponieważ jestem początkujący, narobiłem masę błędów. No ale...
Na pinach 0,1,2,4 portu D są tranzystory w układzie darlingtona
na int1 jest wejście step z EMC2
a na pinc1 jest sygnał lewo , prawo.
Niby wszystko się świeci, ale silnik się nie kręci. Steruję halfstepem.
//#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned int flaga = 0;
void Inicjalizacja(void)
{
sei(); //Włączenie obsługi przewań
// INT1 - zbocze opadające, INT0 - brak
MCUCR = _BV(ISC11);
// załączenie przerwania od INT1
GICR = _BV(INT1);
}
SIGNAL (SIG_INTERRUPT1)
{
flaga++;
}
int step(int i)
{int krok[8]={0x01,0x05,0x04,0x06,0x02,0x12,0x10,0x11};
if(i<0){i=7;}
if(i>7){i=0;}
PORTD=krok[i];
return i;
}
int main( void )
{
Inicjalizacja();
int i=0;
/* Wszystkie linie portu D sa wyjsciami */
DDRD = 0x17;
/* Wszystkie linie portu C sa wejściami */
DDRC= 0x00;
PORTC=0x00;
while(1)
{
if(flaga==1)
{if(!(PINC&0x02)){i--;step(i);}else{i++;step(i);}
i=step(i);flaga=0;
}
PORTD=0;
}
}
Prosiłbym o pomoc!