Czesc
Mam taki problem że mam silnik krokowy i transoptor szczelinowy. Chce uzyskać efekt taki że silnik sie obraca dopóki atmega nie otrzyma przerwania zawnętrznego od transoptora (opadające zbocze).
Kod źródłowy
problem jest taki że sinlik obraca się o ustalony kąt tylko
- jakby mikrokontroler od razu otrzymywał przerwanie od transoptora.
Zrobiłem identyczny program gdzie na porcie A mam mrygającą diodkę i przerwanie działa. Nie wiem zbytnio o co chodzi.
Schemat układu:
Mam taki problem że mam silnik krokowy i transoptor szczelinowy. Chce uzyskać efekt taki że silnik sie obraca dopóki atmega nie otrzyma przerwania zawnętrznego od transoptora (opadające zbocze).
Kod źródłowy
#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>
volatile unsigned char flaga=0;
void mryganie(void);
void obrot_20_prawo(void);
void obrot_20_lewo(void);
void stop_motor(void);
ISR (INT1_vect)
{
flaga=1;
}
ISR (BADISR_vect){}
int main(void)
{
DDRA |= 0x03;
DDRD |= 0XF0;
GICR |= (1 << INT1);
MCUCR |= (1 << ISC11);
sei();
for(;;)
{
obrot_20_prawo();
//mryganie();
if(flaga == 1)
{
PORTA = 0X01;
flaga=0;
stop_motor();
break;
}
}
return 0;
}
void mryganie(void)
{
PORTA ^= 0X02;
_delay_ms(100);
}
void obrot_20_prawo(void)
{
unsigned int i;
//portd pd7 pd6 pd5 pd4
// 1a 1b 2a 2b -półbajt sterowania silnkiem krokowym
//czarrny zielony czerwony niebieski
//porta pa1 pa0 -enable ssterownik silnika( wprzyszłości e1 zwarte z e3)
// e1 e3
for (i=0; i<5; i++) //obrot o 5*4*1,8 = 36 stopni
{
PORTD = 0xa0;
_delay_ms(5);
PORTD = 0x60;
_delay_ms(5);
PORTD = 0x50;
_delay_ms(5);
PORTD = 0x90;
_delay_ms(5);
}
}
void obrot_20_lewo(void)
{
unsigned int i;
for (i=0; i<5; i++)
{
PORTD = 0x90;
_delay_ms(5);
PORTD = 0x50;
_delay_ms(5);
PORTD = 0x60;
_delay_ms(5);
PORTD = 0xa0;
_delay_ms(5);
}
}
void stop_motor(void)
{
PORTD &= 0X00;
}
problem jest taki że sinlik obraca się o ustalony kąt tylko
- jakby mikrokontroler od razu otrzymywał przerwanie od transoptora.
Zrobiłem identyczny program gdzie na porcie A mam mrygającą diodkę i przerwanie działa. Nie wiem zbytnio o co chodzi.
Schemat układu:
