질문게시판 > 아트메가128코딩질문

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

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


BASIC4MCU | 질문게시판 | 아트메가128코딩질문

페이지 정보

작성자 asdf 작성일2018-06-06 15:30 조회8,921회 댓글1건

본문

	

저희가 구현하려는게 회전문인데 i_ray 값이 일정값이상 이거나 포토인터럽트에 물체가 있다고 인식되면 dc모터를 구동하는 것입니다.

 

이것까진 문제없이 코딩했는데 저희가 원하는게 i-ray 값이 일정이상이되거나 포터인터럽트가 작동해서 dc모터가돌아갈때 동시에 저희가 원하는 도트매트릭스를 구현하려합니다.

 

저희가 원하는 도트매트릭스를 따로 실행했을때는 문제없이 나왔는데 이것을

i_ray조건에 넣거나 포토인터럽트에 같이 넣어서 구현하니까 실행이 이상하게 깨지거나 안나오더라구요..

 

제가생각하기엔 타임카운트를 같이써서 그런거같기도하고 TNCT관련 인것 같기도한데..

잘모르겠네요.

 

지금까지 해온 코딩입니다 어떻게 수정해주면 될까요?..

/*****************************************************
Project : AD컨버터 제어 테스트
Version : LK-AVR128-F V01
Date    : 2012-09-11
Author  : Kyung Nam Lee
Company : LKEMBEDDED
Compiler: WINAVR+AVRStudio
Comment:  가변저항, 온도, 조도, 적외선센서의 아날로그전압을 AD컨버터하여 RS232통신
          포트로 디지털값을 전송하는 프로그램이다.  
       
     이때의 UTS(USB TO RS232)컨버터를 사용하여 PC와 AVR FULL 트레이닝보드를 연결하였다.
*****************************************************/

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <stdio.h>

#define LED_CON               *((unsigned char *)0x8000) // LED Control bus
#define SET_CON      *((unsigned char *)0x8100) // FND, Buzzer, RELAY Control bus
#define LCD_CON               *((unsigned char *)0x8200) // TLCD, GLCD Control bus
#define LCD_DATABUS           *((unsigned char *)0x8300) // TLCD, GLCD, FND, Dotmatrix Data bus
#define DOT_YELLOW     *((unsigned char *)0x8400) // Dotmatrix Yellow LED
#define DOT_RED         *((unsigned char *)0x8500) // Dotmatrix Yellow RED
#define STEPMOR      *((unsigned char *)0x8600) // Stepping Motor Control bus
#define DCSERVO      *((unsigned char *)0x8700) // DC, Servo Motor Control bus

volatile unsigned int ad_buff[5]={0};
volatile const char stm1_ccwSet[4]={0X08,0X02,0X04,0X01};
char status=0;

volatile const unsigned char vertical[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
volatile const unsigned char english[11][8]={
0Xf7,0Xf3,0X01, 0X00, 0X00, 0X01, 0Xf3, 0Xf7,
0Xfb,0Xf9,0X80, 0X80, 0X80, 0X80, 0Xf9, 0Xfb,
0Xfd,0Xfc,0XC0, 0Xc0, 0Xc0, 0Xc0, 0Xfc, 0Xfd,
0Xfe,0Xfe,0Xe0, 0X60, 0X60, 0Xe0, 0Xfe, 0Xfe,
0Xff,0Xff,0X70, 0X30, 0X30, 0X70, 0Xff, 0Xff,
0Xff,0X7f,0X38, 0X18, 0X18, 0X38, 0X7f, 0Xff,
0X7f,0X3f,0X1c, 0X0c, 0X0c, 0X1c, 0X3f, 0X7f,
0Xbf,0X9f,0X0e, 0X06, 0X06, 0X0e, 0X9f, 0Xbf,
0Xdf,0Xcf,0X07, 0X03, 0X03, 0X07, 0Xcf, 0Xdf,
0Xef,0Xe7,0X03,0X01, 0X01, 0X03, 0Xe7, 0Xef     // O
};


volatile int num_cnt=0;
void Dotmatrix_Timer()
{
 volatile static unsigned int cnt=1;
 cnt++;
 if(cnt>100) //1초 간격
 {
 num_cnt++;
 cnt=0;        
  if(num_cnt==10)
  {  
   num_cnt=0;
  }
   } 
}

void DotmatrixTest()
{

 int i=0;
    for(i=0;i<8;i++)
    {

            DOT_YELLOW=~english[num_cnt][i]; //Orange LED 셋팅 라인(Horizontal)
            LCD_DATABUS=vertical[i];         // 공통 라인(Vertical)
            _delay_ms(6);          //1ms간격 다이내믹 디스플레이     
           
       
 }
}

int stm1_cw_flag;
int i=0;

volatile int ntc_data; //Thermistor Data
volatile int cds_data; //CDS Data 
volatile int vr_data;  //Variable Resistor Data
volatile int i_ray; //infrared radiation Data

//==================Printf init================
volatile static volatile int uart_putchar( char c, FILE *stream); 
volatile static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,  _FDEV_SETUP_WRITE); 
volatile static  int uart_putchar( char c, FILE *stream) 


