/*HS-311 각도를 찾았다. 90S2313으로(12짜리 크리스탈 기준)으로 서보 모터 제어하는 것인데. 18ms 주기로 20, 57, 92 이다.(0도, 90도, 180도)
아래는 소스.
*/
#include
#include
#include
#include
#include
volatile unsigned int sv1_high ,sv1_low ,sv1_flag
,sv1_range, sec;
volatile unsigned char Bout;
SIGNAL(SIG_OVERFLOW0) /* signal handler for tcnt0 overflow
interrupt */
{
if(sv1_flag==0)
{
if(sv1_low==711) // <= 18ms
{
if(sec>40)
sec=0;
else
sec++;
sv1_flag=1;
sv1_low=0;
Bout=Bout|0x08;
}
else
{
sv1_low++;
}
}
else
{
sv1_high++;
if(sv1_high>sv1_range)
{
sv1_flag=0;
sv1_high=0;
Bout=Bout&~0x08;
}
}
outp(0,TCNT0); /* reset TCNT0 */
}
int main(void)
{
int
i;
outp(0x80,SREG);
outp(0xff,DDRB); /* use
all pins on PortB for output */
outp((1<
outp(0x00,TCNT0); /* reset
TCNT0 */
outp(0x01,TCCR0); /* count
with cpu clock */
sei(); /* enable
interrupts */
for (;;)
{
sec=0;
sv1_range=20; // : 0도
while(sec<39 o:p="">39>
{outp(Bout,PORTB);}
sec=0;
sv1_range=92; // : 180도
while(sec<39 o:p="">39>
{outp(Bout,PORTB);}
sec=0;
sv1_range=57; // : 90도
while(sec<39 o:p="">39>
{outp(Bout,PORTB);}
for(i =
20;i<93 i="" o:p="">93>
sec=0;
sv1_range=i; // : ?도
while(sec<39 o:p="">39>
{outp(Bout,PORTB);}
}
}
}
------------------------------------------------------
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.