질문게시판 > atmega2560에 관하여 질문드립니다.

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

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


BASIC4MCU | 질문게시판 | atmega2560에 관하여 질문드립니다.

페이지 정보

작성자 희안 작성일2018-02-07 11:43 조회824회 댓글0건

본문

	

수신기(RX701)를 ATmega2560에 연결하여 조종기(DEVO7)에서 입력을 넣어준 후,
수신기로부터 받아오는 값을 UART를 통해 확인하고자 합니다. 
헌데 TCNT1H와 TCNT1L를 합치는 부분에서 문제가 발생하는 것인지 
출력되는 값이 안정되지 않고 지속적으로 변동됩니다. 
레지스터 설정은 계속해서 확인해 봤지만 틀린 부분이 보이지 않았습니다.

TCNT1이 없어서 TCNT1H,TCNT1L을 사용하는데 아래와 같이 쓰면 안되는건가요? ㅠㅠ
MCU는 ATmega2560이고 코딩은 Codevision을 통해서 하고 있으며 UART를 통한 확인은 ComPortMaster란 프로그램을 통해 하고 있습니다.


#include <mega2560.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <delay.h> 
#include <string.h> 
#include <math.h> 
                                                                            
typedef unsigned char byte; 

volatile long int cnt_rising = 0; 
volatile long int cnt_falling = 0; 
volatile long int cnt_elev = 0; 
volatile long int cnt_aile = 0; 
volatile long int cnt_thro = 0; 
volatile long int cnt_rudd = 0; 

//Receiver Port Setting 
void Port_init() 

    DDRD = 0b00000000;        //입력 설정 
    PORTD = 0b00001100;        //INT2, 3
    
    DDRE = 0b00000000;        //입력 설정 
    PORTE = 0b11000000;        //INT6, 7
    
    EIMSK = 0b11001100;        //INT2, 3, 6, 7
    EICRA = 0b11110000;        //INT2, 3 rising edge
    EICRB = 0b11110000;        //INT6, 7 rising edge


interrupt [EXT_INT2] void ext_int2_isr(void)    //ELEV Channel 

    if(EICRA == 0b11110000){ 
        cnt_rising = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        EICRA = 0b11100000; 
    } 
    else{ 
        cnt_falling = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        cnt_elev = (40000 - cnt_rising + cnt_falling) %40000; 
        EICRA = 0b11110000; 
    } 


interrupt [EXT_INT3] void ext_int3_isr(void)    //AILE Channel 

    if(EICRA == 0b11110000){ 
        cnt_rising = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        EICRA = 0b10110000; 
    } 
    else{ 
        cnt_falling = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        cnt_aile = (40000 - cnt_rising + cnt_falling) %40000; 
        EICRA = 0b11110000; 
    } 


interrupt [EXT_INT6] void ext_int6_isr(void)    //THRO Channel 

    if(EICRB == 0b11110000){ 
        cnt_rising = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        EICRB = 0b11100000; 
    } 
    else{ 
        cnt_falling = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        cnt_thro = (40000 - cnt_rising + cnt_falling) %40000; 
        EICRB = 0b11110000; 
    } 


interrupt [EXT_INT7] void ext_int7_isr(void)    //RUDD Channel 

    if(EICRB == 0b11110000){ 
        cnt_rising = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        EICRB = 0b10110000; 
    } 
    else{ 
        cnt_falling = (unsigned long)((unsigned long)TCNT1H << 8 | (unsigned long)TCNT1L); 
        cnt_rudd = (40000 - cnt_rising + cnt_falling) %40000; 
        EICRB = 0b11110000; 
    } 


//Timer 
void Timer1_init() 

    DDRB |= 0b11111111;        
    TCCR1A = 0b10100010; 
    TCCR1B = 0b00011001; 
    ICR1H = 39999 >> 8; 
    ICR1L = 39999 & 0xFF; 

void Timer3_init() 

    DDRE |= 0b00110000; 
    TCCR3A = 0b10100010; 
    TCCR3B = 0b00011001; 
    ICR3H = 39999 >> 8; 
    ICR3L = 39999 & 0xFF; 


void main(void) 

    Port_init(); 
    Timer1_init(); 
    Timer3_init(); 
    
    DDRE |= 0x02; 
    
    UCSR0A |= 0x00; 
    
    UCSR0B |= 0x18; 
    
    UCSR0C |= 0x06; 
    
    UBRR0H = 0x00; 
    
    UBRR0L = 0x67; 
    
    UDR0 = 0x00; 
    
    SREG |= 0x80; 
    
    while(1) 
    { 
    printf("ELEV : %6ld / AILE : %6ld / THRO : %6ld / RUDD : %6ld\n", cnt_elev, cnt_aile, cnt_thro, cnt_rudd); 


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 0

조회수 824

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 25
공지 사이트 이용 안내 댓글[4] master 17-10-29 4675
질문 마스터님 봐주세요~ 댓글[2] 이미지새글첨부파일 현이꽃 19-01-22 13
답변 답변글 답변 : 마스터님 봐주세요~ 댓글[2] 새글 master 09:50 11
질문 c언어 조언 해주세요. 댓글[2] 새글 c린이 19-01-22 13
질문 손문일 새글 손문일 19-01-22 15
답변 답변글 답변 : 손문일 새글 master 19-01-22 8
답변 답변글 답변 : 손문일 새글 손문일 19-01-22 5
답변 답변글 답변 : 답변 : 손문일 새글 master 19-01-22 8
질문 블루투스 조이스틱 질문좀요 새글 현이꽃 19-01-22 9
답변 답변글 답변 : 블루투스 조이스틱 질문좀요 댓글[1] 새글 master 19-01-22 12
질문 atmega128 풀업 스위치 댓글[2] 새글 c린이 19-01-22 13
질문 master님 스테핑 모터 3개 제어 관련 문의드립니다. 이미지새글첨부파일 원스타 19-01-22 19
답변 답변글 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 댓글[4] 새글 master 19-01-22 12
답변 답변글 답변 : 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 새글 원스타 19-01-22 8
답변 답변글 답변 : 답변 : 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 댓글[1] 새글 master 19-01-22 11
질문 아두이노 스케치 반복문 질문 master 19-01-20 16
질문 스위치 회로 댓글[2] 이미지 동지 19-01-19 26
질문 LCD 회로가 바뀌었는데 이미지첨부파일 Lami 19-01-19 17
답변 답변글 답변 : LCD 회로가 바뀌었는데 master 19-01-20 14
질문 C언어 댓글[4] c린이 19-01-18 32
질문 아두이노 하나로 2개의 센서 데이터 받기 질문 master 19-01-18 16
질문 ATmega128에서 TWI(I2C)에 대한 코딩 질문입니다!! 댓글[2] 이미지첨부파일 질문Y 19-01-15 36
질문 아두이노 소프트웨어 시리얼 질문 댓글[2] 이미지첨부파일 hktsakura 19-01-15 26
답변 답변글 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[5] 이미지 master 19-01-15 34
답변 답변글 답변 : 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[4] master 19-01-15 32
답변 답변글 답변 : 답변 : 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[3] master 19-01-16 28
질문 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 배우러왔습니다 19-01-14 25
답변 답변글 답변 : 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 댓글[1] master 19-01-15 19
답변 답변글 답변 : 답변 : 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 댓글[1] 배우러왔습니다 19-01-15 12
게시물 검색

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