if (c == '\n') 
 uart_putchar('\r', stream); 
 loop_until_bit_is_set(UCSR0A, UDRE); 
 UDR0 = c; 
 return 0; 
 } 
/*초기화해준 포트에 따라서 -----------
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
 
UART0를 사용한다면 UCSR0A/ UDR0
UART1를 사용한다면 UCSR1A/ UDR1로만 변경해주면 된다.
===========================================*/


#define ADC_VREF_TYPE 0x40                             
volatile unsigned int read_adc(volatile unsigned char adc_input)     //AD 컨버팅 함수
{
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);    
    _delay_us(10);
    ADCSRA|=0x40;                        //AVCC PIN으로 ADC 기준전압 설정
    while ((ADCSRA & 0x10)==0);          //ADC 폴링상태로 대기
    ADCSRA|=0x10;                        //ADCSRA 초기화
    return ADCW;                         //ADCL , ADCH 각각 8비트를 합산하여 16비트로 사용 (헤더파일 참조)
}


ISR(TIMER0_OVF_vect)  // Timer 0 overflow interrupt service routine
{

    volatile static unsigned int cnt=0;   

    ad_buff[cnt]= read_adc(cnt);
    cnt++;
    if(cnt==4)
    {
        cnt=0;
    }
 Dotmatrix_Timer(); 
    TCNT0+=0X06;
}

