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

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

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


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

페이지 정보

작성자 asdf 작성일2018-06-06 15:30 조회6,681회 댓글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

조회수 6,681

asdf님의 댓글

asdf 작성일

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

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9620
공지 사이트 이용 안내댓글[24] master 17-10-29 29577
질문 컴퓨터 usb연결시 정상 작동하나 9V건전지 외부전원 연결 시 작동하지 않는 문제댓글[2] 이미지새글첨부파일 보겐을운용 17:26 17
질문 아두이노 dac 연결댓글[1] 이미지새글첨부파일 kodory 16:28 17
질문 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 akmong413 16:22 15
답변 답변글 답변 : 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 master 17:27 12
질문 아트메가 모터드라이브와 초음파 센서 연동 질문입니다댓글[1] 새글 123424135123q 00:54 19
질문 스텝모터 드라이버 선정 질문드립니다. 새글 아흐흑 22-05-18 18
답변 답변글 답변 : 스텝모터 드라이버 선정 질문드립니다.댓글[1] 이미지새글 master 06:56 15
질문 아두이노로 모터+드라이버 제어댓글[6] 새글 모토 22-05-18 33
질문 온도센서로 서보모터 제어 코딩댓글[1] 새글 진수네1조 22-05-18 38
질문 라즈베리파이 웹캠 데이터 아두이노 전송 (초보)댓글[1] 전자과 22-05-17 34
질문 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 이현주 22-05-17 57
답변 답변글 답변 : 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 새글 master 22-05-18 109
질문 아두이노 우노 2개와 앱인벤터끼리의 블루투스 통신 방법댓글[3] 이미지첨부파일 pyoleo 22-05-17 80
질문 졸업작품 첨부파일 ejdog 22-05-16 72
질문 PCB의 커넥터 연결관련 이슈같은데.. 원인을 정확히 모르겠습니다.댓글[2] 이미지 설계못해서개털림 22-05-16 61
질문 STM32F767 사용중인데 발열이 발생합니다.댓글[5] 존클라프 22-05-16 62
질문 리니어 레일 거리 조절댓글[1] 면수 22-05-16 52
질문 아두이노 심전도 센서 BPM 계산댓글[3] 쥬쥬 22-05-16 69
질문 아두이노 서로 다른 전압을 가진 부품 제어 이미지 chovo 22-05-16 49
질문 앱인벤터 질문입니다.댓글[2] 이미지 귀끠우유 22-05-16 55
질문 아두이노 우노끼리 블루투스 통신댓글[1] 첨부파일 pyoleo 22-05-16 61
질문 마이크로 받은 입력을 주파수로 변경댓글[3] 생늧판출 22-05-16 39
질문 while문 안 if문 빠져나오는 방법 kyho3855 22-05-15 33
답변 답변글 답변 : while문 안 if문 빠져나오는 방법댓글[1] master 22-05-16 43
질문 초음파센서로 속도구하기(코드 합치는법) 쥰니 22-05-15 65
답변 답변글 답변 : 초음파센서로 속도구하기(코드 합치는법)댓글[1] master 22-05-16 56
질문 360서보모터 질문입니다댓글[1] 한잔해2 22-05-14 93
질문 아두이노 초보 24V DC 제품 제어댓글[2] 제로펲시 22-05-13 96
게시물 검색

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