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

TODAY1,338 TOTAL270,516
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


▼ BASIC4MCU 후원업체 최신 정보 ▼

▲ BASIC4MCU 후원업체 최신 정보 ▲

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

페이지 정보

작성자 희안 작성일2018-02-07 11:43 조회610회 댓글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

조회수 610

등록된 댓글이 없습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 SoftwareSerial을 이용한 버튼 및 LED 작동 댓글[1] 새글 깅깅 23:03 6
답변 답변글 답변 : SoftwareSerial을 이용한 버튼 및 LED 작동 새글 master 23:21 3
질문 PIR 센서 감도조절 질문 새글 master 22:58 2
질문 저번에 초음파와 dc모터 관련 질문했던 사람입니다. 아직 문제가 잘 해결되지 않아서 올립니다. 새글 재갈이 20:24 6
답변 답변글 답변 : 저번에 초음파와 dc모터 관련 질문했던 사람입니다. 아직 문제가 잘 해결되지 않아서 올립니다. 댓글[3] 새글 master 21:27 8
질문 Nrf24 양방향 송수신 진동모터 작동관련 질문입니다! 댓글[1] 새글 A반장 19:58 8
질문 아두이노 조도센서 반응을 반대로 하고 싶어요! 댓글[2] 새글 코코포도 17:55 11
질문 아두이노 LED랑 스피커 동시에 작동하는 법 질문 새글 master 17:24 10
질문 원래 나와야하는 시리얼 모니터 사진 올립니다. 새글 찰스백작 16:47 8
질문 GPS추적기 소스주신거 안되서 문의드립니다. 소스첨부합니다. 댓글[3] 이미지새글첨부파일 찰스백작 16:36 15
질문 STM32 공부방법 댓글[2] 새글 DrVoid 12:22 14
질문 gps 소스1으로는 안될까해서 문의드립니다.. 댓글[1] 새글 찰스백작 00:51 12
질문 아두이노에서 서보모터와 dc모터 두가지를 함께 이용하고 싶습ㄴ다. 댓글[2] 새글 김주리 00:03 19
질문 gps 추적기 다시문의드립니다. 다시 소스좀 부탁드립니다..ㅠㅠ 댓글[2] 새글 찰스백작 18-10-18 23
질문 아두이노 led 제어 코딩 질문합니다. 새글 mini1004 18-10-18 10
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017