모터 > RC수신기로부터 8채널 PWM 신호 입력 - CPPM

TODAY778 TOTAL2,230,460
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 모터 | 서보모터 | RC수신기로부터 8채널 PWM 신호 입력 - CPPM

페이지 정보

작성자 키트 작성일2017-09-05 17:17 조회2,186회 댓글0건

본문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//--------------------------------------------------------
// CVAVR
//--------------------------------------------------------
#include <mega128.h>
#include <stdio.h>
//
#define U_C unsigned char
#define U_I unsigned int
//
U_C no=0,flag=0;
U_I srt=0,end=0,PWM[8]={0,},buf[8]={0,};
//
void U1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }
void U1_str(char *s){ while(*s)U1_char(*s++); }
//
interrupt [EXT_INT0] void ext_int0_isr(void){
    U_I i;
    if(EICRA&0x01){ srt=TCNT1; }
    else{
        end=TCNT1; i=end-srt;
        if(i<5000)buf[no++]=i; // 2.5ms 미만
        else{
          if(no==8){ // (sync)2.5ms 이상, 채널 읽은 갯수가 8이면
            for(i=0;i<8;i++)PWM[i]=buf[i];
            flag=1;
          }
          no=0;
        }
    }
    EICRA^=0x01
}
//
void main(){
  char str[50];
  EICRA=0xFF; EIMSK=1// Rising edge
  TCCR1B=2;   // 0.5us
  UBRR1L=8;   UCSR1B=0x18// 115200
  SREG=0x80;
  while(1){
    if(flag){ flag=0;
      sprintf(str,"0=%5d 1=%5d 2=%5d 3=%5d "    ,PWM[0],PWM[1],PWM[2],PWM[3]); U1_str(str);
      sprintf(str,"4=%5d 5=%5d 6=%5d 7=%5d \r\n",PWM[4],PWM[5],PWM[6],PWM[7]); U1_str(str);
    }
  }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//--------------------------------------------------------
// AVRStudio
//--------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
//
#define U_C unsigned char
#define U_I unsigned int
//
volatile U_C no=0,flag=0;
volatile U_I srt=0,end=0,PWM[8]={0,},buf[8]={0,};
//
void U1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }
void U1_str(char *s){ while(*s)U1_char(*s++); }
//
ISR(INT0_vect){
    U_I i;
    if(EICRA&0x01){ srt=TCNT1; }
    else{
        end=TCNT1; i=end-srt;
        if(i<5000)buf[no++]=i; // 2.5ms 미만
        else{
          if(no==8){ // (sync)2.5ms 이상, 채널 읽은 갯수가 8이면
            for(i=0;i<8;i++)PWM[i]=buf[i];
            flag=1;
          }
          no=0;
        }
    }
    EICRA^=0x01
}
//
int main(){
  char str[50];
  EICRA=0xFF; EIMSK=1// Rising edge
  TCCR1B=2;   // 0.5us
  UBRR1L=8;   UCSR1B=0x18// 115200
  SREG=0x80;
  while(1){
    if(flag){ flag=0;
      sprintf(str,"0=%5d 1=%5d 2=%5d 3=%5d "    ,PWM[0],PWM[1],PWM[2],PWM[3]); U1_str(str);
      sprintf(str,"4=%5d 5=%5d 6=%5d 7=%5d \r\n",PWM[4],PWM[5],PWM[6],PWM[7]); U1_str(str);
    }
  }
}
 
cs

3660040649_igZLc5rO_futabaframelength.png


8채널 CPPM 신호를 받는 예제입니다.
3660040649_maoK5JU1_PPM.jpg
3660040649_gsi6F8Eq_opwm_ppm.gif
3660040649_RXWBMIHn_dorab-apparaturi-4.jpg

각 신호의 주기는 제품마다 다르니 수정해서 사용하세요

동작시켜보지 않은 것이니 문제가 있으면 덧글로 적어주세요^^

댓글 0

조회수 2,186

등록된 댓글이 없습니다.

모터HOME > 모터 > 서보모터 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기