ISR(INT0_vect)
{
 DCSERVO=0x01;
 DotmatrixTest();
}

 
void main(void)
{  
 DDRB=0x00;  //PORTB INPUTPORT Set
    DDRD=0X20; //Photo Sensor PE7 Input Select
    PORTD=000;
    DDRF=0X00;  //EL-7L PF3 Output Select
    PORTF=0X00; //EL-7L ON!

 //---AVR ATmega128-F Board initialization            
    MCUCR=0X80; //enable External memory and I/O control
 EICRA=0x00;
    EICRB=0x00;
    EIMSK=0x01;
    EIFR=0x01;

   
    TCCR0=0X04; //64Prescale, Overflow Interrupt Select
    TCNT0=0X06; //Timer Counter Register Init Value     
    TIMSK=0X01; //timer0 Timer Overflow Interrupt Enable

    //---ADC initialization------------------        
    ADMUX=ADC_VREF_TYPE & 0xff;  //ADMUX = 0X40 (define선언 참조)
    ADCSRA=0x84;                 //AD 컨버팅 허용, 16분주비 사용 
   
    //---UART 통신 initialization-----------         
    UCSR0A=0x00;
    UCSR0B=0x08;                //송신 허용
    UCSR0C=0x06;                //비동기 통신 모드, 데이터 사이즈 8bit
    UBRR0H=0x00;
    UBRR0L=0x67;                //boul rate : 9600 pbs 
   
    //---AVR ATmega128-F Board initialization            
    MCUCR=0X80;                                  
   
    //---External I/O initialization      
 LED_CON=0X00;       // LED GLCD Control bus
 SET_CON=0X00;       // FND, Buzzer, RELAY Control bus
 LCD_CON=0X00;       // TLCD, GLCD Control bus
 LCD_DATABUS=0X00;   // TLCD, GLCD, FND, Dotmatrix Data bus
 DOT_YELLOW=0X00;    // Dotmatrix Yellow LED
 DOT_RED=0X00;       // Dotmatrix Yellow RED
 STEPMOR=0X00;       // Stepping Motor Control bus
 DCSERVO=0X00;       // DC, Servo Motor Control bus     
    //---------------------------------------- 
    stdout = &mystdout;   // printf 문자열
 
 sei();//Global Interrupt Enable bit Set

    while (1) //Endless Loop
      {      
        i_ray=ad_buff[3];              //ifrared ray Data
        //UART통신 포트로 출력(시리얼컴을 통해 확인)
        
  if(ad_buff[3]>500 )
    {
  
  DCSERVO=0x01;
  DotmatrixTest();
  }
  else
  {
  DCSERVO=0x00;
  }
  
  }

 

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

댓글 1

조회수 8,921

asdf님의 댓글

asdf 작성일

이렇게돌리니까 저희가구현하는 도트매트릭스가 화살표모양으로 왼쪽으로지나가는것인데 i ray조건에서는 잘돌아가는데 포토인터럽트조건에서는 화살표 도트매트릭스가뜨긴뜨는데 옆으로 이동을하질않네요..

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 14881
공지 사이트 이용 안내댓글[28] master 17-10-29 32705
질문 atmega128 온도센서 질문입니다. 새글 으아어려워 03:35 20
답변 답변글 답변 : atmega128 온도센서 질문입니다. 새글 master 06:46 15
질문 (아두이노)qr리더기 gm65 관련 질문입니다. 새글 숨니 01:36 16
답변 답변글 답변 : (아두이노)qr리더기 gm65 관련 질문입니다. 새글 master 06:32 7
질문 flame sensor 질문입니다 새글 Tell 01:30 16
답변 답변글 답변 : flame sensor 질문입니다 새글 master 06:17 11
질문 서보모터 제어 질문댓글[3] 이미지새글첨부파일 NEOkANTsim 22-12-09 33
질문 dfplayer와 음성인식 모듈이 동시에 인식이 안되요댓글[3] 이미지새글첨부파일 tjqhd 22-12-09 22
질문 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글첨부파일 산만 22-12-09 23
답변 답변글 답변 : 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글 master 22-12-09 22
질문 초음파 카운트 새글 고구만 22-12-09 19
답변 답변글 답변 : 초음파 카운트 새글 master 22-12-09 19
질문 정전기로 인해 아두이노 핀이 죽어버립니다..댓글[1] 이미지새글 무야더싱 22-12-08 28
질문 매트랩 블루투스 무선 통신댓글[1] 이미지새글첨부파일 아두이노대학 22-12-08 20
질문 아두이노 else if Relay 관련 질문 새글 노토산스 22-12-08 21
답변 답변글 답변 : 아두이노 else if Relay 관련 질문댓글[1] 새글 master 22-12-08 22
질문 모터드라이버(L298N E6) 2개 동시사용.댓글[1] 이미지첨부파일 마고 22-12-08 33
질문 아두이노 l298n frequency sweep 관련 질문댓글[2] 이미지 sdwdjangwon 22-12-07 25
답변 답변글 답변 : 아두이노 l298n frequency sweep 관련 질문댓글[2] master 22-12-07 31
질문 stm32에서 코드 경과시간 측정하는 방법좀댓글[3] 라칸 22-12-07 24
질문 아두이노 코드 질문있습니다. 호2 22-12-07 34
답변 답변글 답변 : 아두이노 코드 질문있습니다. master 22-12-07 28
질문 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다. blackbunn 22-12-07 32
답변 답변글 답변 : 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다.댓글[1] master 22-12-07 39
질문 버튼 릴레이댓글[3] 아두이노배우기 22-12-07 27
질문 아두이노 초급자 과제 중인데 코드해석이 어렵습니다.. zhem 22-12-06 37
질문 시리얼 모니터 분리 안 되나요?댓글[4] 이미지 까만키위 22-12-06 38
질문 타이머 관련 질문입니다. 이미지첨부파일 adui 22-12-06 33
게시물 검색

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
모바일버전으로보기