서보모터 | [UART 마스터-슬레이브] ADC 3채널 -> 서보모터 3개
페이지 정보
작성자 키트 작성일17-09-05 17:22 조회1,749회 댓글0건본문
//MASTER쪽 코드
#include <mega128.h>
#include <delay.h>
//
void main(void){
int i;
UBRR0L=103; UCSR0B=0x08;
ADCSRA=0xE7;
while(1){
ADMUX=0; delay_ms(10); i=ADCW; i=(int)((float)i*60.0/1024.0); UDR0=i; //0~59
ADMUX=1; delay_ms(10); i=ADCW; i=(int)((float)i*60.0/1024.0); UDR0=i+60; //60~119
ADMUX=2; delay_ms(10); i=ADCW; i=(int)((float)i*60.0/1024.0); UDR0=i+120; //120~179
}
}
//SLAVE쪽 코드
#include <mega128.h>
#include <delay.h>
//
void main(void){
char r;
int i;
DDRB=0xE0;
TCCR1A=0xAA; TCCR1B=0x1A; ICR1=39999;
UBRR0L=103; UCSR0B=0x10;
while(1){
if(UCSR0A&0x80){
r=UDR0;
if (r< 60){ i=( r *3)*18+3000; OCR1A=i; } //PB5 //ADC0
else if(r<120){ i=((r- 60)*3)*18+3000; OCR1B=i; } //PB6 //ADC1
else if(r<180){ i=((r-120)*3)*18+3000; OCR1CH=i>>8; OCR1CL=i&0xFF; } //PB7 //ADC2
}
}
}
마스터(TX)----(RX)슬레이브
GND-----------GND
//
1바이트로 ADC 값을 전송합니다.
0채널 : 0~59
1채널 : 60~119
2채널 : 120~179
1도씩 제어하지 않고 3도 간격으로 제어하더라도 크게 느끼지는 못할겁니다.
(자세히 본다면 알겠지만)
댓글 : 0
조회수 : 1,749
등록된 댓글이 없습니다.