atmega128·Î °íÁöÇâ°¢ÃÊÀ½ÆÄ ¼¾¼ ºÐ¸®Çü ¾²·Á°íÇÏ°íÀÖ½À´Ï´Ù. ¼Û½ÅºÎ1°³ ¼ö½ÅºÎ3°³¸¦ ¹è¿·Î ³õ¾Ò°í, ¼Û½ÅÇѹøÇÒ¶§ Àå¾Ö¹°¿¡ ¸Â°í ¹Ý»çµÈ ÃÊÀ½Æĸ¦ ¼ö½ÅºÎ3°³°¡ µ¿½Ã¿¡ ¼ö½ÅÇÏ°Ô µÇ´Â »óȲÀÔ´Ï´Ù. Çϵå¿þ¾î ±¸Á¶´Â atmega128 PORTF0 ¿¡ ¼Û½ÅºÎ trigger(ÁÖȲ»ö)¿¬°á /(VCC-GND 12V¿¬°á, ÀÌÇÏ ¼ö½ÅºÎµ¿ÀÏ) atmega128 INT0,INT1,INT3¿¡ °¢ 3°³ ¼ö½ÅºÎÀÇ echo½ÅÈ£(³ë¶û»ö)¿¬°áÇÑ »óÅÂÀ̸ç atmega128°ú PC´Â UART0À» »ç¿ëÇÏ¿© Åë½ÅÇÏ°íÀÖ½À´Ï´Ù.
<ÀÛµ¿ ÇÁ·Î¼¼½º> PC>atmega128 ¹®ÀÚ ¼Û½Å ¡æ UART ¼ö½Å ÀÎÅÍ·´Æ® ÀÛµ¿ : 1.ÀÌÀüÃøÁ¤µÈ Ä«¿îÆ𪠰Ÿ®°ªÀ¸·Î º¯È¯, PC¿¡¼ ¼ö½ÅµÈ ¹®ÀÚ¿ÍÇÔ²² °Å¸®°ª Ãâ·Â 2.PORTF=0xff·Î ÇÏ ¡æ ÃÊÀ½ÆÄ ¼ö½Å ÀÎÅÍ·´Æ®(¿ÜºÎÀÎÅÍ·´Æ® INT0,1,3) ÀÛµ¿ : 1. ù¹ø° ÃÊÀ½ÆÄ ¼ö½Å½Ã(¹Ý»çÆÄ°¡ ¾Æ´Ñ ¹Ù·Î¿·¿¡ÀÖ´Â ¼ö½ÅºÎÀÇ ÃÊÀ½ÆÄ¿¡ ¹ÝÀÀÇÑ°Í) PORTF =0x00 2. µÎ¹ø° ÃÊÀ½ÆÄ ¼ö½Å½Ã(°¡Àå °¡±î¿î °æ·Î¿¡ ÀÖ´Â Àå¾Ö¹°¿¡ ¹Ý»çµÈ ÃÊÀ½ÆÄ) Ä«¿îÆðª ÀúÀå
ÀÌ ÇÁ·Î¼¼½º·Î ÃÊÀ½ÆÄ ¼ö½ÅºÎ 3°³¿¡¼ ÃßÃâµÈ 3°¡Áö °Å¸®°ªÀ» ÃøÁ¤ÇÏ·Á°í ÇÏ°í ÀÖ½À´Ï´Ù. ±×·±µ¥ INT1,INT3¿¡ ¿¬°áµÇ¾îÀÖ´Â ÃÊÀ½ÆÄ ¼ö½ÅºÎ¿¡¼´Â Á¦´ë·ÎµÈ ÃøÁ¤°ªÀÌ ³ª¿À´Âµ¥ INT0¿¡¼´Â ÃøÁ¤°ªÀÌ 0À¸·Î¸¸ ³ª¿É´Ï´Ù. ±×·±µ¥ ÀÎÅÍ·´Æ®°¡ µÇ´ÂÁö È®ÀÎÇغ¸·Á°í ´Þ¾Æ³í LED(PORTA0)´Â INT0 ÃÊÀ½ÆÄ ¼¾¼¿¡ Ãæ°ÝÀ» °¡ÇÒ¶§¸¶´Ù ±ô¹Ú°Å¸®´Â °ÍÀ» È®ÀÎÇÒ¼ö ÀÖ¾ú½À´Ï´Ù. ¶ÇÇÑ ÃÊÀ½ÆÄ ¼¾¼¸¦ ¹Ù²ã¼ ÃøÁ¤ÇßÀ»¶§µµ °°Àº °á°ú¸¦ °®´Â°É·Î º¸¾Æ ¼¾¼ ÀÚüÀÇ ¹®Á¦´Â ¾Æ´Ñµí ÇÕ´Ï´Ù. ±×¸®°í INT1,3¿¡¼ °Å¸®°ªÀ» Àß ³ª¿À±äÇϳª °¡²û ½ÇÁ¦°ª°ú ´Ù¸¥ °ªÀÌ ÀÚ²Ù Ãâ·ÂÀÌ µË´Ï´Ù. ¾Æ¿¹ Å͹«´Ì ¾ø´Â °ªÀÌ¸é ¹«½ÃÇÏ¸é µÇ´Âµ¥ ¿¹¸¦ µé¾î 70cmÁ¤µµÀÇ °Å¸®¸¦ °¡²û¾¿ 60cm·Î ÃøÁ¤ÀÌ µË´Ï´Ù. 60~50cm·Î ÃøÁ¤µÇ´Â ºóµµ°¡ Á¼ ³ô½À´Ï´Ù (100¹ø¿¡ 20~30¹ø) ¹«¾ùÀÌ ¹®Á¦ÀÎÁö ¸ð¸£°Ú½À´Ï´Ù..¤Ì¤Ì µµ¿ÍÁÖ¼¼¿ä ÀÌÇÏ atmega128 ¼Ò½ºÄÚµå ÀÔ´Ï´Ù. #include <iom128v.h> #include <macros.h>
char data; int cnt, flag, intd, cnt3, flag3, intd3, cnt0, flag0, intd0; float d, d3; ////////////COUTNER//////////// void Counter3_setting(void) { TCCR3A = 0X00; TCCR3B = 0X02; TCNT3 = 0; } ////////////UART/////////////////// void tx0Char(char message); void tx0number(unsigned int Data) { tx0Char( (Data/10000) +'0'); tx0Char(((Data/ 1000)%10)+'0'); tx0Char(((Data/ 100)%10)+'0'); tx0Char(((Data/ 10)%10)+'0'); tx0Char( (Data %10)+'0'); } void tx0Char(char message) { while (!(UCSR0A & 0x20)); UDR0 = message; } #pragma interrupt_handler UART0_RX : 19 void UART0_RX(void) { CLI(); data = UDR0; d = cnt*0.085+40; d3 = cnt3*0.085+40; intd = (int)d; intd3 = (int)d3; intd0 =(int)cnt0*0.085; //°Å¸®°ª °è»ê tx0Char(data); tx0number(intd); tx0Char('\r'); tx0Char('\n'); tx0Char('T'); tx0number(intd3); tx0Char('\r'); tx0Char('\n'); tx0Char('Z'); tx0number(intd0); tx0Char('\r'); tx0Char('\n'); tx0Char('\r'); tx0Char('\n'); //PC·Î °Å¸®°ª Ãâ·Â PORTA = ~(PORTA); flag=0; flag3 = 0; flag0 = 0; PORTF = 0XFF; //ÃÊÀ½ÆÄ ¼Û½Å Counter3_setting(); //Ä«¿îÆýÃÀÛ SEI(); } void uart0_init(void) { UCSR0B = 0b10011000; //rxcie ON RXEN ON TXEN ON UCSR0A = 0X00; UCSR0C = 0X06; UBRR0L = 0X67; //9600BPS UBRR0H = 0X00; } //////////INTERRUPT #pragma interrupt_handler ISR1 : iv_INT1 void ISR1(void) //ÃÊÀ½ÆÄ 1 ¼ö½Å½Ã ÀÛµ¿ { PORTA = ~(PORTA); flag++; if( flag == 1){ PORTF = 0x00; } else if(flag == 2) { cnt=TCNT3; } } #pragma interrupt_handler ISR3 : iv_INT3 void ISR3(void) { PORT if(flag3 == 2) { cnt3=TCNT3; } } #pragma interrupt_handler int0_isr : 2 void int0_isr(void) { PORTA = ~(PORTA); flag0++; if( flag0 == 1){ PORTF = 0x00; } else if(flag0 == 2) { cnt0=TCNT3; } } ////////INT setting///////// void int_setting(void) { EICRA = 0X0c; EICRA |= 0XC0; EICRA |= 0X03; EICRB = 0X00; EIMSK = 0X02; EIMSK |= 0X08; EIMSK |= 0X01; } int main(void) { SEI(); uart0_init(); int_setting(); DDRA = 0xFF; PORTA = 0x00; DDRF = 0XFF; PORTF = 0X00; // Insert code while(1); }A = ~(PORTA); flag3++; if( flag3 == 1){ PORTF = 0x00; } else if(flag3 == 2) { cnt3=TCNT3; } } #pragma interrupt_handler int0_isr : 2 void int0_isr(void) { PORTA = ~(PORTA); flag0++; if( flag0 == 1){ PORTF = 0x00; } else if(flag0 == 2) { cnt0=TCNT3; } } ////////INT setting///////// void int_setting(void) { EICRA = 0X0c; EICRA |= 0XC0; EICRA |= 0X03; EICRB = 0X00; EIMSK = 0X02; EIMSK |= 0X08; EIMSK |= 0X01; } int main(void) { SEI(); uart0_init(); int_setting(); DDRA = 0xFF; PORTA = 0x00; DDRF = 0XFF; PORTF = 0X00; // Insert code while(1); }
|