1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM
|
|
- 정은 상
- 7 years ago
- Views:
Transcription
1 AVR (ATmega2560) 보고서 2013 년 6 월 14 일 스마트컨트롤러 2013 조유진
2 1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIMER, EXT-INT) 5-1. 개요 5-2. 사용하는레지스터 5-3. Source Code 5-4. 실습사진 4. 시리얼통신및센서이용, EEPROM(UART, ADC, EEPROM) 6-1. 개요 6-2. 사용하는레지스터 6-3. Source Code 6-4. 실습사진
3 1. 기본설정 환경 준비물 Windows 컴퓨터, ATmega2560, 케이블, 개념 1-1. 설치해야하는프로그램및파일 이름 Cygwin WinAVR 설명윈도우에서리눅스환경을제공해주는에뮬레이터프로그램. GCC를사용가능하게해주며, make명령어로컴파일할수있다. AVR을위한 GCC컴파일러를윈도에서실행할수있게해주는프로그램이다. 이름을클릭하여 URL이동 프로그램을설치하는방법은생략하도록한다. 여기서추가로 AVRStudio 등의프로그램을 설치하여도된다 프로그램올리기 ARM에서는프로그래밍모드에들어가는일련의과정을거쳤으나 ATmega2560에서는단순히스위치를켜고, 컴퓨터와케이블로연결해 AVR업로드유틸리티를이용해미리 make 한 HEX파일을바로올릴수있다 MAKEFILE makefile은리눅스유틸리티중하나인 make를쓰는옵션에대해기술한파일이다. WinAVR등을이용한다면 makefile이미리쳐져있는것을알수있다. 여기서우리는단순히 SRC부분을찾아 c 파일만추가하는식으로 ( 띄어쓰기로구분 ) 사용하면된다.
4 3. 캐릭터 LCD(PORT) 사용기능 조작물품 PIOA, 모듈활용 캐릭터 LCD 3-1. 개요 캐릭터 LCD는글자만을출력하기위한 LCD 장치이다. 우리는모듈을이용해조작한다. 모듈을조작하려면우선어떻게신호를주면어떤동작을하는지확인해야하므로타이밍차트를분석해코드를구상해야한다. 캐릭터 LCD 타이밍차트 Write(LCD_CmdWrite, 커맨드명령에쓰임 ) Read(LCD_DataWrite, 데이터입력시쓰임 ) Read 시에는 Write 때와다름없지만 R/W 핀이특정시점에서무조건 H 가되어야한다. 기본적으로작동하는방법
5 PORT에서조작할핀네개를미리선언해둔다.(LCD_RS, LCD_RW, LCD_EN, LCD_BS) 여기서우선우리는 PORTC에조작용핀을, PORTD에데이터핀을사용하기로하였다. 그리고 Write 타이밍도를참고하여 LCD_CmdWrite함수를제작하고, 이를이용해 LCD를어떤방식으로쓸지세팅해주기위해 LCD_Init함수를만들어초기화함수도만들어준다. 초기화는모듈에서명령을제공해주며이는데이터시트를참조하도록한다. 명령어및설명 이름 Clear display Return home Entry mode set Display on/off control Cursor or display shift Function set Set CG RAM address Set DD RAM address Write data to CG or DD RAM Read data from CG of DD RAM 설명화면상의모든글자를없앰원시작점으로커서를되돌림커서가움직이는방향과쉬프트되는방법을정함디스플레이 / 커서 / 깜빡이를설정커서와디스플레이를옮김데이터길이 / 표시할줄수 / 캐릭터폰트를설정 CG RAM 주소를정해줌 DD RAM주소를정해줌데이터를 DD RAM이나 CG RAM에씀데이터를 DD RAM이나 CG RAM으로부터읽음 여기서우리는 Function set, Entry mode set, Cursor or display shift, Display, Clear display, Return Home 순으로명령을넣어주는것으로초기화를끝낼수있다. 이후 LCD_DataWrite 함수를이용하여글자를출력시켜확인할수있다. ASCII 코드 ( a' 등 ) 로입력하면, 메모리에서해당하는숫자의번지속폰트를화면에띄워주는방식이다. 커맨드라이트함수를이용해커서를움직인후, 글자를띄워마치글자가한자한자움직이는것처럼보여주는것도가능하다. 사용자제작폰트추가하기 현재우리가사용하는모델은일어 / 영어 / 숫자 / 일부기호만출력이가능하고한글출력이나다른기호의출력이불가능하다. 그래서모듈자체에있는폰트메모리에사용자가추가할수있는영역이존재하는데, 이곳에폰트의모양을숫자로변환하여추가할수있다. 폰트를추가하려면직접메모리에접근해야하는데, 이를제공하는명령어가 Set CG RAM address(0x40) 이다. 명령어를실행한직후 LCD_DataWrite함수를이용해쓸내용을전부입력해준다. 하지만폰트의구조에대해유의해야할점이있는데, 한글자입력할시한줄한줄씩만입력하여 8줄, 즉 8*5크기로쓴다는점이다. 위의그림과같이생긴폰트를추가하고싶다면, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x04, 0x00, 0x04 순으로등록하면그림과같은폰트를화면상에서볼수있다. 그리고이를읽어 올때는 LCD_DataWrite(0x00) 식으로사용해폰트메모리속의해당번지글자를띄워준다.
6 3-2. 사용하는레지스터 이름 주소 페이지 설명 PORTn 스펙참조 스펙참조 PORT Register DDRn 스펙참조 스펙참조 Data Direction Register 3-3. Source code #ifndef LCD_H #define LCD_H lcd.h #define PORTD ( *( ( volatile unsigned char * )0x2B ) ) #define DDRD ( *( ( volatile unsigned char * )0x2A ) ) #define PIND ( *( ( volatile unsigned char * )0x29 ) ) #define PORTC ( *( ( volatile unsigned char * )0x28 ) ) #define DDRC ( *( ( volatile unsigned char * )0x27 ) ) #define PINC ( *( ( volatile unsigned char * )0x26 ) ) //Control LCD #define LCD_RS ( 1 << 7 ) //0x #define LCD_RW ( 1 << 6 ) //0x #define LCD_EN ( 1 << 5 ) //0x #define LCD_BS ( 0xFF ) //0x00ff0000 //LCD Instruction( 13p ) #define LCD_CLEAR 0x01 // #define LCD_HOME 0x02 // * #define LCD_ENTRY 0x06 // IS ( Moves cursor to Right ) #define LCD_DISPLAY_ON 0x0C //0000 1DCB ( Display ON, Cursor OFF, NONE Blink ) #define LCD_DISPLAY_OFF 0x08 //0000 1DCB ( Display OFF, Cursor OFF, NONE Blink ) #define LCD_CURSOR 0x1C //0001 SR** ( Display shift, Move to Right ) #define LCD_FUNC 0x38 //001DL NF** ( Data Length(bits), Lines, Font size ) #define LCD_SHIFT_RIGHT 0x1C //000111** ( Shift to Right ) #define LCD_DELAY 2500 #define LCD_DELAY1 (0) #define LCD_DELAY2 (0) #define LCD_DELAY3 (150) #define LCD_DELAY4 (50) //Functions void LCD_Init( void ); void LCD_InitUserFont( unsigned int _fontnum, unsigned int _typenum ); void LCD_CmdWrite( unsigned char ucdata );
7 void LCD_DataWrite( unsigned char ucdata ); void LCD_String( void * vp ); void LCD_Number( unsigned int _x, unsigned int _y, unsigned int _usnum ); void LCD_PrintUserFont(); void LCD_ShiftToRight( void ); unsigned int LCD_GetUserFontNumber( void ); #endif #include "lcd.h" lcd.c unsigned char g_userfont[][32] = 0x1F, 0x04, 0x0A, 0x11, 0x04, 0x04, 0x04, 0x1F, 0x0E, 0x11, 0x11, 0x0E, 0x00, 0x1F, 0xA, 0x0A, 0x1D, 0x09, 0x15, 0x15, 0x01, 0x08, 0x08, 0x0F, 0x00, 0x0A, 0x15, 0x00, 0x1F, 0x1F, 0x0E, 0x00, 0x1F, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x08, 0x1F, 0x01, 0x1F, 0x10, 0x1F, 0x1F, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x08, 0x1F, 0x01, 0x1F, 0x10, 0x1F ; unsigned int LCD_GetUserFontNumber( void ) return( sizeof( g_userfont )/32 ); void LCD_Init( void ) DDRC = LCD_RS LCD_RW LCD_EN; DDRD = 0xFF; LCD_CmdWrite( LCD_FUNC ); LCD_CmdWrite( LCD_ENTRY ); LCD_CmdWrite( LCD_CURSOR ); LCD_CmdWrite( LCD_DISPLAY_ON ); LCD_CmdWrite( LCD_CLEAR ); LCD_CmdWrite( LCD_HOME ); return; void LCD_InitUserFont( unsigned int _fontnum, unsigned int _typenum ) volatile int i;
8 LCD_CmdWrite( 0x40 ); for( i=0; i<32; i++ ) if( _typenum == 1 ) LCD_DataWrite( g_userfont[_fontnum][i] ^ 0xFF ); else LCD_DataWrite( g_userfont[_fontnum][i] ); void LCD_PrintUserFont( unsigned int _x, unsigned int _y ) LCD_CmdWrite( LCD_CLEAR ); LCD_CmdWrite( 0x80+(0x40*_y)+_x ); //LCD_CmdWrite( 0x80 ); LCD_DataWrite( 0x00 ); LCD_DataWrite( 0x01 ); LCD_DataWrite( 0x02 ); LCD_DataWrite( 0x03 ); void LCD_CmdWrite( unsigned char ucdata ) volatile unsigned int icnt; // MUST READ TIMING DIAGRAM PORTC = 0x00; HIGH for( icnt=0; icnt<lcd_delay - LCD_DELAY1; icnt++ ); //Need delay before LCD_EN be PORTC = PORTC LCD_EN; //Enable LCD. Bus. for( icnt=0; icnt<lcd_delay-lcd_delay2; icnt++ ); //Delay before controling Data //PORTD = 0x00; //Clear all Data Buses PORTD = ucdata; //Set data in data buses buses. for( icnt=0; icnt<lcd_delay-lcd_delay3; icnt++ ); //Keeping signal of data PORTC = PORTC & ( ~LCD_EN );
9 buses. for( icnt=0; icnt<lcd_delay-lcd_delay4; icnt++ ); //Keeping signal of data void LCD_DataWrite( unsigned char ucdata ) volatile unsigned int icnt; // MUST READ TIMING DIAGRAM PORTC = LCD_RS; HIGH for( icnt=0; icnt<lcd_delay-lcd_delay1; icnt++ ); //Need delay before LCD_EN be PORTC = PORTC LCD_EN; //Enable LCD. Bus. for( icnt=0; icnt<lcd_delay-lcd_delay2; icnt++ ); //Delay before controling Data //PORTD = 0x00; //Clear all Data Buses PORTD = ucdata; //Set data in data buses buses. for( icnt=0; icnt<lcd_delay-lcd_delay3; icnt++ ); //Keeping signal of data PORTC = PORTC & (~LCD_EN); buses. for( icnt=0; icnt<lcd_delay-lcd_delay4; icnt++ ); //Keeping signal of data void LCD_String( void * vp ) while( 1 ) if( *( ( unsigned char * )vp )!= '\0' ) LCD_DataWrite( *( ( unsigned char * )vp ) ); vp = ( unsigned char * )vp + 1; else
10 void LCD_Number( unsigned int _x, unsigned int _y, unsigned int _usnum ) volatile int num; volatile int i; unsigned char m_ucstring[] = "00000"; for( num=10000, i=0; num>=1, i<5; num=num/10, i++ ) m_ucstring[i] = '0' + _usnum/num; _usnum = _usnum % num; LCD_CmdWrite( 0x80+(0x40*_y)+_x ); LCD_String( m_ucstring ); void LCD_ShiftToRight( void ) volatile int i; volatile int j; for( i=0; i<2; i++ ) for( j=0;j<16; j++ ) LCD_PrintUserFont( j, i ); MS_Delay(500); return; 3-4. 실습사진
11 4. 타이머카운터및초음파센서활용 (PORT, TIMER, EXT-INT) 사용기능 조작물품 외부인터럽트, 타이머카운터, 포트 캐릭터 LCD, 초음파센서 (SRF05) 5-1. 개요 초음파는인간의가청영역을벗어난고음파인데, 이를여러방향으로쏘아되돌아오는시간을측정하여거리를재는것이초음파센서이다. 초음파센서는액체에서높은효율을발생하여의료기기나돌고래등이사용한다. 일반적으로는기기의한계로인해 2~3m정도만측정이가능하다. 같은센서종류임에도불구하고조도센서나온도센서와는동작하는원리에차이가있다. 조도센서 / 온도센서는축차비교를하여센서값을읽어오는반면에초음파센서는메아리핀의상승에지가얼마나오래 HIGH상태로있는지를체크하고, 이를계산하여거리를측정한다. 음파는 1초당 340m씩갈수있으므로이를나누어보면약 초당 1cm 나아감을알수있다. 그리고초음파는왕복해야하므로, 이를이용해타이머카운터로약 초마다카운터를올려거리를잴수있다. 이원리는어떤모듈이든똑같이적용된다. SRF05 초음파센서타이밍도 작동하는방법 초음파센서는사용자가트리거펄스를주는부분과, 에코펄스가들어오기전설정해야할것, 인터럽트, 타이머카운터등설정해주어야할것들이다소많이있다. 우선타이머를설정 (ULT_TimerInit) 해준다. TCCRnA/B를이용해분주비를 8로만들어준다. 이후트리거핀을설정 (TRG_Init) 한다. 해당핀의출력을활성화시켜준후트리거핀을 LOW상태로만들어준다. 그리고에코핀의인터럽트를설정 (Echo_Init) 해준다. 에코핀의 Pulse는모듈이만들어주므로외부인터럽트이다. Run함수에서상승에지를찾은후시간을재다하강에지를발견했을때인터럽트가걸려재는것을멈추어야하므로, 하강에지에반응하게한다. 에코핀은 6 번핀 (INT4) 에연결되어있으므로 INT4의인터럽트를사용하게한다. 실제로초음파센서를동작시킨다 (ULT_Run). 우선기기를작동시켜야하므로트리거핀이
12 시작신호를보내는 TRG_Pulse 함수를호출한다. 해당함수는일정 Cycle 만큼핀을 High상태로만들어준다. 그리고에코핀의입력을활성화해주고, 해당핀이 High상태가될때까지대기한다. 그리고외부인터럽트마스크레지스터 (EIMSK) 를이용하여타이머를 Overflow 방식 ( 최댓값은항상정해져있고, 해당값에도달하면인터럽트가걸린다 ) 으로설정한다. 그리고앞에서사용한 sei함수혹은 SREG를이용하여글로벌인터럽트를켜주도록한다. 그러면그순간부터타이머카운터가오버플로우될때마다인터럽트가걸려해당함수 ( vector_23) 이실행되고, 거리를재기시작할것이다. 그리고에코핀이하강에지를만나면그에맞는인터럽트함수 ( vector_5) 가실행되어재는것을멈추고그때까지세었던값을저장한다. 계속값을세면안되므로다시초기화하고, 전체인터럽트를비활성화해준다. 이후저장한값을문자열로변환시켜반환하여 LCD나하이퍼터미널에출력할수있다 사용하는레지스터 이름 주소 페이지 설명 EICRA 0x69 78 External Interrupt Control Register A EICRB 0x6A 79 External Interrupt Control Register B EIMSK 0x3D 79 External Interrupt Mask Register EIFR 0x3C 80 External Interrupt Flag Register TCCR0A 0x Timer/Counter Control Register A TCCR0B 0x Timer/Counter Control Register B TCNT0 0x Timer/Counter Register OCR0A 0x Output Compare Register TIMSK0 0x6E 135 Timer/Counter Interrupt Mask Register PORTn 스펙참조 스펙참조 PORT Register DDRn 스펙참조 스펙참조 Data Direction Register PINn 스펙참조 스펙참조 PORT Input Register 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람. #ifndef ULTRA_H #define ULTRA_H 5-3. Source code ultra.h #define MCK #define PRESCALE 64 #define TICK_START ( ( MCK / PRESCALE / 1000 ) ) #define SREG ( *( ( volatile unsigned char * )0x5F ) ) #define TCCR ( ( ( volatile unsigned int * )0x44 ) ) #define TCCR0A ( *( ( volatile unsigned char * )0x44 ) ) #define TCCR0B ( *( ( volatile unsigned char * )0x45 ) ) #define TCNT0 ( *( ( volatile unsigned char * )0x46 ) ) #define TIMSK0 ( *( ( volatile unsigned char * )0x6E ) ) #define WGM00 0 #define WGM01 1 #define COM0B0 4
13 #define COM0B1 5 #define COM0A0 6 #define COM0A1 7 #define WGM20 0 #define WGM21 1 #define COM2B0 4 #define COM2B1 5 #define COM2A0 6 #define COM2A1 7 #define CS00 0 #define CS01 1 #define CS02 2 #define WGM02 3 #define FOC0B 6 #define FOC0A 7 #define TOIE0 0 #define OCIE0A 1 #define OCIE0B 2 #define I 7 #define T 6 #define H 5 #define S 4 #define V 3 #define N 2 #define Z 1 #define C 0 #define EICRA ( *( ( volatile unsigned int * )0x69 ) ) // 외부인터럽트제 어레지스터. #define ISC00 0 #define ISC01 1 #define ISC10 2 #define ISC11 3 #define ISC20 4 #define ISC21 5 #define ISC30 6 #define ISC31 7 #define EICRB ( *( ( volatile unsigned int * )0x6A ) ) #define ISC40 0 #define ISC41 1 #define ISC50 2 #define ISC51 3 #define ISC60 4
14 #define ISC61 5 #define ISC70 6 #define ISC71 7 #define EIMSK ( *( ( volatile unsigned int * )0x3D ) ) #define INT0 0 #define INT1 1 #define INT2 2 #define INT3 3 #define INT4 4 #define INT5 5 #define INT6 6 #define INT7 7 #define EIFR ( *( ( volatile unsigned int * )0x3C ) ) #define IINTF0 0 #define IINTF1 1 #define IINTF2 2 #define IINTF3 3 #define IINTF4 4 #define IINTF5 5 #define IINTF6 6 #define IINTF7 7 #define PORTA ( *( ( volatile unsigned char * )0x22 ) ) #define DDRA ( *( ( volatile unsigned char * )0x21 ) ) #define PINA ( *( ( volatile unsigned char * )0x20 ) ) #define PORTE ( *( ( volatile unsigned char * )0x2E ) ) #define DDRE ( *( ( volatile unsigned char * )0x2D ) ) #define PINE ( *( ( volatile unsigned char * )0x2C ) ) #define OCR0A ( *( ( volatile unsigned char * )0x47 ) ) #define TRG_PIN 1 #define ECHO_PIN 4 void vector_5( void ) attribute ( ( signal, used, externally_visible )); void vector_23( void ) attribute ( ( signal, used, externally_visible )); #define sei() asm volatile ("sei" ::) // C언어내부에강제로어셈블리코드 를삽입하는것. #define cli() asm volatile ("cli" ::) // C언어내부에강제로어셈블리코드 를삽입하는것. #define sleep() asm volatile ( "sleep" "\n\t" :: ) // CPU를최소한의작동만시 키는것. 슬립모드. 대기전력을줄인다 // 인라인어셈블리. 전처리나컴파일과정에서무시한다. GCC어셈블리문법이다. sei는아트메 가에만존재하는니모닉. unsigned char * ULT_Run();
15 void ULT_Init(); void Echo_Init(); void ULT_TimerInit(); void TRG_Init(); void TRG_Pulse(); #endif #include "ultra.h" ultra.c static volatile unsigned int uitick; static volatile unsigned int uidistance; static volatile unsigned int uistate; // 1Tick(375Clock) // 계산된거리 // 초음파거리를재기위한상태변수 unsigned char * ULT_Run() static unsigned char ucdistance[] = "---cm"; // 초기값 uistate = 1; uidistance = 0; uitick = 0; TRG_Pulse(); // 초기화 // 트리거펄스신호를주어작동시작 DDRE = 0x00; while( 0 == ( (PINE) & ( 1 << ECHO_PIN )) ); TIMSK0 = ( 0 << OCIE0B ) ( 0 << OCIE0A ) ( 1 << TOIE0 ); sei(); // 전체인터럽트를설정해준다. 므로, // ECHO_PIN 은초음파가보내진순간부터상승되어되돌아올때까지그상태가유지되 다. // 상승에지가발견되었으면, 타이머클록을켜고소요시간을재기위해타이머를켠 // Check NEGATIVE_EDGE in Echo pulse. uistate = 1; while( 1 == uistate ); ULT_TimerInit(); Echo_Init(); // Stop Interrupt // 인터럽트설정 cli(); // 숫자를그대로띄울수없으므로, 글자로변환한다. ucdistance[0] = '0' + (uidistance %1000)/100; ucdistance[1] = '0' + (uidistance %100)/10; ucdistance[2] = '0' + (uidistance %10)/1;
16 //LCD_Number( 0,0, uidistance ); return ucdistance; void ULT_Init() ULT_TimerInit(); TRG_Init(); Echo_Init(); return; void Echo_Init() EICRB = EICRB ( 0 << ISC40 ) ( 1 << ISC41 ); // 외부인터럽트는설정시 2 개의비트를쓰는데장치개수가레지스터 1개로는모지라므로 A와 B로구분한다. // 여기서우리는 4번장치를이용할것이므로 B로설정하며, 0/0이면하강에지를반응한다. EIMSK = EIMSK ( 1 << INT4 ); // INT4의인터럽트를켜준다. return; void vector_5( void ) // 인터럽트가발생했을때불러와지는함수. uidistance = uitick; // 현재 Tick을거리에저장한다.( 1 Tick = 1 cm ) uistate = 0; return; void ULT_TimerInit() TCCR0A = ( 0 << WGM00 ) ( 0 << WGM01 ) ( 0 << COM0B0 ) ( 0 << COM0B1 ) ( 0 << COM0A0 ) ( 0 << COM0A1 ); TCCR0B = ( 0 << WGM20 ) ( 0 << WGM21 ) ( 0 << COM2B0 ) ( 0 << CS02 ) ( 1 << CS01) ( 0 << CS00 ); // Count from 5 //TCNT0 = TICK_START; return; void vector_23( void )
17 ++uitick; // 1 Centimeter per 375 clock //DBGU_SendString( "Counting!\r\n" ); return; void TRG_Init() DDRA = 0xFF; // Trigger output enable PORTA = PORTA & ~( 1 << TRG_PIN ); // 사용하기전 LOW 상태여야한다. return; void TRG_Pulse() // 트리거펄스를생성한다. volatile unsigned int uicount; PORTA = PORTA ( 1 << TRG_PIN ); for( uicount=0; uicount<10000; uicount++ ); // 48Cycle 이상대기 PORTA = PORTA & ~( 1 << TRG_PIN );
18 5-4. 실습사진
19 6. 시리얼통신및센서와 EEPROM 이용 (UART, ADC, EEPROM) 사용기능 조작물품 USART, ADC, EEPROM 조도센서, 온도센서, 하이퍼터미널 USART 개요 직렬 (Serial) 통신은컴퓨터와보드를 USB로연결하고하이퍼터미널등으로통신하는것등을말한다. ATmega2560에는 4개의 USART 직렬통신포트를갖고있다. 우리는이중 0번을이용해통신을해볼것이다. 작동하는방법 제일먼저통신을초기화및설정부터해보도록하겠다. 우선전송속도 (Baud Rate) 를계 산해 UBRR0H/L 에대입한다. H 와 L 로레지스터가나뉘어져있는이유는값의크기가레지 스터한개보다클수있기때문이다. 전송속도의계산공식은 이고, MCK 는 (16Mhz), BAUD 는 이다. 단이공식을이용해전송속도를구할때, 간 혹소수점계산의이상으로 8 에근접한값이나오더라도소수점은버리기때문에 7 이나와 결과가이상한경우가있다. 이를대비하기위해값을정확히체크하는것이좋을것이다. USART 의제어및상태레지스터 (UCSR) 도 UBRR 레지스터처럼 H 와 L 와유사한 A/B/C 로나 뉘어져있다. 우선우리는송수신동작제어및상태저장을담당하는 A 에서는모든기능을 끌것이므로 0 을입력해준다. 그리고송수신동작제어나 9 비트에관련된값을설정하는 레지스터인 B 에서는송 / 수신허용비트와, 필요에따라송 / 수신인터럽트를허용해주도록 한다. 마지막으로송수신동작을제어하는 C 에선 8 비트전송, 짝수패리티코드사용, 비동 기모드로설정으로맞춰주도록한다. 그리고글로벌인터럽트레지스터 (SREG) 에서인터럽 트를활성화시켜장치가인터럽트를사용할수있도록한다. 그런데 ATmega2560 에서는 이동작만을수행하는어셈블리명령어 sei 가있는데, 이를인라인매크로함수를이용하여 사용하거나 SREG 를조작하는방법을이용한다.( 반대로끄는것은 난다. cli) 이로써초기화는끝 그리고글자를한번띄워보도록하자.(USART_SendChar) 해당함수는인자로받은글자값 을송신한다. 내용은매우심플한데, 상태를저장하는 UCSR0A 의비트중송신준비완료 비트의값을체크하여준비가완료될때까지대기하다가 USART 데이터레지스터에값을 집어넣으면송신이된다. 이를응용하면문자열도출력이가능하다. 수신은인터럽트와폴링두가지방식을이용할수있다. 우선폴링방식 (USART_RecvChar) 은송신때처럼 UCSR0A 에서수신준비비트가 1 로세팅될때까지대기한후, UDR0 의 값을처리하는방식을취하면된다. 단, UDR 레지스터는값을읽으면내용이사라지므로유 의. 그리고인터럽트방식은기본적으로 ATmega2560 의특성상 ARM 과달리함수가이미 만들어져있고번호만맞추면알아서실행이된다. 벡터의번호는스펙에나와있다 (1 씩밀 려적혀있으므로참고하기바란다 ) USART0 의경우벡터번호가 25 이므로, vector_25 라는 함수를만들면인터럽트시자동으로실행이된다. 인터럽트방식은이미데이터가들어온 상태이기때문에굳이 while 문을이용해대기할필요가없이바로 UDR0 의값을처리하면 된다.
20 A/D Converter 개요 A/D Converter는아날로그값을디지털로변환시키는장치이다. 분해능만큼전압을쪼개어조금씩값을올려비교하는것 ( 축차비교법 ) 으로, 주로센서의값을읽어오기위해쓰인다. 이방법은어느정도값의손실을유발하나, 아날로그값을디지털로처리할수있다는장점이있다. 작동하는방법 ARM과달리초기화없이바로변환하면된다. 우선우리는기준전압은보드에서나온전압을이용할것이므로외부의 AVCC 단자로입력된전압을사용하도록설정해준다. 그리고같은레지스터에서사용할채널을설정한다. 그러나 ADMUX레지스터는 0~4까지만설정이가능하므로 5번채널은 ADCSRB에있다. 5를선택했을경우이곳에값이들어가도록해준다. 이후 A/D컨버터제어및상태레지스터 A를이용해기능활성화및분주비를 64로만들어준다. 그리고해당레지스터를이용해변환을시작토록한다. 변환을하는데에는어느정도시간이소모되므로변환완료비트가 1이될때까지대기하도록한다. 변환이끝났으면 ADCH/L을반환하여해당값을처리하도록한다.( 둘다합하여 16비트정수형이므로통째로 int로선언하여사용해도된다 ) 여기서우리는조도센서를 0번채널에, 온도센서를 1번채널을사용하도록하였다 EEPROM 개요 EEPROM은전자적으로수정이가능한 ROM을말한다. ROM의한종류이므로비휘발성을띄며, 전원을껐다켜도값이그대로유지되어있다. ATmega2560에서는총 4KB 용량의 EEPROM이제공되며, 게임기의유저정보저장장치등에활용된다. 작동하는방법 ATmega2560은하버드구조를이용하고있다. 때문에 EEPROM은 SRAM과완전히분리되어있어직접적으로접근할방법은없다 ( 프로그래머는포인터로레지스터를접근해기기를동작시키는데, 애초에 SRAM에없으므로 ). 때문에간접적인방법을활용하는데, 접근하고자하는 EEPROM의번지 (0x0000~0x0FFF) 를입력한후 EEPROM 데이터레지스터를접근하여마치해당번지의 EEPROM을직접제어하는듯이사용한다. 우선글자한자를입력해보도록하자.(EEPROM_WriteChar) 우선이함수는반복적으로사용될것이므로앞의작업이다처리될때까지대기한다. 그러므로제어레지스터 (EECR) 의 EEPE레지스터가 1이될때까지기다리고, EEPROM 주소레지스터 (EEAR) 에접근번지를입력하여이동시키고, EEPROM 데이터레지스터 (EEDR) 에값을넣어해당번지에원하는값이입력된다. 라이트과정에서인터럽트가걸리면오류가날수있으므로글로벌인터럽트를꺼주도록하고, EEMPE를 1로만들어라이트가가능하도록한다. 그리고 EEPE는 4 사이클이내에 1이되어야제대로 EEPROM에들어온값을라이트하게된다. 라이트동작이수행된이후에는 EEPE가자동으로 0이된다. 읽어오는경우 (EEPROM_ReadChar) 도쓸때와똑같이앞의동작이끝날때까지대기하고, EEPROM 주소레지스터 (EEAR) 에접근을원하는번지를입력한후, 제어레지스터 (EECR) 에 Read한다는신호 (EERE) 를주고 EEPROM 데이터레지스터의값을처리하는것으로읽어오는루틴이끝난다 사용하는레지스터 (USART)
21 이름 주소 페이지 설명 PINA 0x Port A Input Pins Address DDRA 0x Port A Data Direction Register PORTA 0x Port A Data Register UCSR0A 0xC0 227 USART MSPIM Control and Status Register 0 A UCSR0B 0xC1 243 USART MSPIM Control and Status Register 0 B UCSR0C 0xC2 229 USART MSPIM Control and Status Register 1 C UBRR0L 0xC4 231 USART Baud Rate Registers L UBRR0H 0xC5 231 USART Baud Rate Registers H UDR0 0xC6 242 USART MSPIM I/O Data Register 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람 사용하는레지스터 (A/D Converter) 이름 주소 페이지 설명 ADCSRA 0x7A 297 ADC Control and Status Register A ADCSRB 0x7B 299 ADC Control and Status Register B ADMUX 0x7C 294 ADC Multiplexer Selection Register ADC 0x ADC Data Register DIDR0 0x7E 300 Digital Input Disable Register 0 DIDR2 0x7D 300 Digital Input Disable Register 2 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람 사용하는레지스터 (EEPROM) 이름 주소 페이지 설명 EEAR 0x41 32 EEPROM Address Register EEDR 0x40 32 EEPROM Data Register EECR 0x3F 32 EEPROM Control Register SPMCSR 0x Store Program Memory Control and Status Register SREG 0x5F 12 AVR Status Register 해당레지스터에관한상세정보는표에적힌페이지를데이터시트에서참고하기바람. #ifndef USART_H #define USART_H 6-3. Source code usart.h #define sei() asm volatile ("sei" ::) // C언어내부에강제로어셈블리코드 를삽입하는것. #define sleep() asm volatile ( "sleep" "\n\t" :: ) // CPU를최소한의작동만시 키는것. 슬립모드. 대기전력을줄인다 // 인라인어셈블리. 전처리나컴파일과정에서무시한다. GCC어셈블리문법이다. sei는아트메 가에만존재하는니모닉. #define MCK (16L * 1000 * 1000 ) // 메인클럭
22 #define BAUD ( 1152L * 100 ) #define UBRR ( ( MCK / ( BAUD * 16L ) ) - 1 ) // 전송속도공식 // UBRR 은 H 와 L 로두개의레지스터를사용한다.( 크기가크므로 ) #define UBRRH ( UBRR >> 8 ) #define UBRRL ( UBRR & 0xFF ) #define UDR0 ( *( ( volatile unsigned char * )0xC6 ) ) #define UCSR0A ( *( ( volatile unsigned char * )0xC0 ) ) #define UCSR0B ( *( ( volatile unsigned char * )0xC1 ) ) #define UCSR0C ( *( ( volatile unsigned char * )0xC2 ) ) #define UBRR0H ( *( ( volatile unsigned char * )0xC5 ) ) #define UBRR0L ( *( ( volatile unsigned char * )0xC4 ) ) #define PORTA ( *( ( volatile unsigned char * )0x22 ) ) #define DDRA ( *( ( volatile unsigned char * )0x21 ) ) #define PINA ( *( ( volatile unsigned char * )0x20 ) ) // UCSR0A #define MPCM 0 #define U2X 1 #define UPE 2 #define DOR 3 #define FE 4 #define UDRE 5 #define TXC 6 #define RXC 7 // UCSR0B #define TXB8 0 #define RXB8 1 #define UCSZ2 2 #define TXEN 3 #define RXEN 4 #define UDRIE 5 #define TXCIE 6 #define RXCIE 7 // UCSR0C #define UCPOL 0 #define UCSZ0 1 #define UCSZ1 2 #define USBS 3 #define UPM0 4 #define UPM1 5 #define UMSEL0 6 #define UMSEL1 7 void USART_Init(void); void vector_25( void ) attribute ( ( signal, used, externally_visible ));
23 void LED_Init( void ); void USART_String( void *_vp ); void USART_SendChar( unsigned char _ucchar ); unsigned char USART_RecvChar( void ); #endif #include "usart.h" usart.c void USART_Init( void ) LED_Init(); // BAUD Rate를 UBBR0레지스터에넣는다.( 크기가크므로 H와 L로분리한다.) UBRR0H = 0;//UBRRH; UBRR0L = 8;//UBRRL; // 소수점문제로인해속도가뒤틀림. // 모든기능을끈다. UCSR0A = ( 0 << MPCM ) ( 0 << U2X ) ( 0 << UPE ) ( 0 << DOR ) ( 0 << FE ) ( 0 << UDRE ) ( 0 << TXC ) ( 0 << RXC ); // 수신허용, 송신허용, 수신완료인터럽트허용 UCSR0B = ( 0 << TXB8 ) ( 0 << RXB8 ) ( 0 << UCSZ2 ) ( 1 << TXEN ) ( 1 << RXEN ) ( 0 << UDRIE ) ( 0 << TXCIE ) ( 0 << RXCIE ); // 8bit 전송, 짝수패리티, 비동기방식 UCSR0C = ( 0 << UCPOL ) ( 1 << UCSZ0 ) ( 1 << UCSZ1 ) ( 0 << USBS ) ( 0 << UPM0 ) ( 1 << UPM1 ) ( 0 << UMSEL0 ) ( 0 << UMSEL1 ); sei(); // 인라인어셈블리를이용한매크로함수, 글로벌인터럽트켜기.(SREG=(SREG) (1<<7)) 와같다. UDR0 = 0; return; // Timer0 Handler void vector_25( void ) //void vector23( void ) attribute ( ( signal, used, externally_visible )) //while( 0 == ( UCSR0A & ( 1 << RXC ) ) ); // UCSR0A의 RXC비트는읽혀지지않은문자가있을시 1이된다. // 어차피인터럽트가걸리려면무언가입력되어있어야하므로이함수내에서는효력이없다. 하지만인터럽트방법이아니라면입력이되었는지알아야하므로이부분이사용된다. static unsigned char ucdata = 0; ucdata = UDR0; //ucdata = ucdata - 64; //LCD_DataWrite( ucdata );
24 //while( 1 ); switch( ucdata ) // UDR0에있는데이터의내용을검사한다. case '1': PORTA = 0xFE; // case '2': PORTA = 0xFC; // case '3': PORTA = 0xF8; // case '4': PORTA = 0xF0; // case '5': PORTA = 0xE0; // case '6': PORTA = 0xC0; // case '7': PORTA = 0x80; // case '8': PORTA = 0x00; // default: PORTA = 0xFF; // return; unsigned char USART_RecvChar( void ) static unsigned char ucselect; while( 0 == ( UCSR0A & ( 1 << RXC ) ) ); // UCSR0A의 RXC비트는읽혀지지않은문자가있을시 1이된다. // 어차피인터럽트가걸리려면무언가입력되어있어야하므로이함수내에서는효력이없다. ucselect = UDR0; return( ucselect ); void USART_SendChar( unsigned char _ucchar )
25 while( (UCSR0A & ( 1 << UDRE )) == 0 ); 까지대기한다. UDR0 = _ucchar; 력한다. // 받을준비가되어있을때 // 값을입 void USART_String( void *_vp ) // 한글자씩전송한다. while( 1 ) if( (*( unsigned char * )_vp) == 0 ) USART_SendChar( *(unsigned char * )_vp ); (unsigned char * )_vp++; void LED_Init( void ) DDRA = 0xFF; PORTA = 0xFF; return; #ifndef ADC_H #define ADC_H adc.h #define ADCSRA ( *( ( volatile unsigned char * )0x7A ) ) #define ADPS0 0 #define ADPS1 1 #define ADPS2 2 #define ADIE 3 #define ADIF 4 #define ADATE 5 #define ADSC 6 #define ADEN 7 #define ADCSRB ( *( ( volatile unsigned char * )0x7B ) ) #define ADTS0 0 #define ADTS1 1 #define ADTS2 2 #define MUX5 3 #define ACME 6 #define ADMUX ( *( ( volatile unsigned char * )0x7C ) ) #define MUX0 0
26 #define MUX1 1 #define MUX2 2 #define MUX3 3 #define MUX4 4 #define ADLAR 5 #define REFS0 6 #define REFS1 7 #define ADCH ( *( ( volatile unsigned char * )0x79 ) ) #define ADCL ( *( ( volatile unsigned char * )0x78 ) ) #define ADC ( *( ( volatile unsigned int * )0x78 ) ) // ATmega2560에서 int는 16비트이므로, 각각 8비트인 H/L레지스터를한번에쓸수있게된다. // 단, Little Endian을쓴다는전제하에작동가능.( 거꾸로저장되므로 ) #define DIDR0 ( *( ( volatile unsigned char * )0x7E ) ) #define ADC0D 0 #define ADC1D 1 #define ADC2D 2 #define ADC3D 3 #define ADC4D 4 #define ADC5D 5 #define ADC6D 6 #define ADC7D 7 #define DIDR2 ( *( ( volatile unsigned char * )0x7D ) ) #define ADC8D 0 #define ADC9D 1 #define ADC10D 2 #define ADC11D 3 #define ADC12D 4 #define ADC13D 5 #define ADC14D 6 #define ADC15D 7 static unsigned int ADC_Convert( unsigned int uich ); unsigned int SENSOR_Light( void ); unsigned int SENSOR_Temp( void ); #endif #include "adc.h" adc.c static unsigned int ADC_Convert( unsigned int uich ) ADMUX = ( 0 << ADLAR ) ( 1 << REFS0 ) ( 0 << REFS1 ) ( uich & 0x1F );// 기준전압 ADCSRB = ( ( uich & 0x20 ) >> 5 ) << MUX5; // MUX5만사용한다. // MUX는총 0~5번까지있는데, 0~4까지는 ADMUX에있고, 5는 ADCSRB에있으므로같이처리한다.
27 // 채널설정, ADMUX 레지스터사용 ADCSRA = ( 1 << ADEN ) ( 1 << ADPS2 ) ( 1 << ADPS1 ) ( 0 << ADPS0 ); // ADC 기능활성화, ADC 분주비 64 사용, ADCSRA 레지스터사용 ADCSRA = ( ADCSRA ) ( 1 << ADSC ); // ADC Start Conversion : ADCSRA 레지스터사용 while( 0 == ( ADCSRA & ( 1 << ADIF ) ) ); //Conversion 완료까지대기, while 문사용, ADCSRA 레지스터사용 return ADC; // ADCH, ADCL 를한번에리턴할수있는 ADC 를 define 해놓을것!! unsigned int SENSOR_Light( void ) return( ADC_Convert( 0 ) ); unsigned int SENSOR_Temp( void ) return( ADC_Convert( 1 ) ); #ifndef EEPROM_H #define EEPROM_H eeprom.h #define EEAR ( *( ( volatile unsigned int * )0x41 ) ) //Little Endian //#define EEARH ( *( ( volatile unsigned char * )0x42 ) ) //#define EEARL ( *( ( volatile unsigned char * )0x41 ) ) #define EEDR ( *( ( volatile unsigned char * )0x40 ) ) // EEPROM Data Register #define EECR ( *( ( volatile unsigned char * )0x3F ) ) // EEPROM Control Register #define EERE 0 #define EEPE 1 #define EEMPE 2 #define EERIE 3 #define EEPM0 4 #define EEPM1 5 #define SPMCSR ( *( ( volatile unsigned char * )0x57 ) ) #define SPMEN 0 #define SREG ( *( ( volatile unsigned char * )0x5F ) ) void EEPROM_WriteChar( unsigned int uiaddress, unsigned char ucdata ); unsigned char EEPROM_ReadChar( unsigned int uiaddress );
28 void EEPROM_WriteString( void * _string ); char *EEPROM_ReadString( void ); #endif #include "eeprom.h" eeprom.c void EEPROM_WriteChar( unsigned int uiaddress, unsigned char ucdata ) while( 0!= EECR & ( 1 << EEPE ) ); // 앞의동작이다끝났을때까지기다린다. while( 0!= SPMCSR & ( 1 << SPMEN ) ); EEAR = uiaddress; // 접근할 EEPROM 번지를등록 EEDR = ucdata; // 데이터레지스터에넣을값을입력 SREG = SREG & ~( 1 << 7 ); // 인터럽트가활성화되어있으면작동에문제가생길수있다. EECR = EECR (( 1 << EEMPE ) ( 0 << EEPE )); // 라이트가가능하도록허용. EECR = EECR ( 1 << EEPE ); // 4 사이클내에 1로설정해야한다. return; unsigned char EEPROM_ReadChar( unsigned int uiaddress ) while( 0!= EECR & ( 1 << EEPE ) ); // 앞의동작이다끝났을때까지기다린다. EEAR = uiaddress; // 접근할 EEPROM 번지를등록 EECR = EECR ( 1 << EERE ); // 리드하기위한신호를준다 return( EEDR ); // EEPROM을접근하여해당데이터를반환한다. void EEPROM_WriteString( void * _string ) volatile int i; while( 0!= EECR & ( 1 << EEPE ) ); // 앞의동작이다끝났을때까지기다린다. while( 0!= SPMCSR & ( 1 << SPMEN ) ); for( i=0x00; i<0xfff; i=i+0x08 ) EEAR = i; if( i<sizeof(_string)-1 ) EEDR = (unsigned char*)_string+i; EEDR = 0x00; EECR = EECR (( 1 << EEMPE ) ( 0 << EEPE )); EECR = EECR ( 1 << EEPE ); // 4 서아쿨내에 1 로설정해야한다.
29 char *EEPROM_ReadString( void ) volatile int i; char m_string[20]; for( i=0x00; i<0xfff; i=i+0x08 ) while( 0!= EECR & ( 1 << EEPE ) ); // 앞의동작이다끝났을때까지기다린다. EEAR = i; EECR = EECR ( 1 << EERE ); if( EEDR!= 0 ) m_string[i] = EEDR; LCD_DataWrite(m_string[i]); else return m_string; while(1) main.c 일부 USART_String("\f \n\r"); 통신프로그램 조유진 USART_String(" \n\r"); 1 [EEPROM]0xFFF Write 2 [EEPROM]0xFFF Read 3 [ADC] 조도센서 4 [ADC] 온도센서 USART_String(" \n\r" ); switch( USART_RecvChar() ) case '1': /* for( i=0; i<lcd_getuserfontnumber(); i++ ) for( j=0; j<2;j++ )
30 \n\r"); \n\r"); 다. 다. \n\r" ); LCD_InitUserFont(i,j); LCD_ShiftToRight(); */ USART_String("\f 통신프로그램 조유진 USART_String(" EEPROM의 0xFFF번지에데이터를입력합니 데이터를한자입력해주시기바랍니 USART_String(" EEPROM_WriteChar( 0xFFF, USART_RecvChar() ); \n\r"); \n\r"); 다. case '2': USART_String("\f 통신프로그램 조유진 USART_String(" EEPROM의 0xFFF번지의데이터를읽어옵니
31 \n\r" ); 읽어온값은,"); USART_SendChar( EEPROM_ReadChar( 0xFFF ) ); USART_String( " 입니다. USART_String(" \n\r"); \n\r"); \n\r" ); case '3': USART_String("\f 통신프로그램 조유진 USART_String(" 현재의조도값을읽어옵니다. 읽어온값은,"); USART_SendString( ConvertToString( SENSOR_Light() ) ); USART_String( " 입니다. USART_String(" case '4':
32 \n\r"); \n\r"); \n\r" ); USART_String("\f 통신프로그램 조유진 USART_String(" 현재의온도값을읽어옵니다. 읽어온값은,"); USART_SendChar( ConvertToString( SENSOR_Temp() ) ); USART_String( " 입니다. USART_String(" default: USART_String( "Error!" ); USART_RecvChar();
33 6-4. 실습사진
UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR
IMC-V0.1 예제소스파일 1. UART 소스코드 (page 1-3) 2. Encoder 소스코드 (page 4-7) 3. ADC 소스코드 (page 8-10) UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>
8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>
7주차 AVR의 A/D 변환기제어레지스터및관련실습 Next-Generation Networks Lab. 3. 관련레지스터 표 9-4 레지스터 ADMUX ADCSRA ADCH ADCL 설명 ADC Multiplexer Selection Register ADC 의입력채널선택및기준전압선택외 ADC Control and Status Register A ADC 의동작을설정하거나동작상태를표시함
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More information2주차: 입출력 제어 복습
마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과 2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈 3/35
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The 6 th Lecture 유명환 ( yoo@netplug.co.kr) 1 2 통신 관련이야기 시리얼통신 관련이야기 INDEX 3 ATmega128 시리얼통신회로도분석 4 ATmega128 시리얼통신컨트롤러 (USART) 분석 5 ATmega128 시리얼통신관련레지스터분석 6 ATmega128 시리얼통신실습 1 통신 관련이야기 동기
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128
More information정보보안 개론과 실습:네트워크
` 마이크로프로세서설계및실습 12-13 주차강의자료 학습목표 A/D 변환기의제어방법을이해한다 능숙하게 A/D 변환기를제어할수있도록반복실습한다 2/28 아날로그 - 디지털변환회로 아날로그 - 디지털변환회로 (A/D 변환회로 ) 는, 아날로그전기신호를디지털전기신호로변환하는전자회로이다 A/D 컨버터 (ADC: Analog-to-digital converter) 라고도불린다
More informationMAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다
Code Vison AVR C ATmega 8535 RS232 시리얼통신 컨넥터와신호선 RS232 통신을위한컨넥터는 9핀과 25핀컨넥터가있으나, 최근에는 9핀컨넥터를많이사용한다. 실제데이터가송수신되는핀은 TXD(3) 와 RXD(2) 이고기능은다음과같다. 9 핀컨넥터의모습 TXD - Transmit Data 비동기식직렬통신장치가외부장치로데이터를보낼때, 직렬통신데이터가나오는신호선
More information목차 1. 기본설정 1-1. 설치해야할프로그램및파일 2. 문서읽는법 Cygwin 설치법 GNUARM 설치법 AT91SAM7S256 드라이버설치및컴퓨터연결 2-1. 개요 2-2. 회로도읽기 2-3. 데이터시트읽기 2-4. 타이밍차트읽
ARM (AT91SAM7S256) 보고서 2013 년 6 월 7 일 스마트컨트롤러 2013 조유진 목차 1. 기본설정 1-1. 설치해야할프로그램및파일 2. 문서읽는법 1-1-2. Cygwin 설치법 1-1-3. GNUARM 설치법 1-1-4. AT91SAM7S256 드라이버설치및컴퓨터연결 2-1. 개요 2-2. 회로도읽기 2-3. 데이터시트읽기 2-4. 타이밍차트읽기
More information목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기
Chapter. 8 UART HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기 UART 와 RS232 개요 UART(Uiversal Asychroous Receiver/Trasmitter) 시리얼기반의통신방식으로일반적으로
More information<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>
라인트레이서강좌 4. 프로그래밍 2005년 8월 1일류대우 (davidryu@newtc.co.kr) 1. 라인트레이서란? 라인트레이서는정해진주행선을따라움직이는자율이동로봇이다. 현재공장자동화부분에서이용되고있는무인반송차가라인트레이서이다. 라인트레이서의기본적인원리는주어진주행선을센서로검출하여이것에따라목적위치까지이동하는것이다. 라인트레이서는크게 3부분 - 컨트롤러부,
More informationATmega128
ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>
1주차 ATmega128의구조와메모리 Next-Generation Networks Lab. 1. ATmega128의특징 고성능, 저전력의 8 비트마이크로컨트롤러 진보된 RISC 구조 대부분단일클럭에서실행되는강력한 133개의명령어구조 16MHz에서거의 16MIPS로동작 32개의 8 bit 범용작업레지스터와추가된주변장치제어레지스터 2 사이클내에서수행되는강력한곱셈기내장
More informationATmega128 교재 - 8장 EEPROM.hwp
8.1 EEPROM 과 Flash Memory ATmega128에는프로그램메모리로서 128KB의플래시메모리를내장하고있고데이터메모리로서 4KB의 EEPROM을내장하고있다. EEPROM과플래시메모리는하나의뿌리에서발전해온매우유사한메모리이지만사용방법이서로다르다. 이것들은오늘날독립된메모리소자로서도널리사용되고있으므로충분히알아둘필요가있다. EEPROM(Electrically
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)
More information인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2
ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128
More information목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기
Chapter. 9 A/D 컨버터 HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기 A/D 컨버터개요 A/D 컨버터 (Aalog-to-Digital Coverter) 아날로그신호를컴퓨터가읽을수있는병렬또는직렬의디지털데이터로변환하여주는장치 측정하려는아날로그물리량의범위및시스템의응용목적에따라분해능이나정밀도가적합한것을사용.
More informationlecture4(6.범용IO).hwp
제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장
More information목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기
Chapter. 13 KeyPAD 를이용한비밀번호입력기 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기 키패드 (KeyPAD) 키패드 (KeyPAD) 마이크로컨트롤러활용에서사용자의입력을받아들이기위한장치 전화기, 컴퓨터, 핸드폰, 냉장고등거의모든가전제품에서사용 키패드인터페이스방식
More informationPowerPoint 프레젠테이션
Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여
More informationChapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee
Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. D/A 변환기 2. 병렬 D/A 변환기로 LED 밝기제어하기 3. 직렬 D/A 변환기로 LED 밝기제어하기 D/A 변환기 D/A 변환기 (Digital to Analog Converter) 디지털데이터를아날로그전압으로변환하는소자 A/D변환기와함께마이크로프로세서응용회로에서널리사용됨.
More informationMicrosoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]
Chapter. 5 인터럽트 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기 인터럽트 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More information(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -
(Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register
More informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More information[8051] 강의자료.PDF
CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4
More informationPowerPoint 프레젠테이션
7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED
More information<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>
7 장. 인터럽트의동작 한국산업기술대학교 이응혁교수 WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,
More information인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고
CHAPTER 7 인터럽트 가. 레지스터구조이해하기 나. 엔코더제어하기 인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고급한일을처리한후에본래의일을다시수행하는것을말한다.
More information시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7
CHAPTER 12 시리얼통신 가. 레지스터구조이해하기 나. 하이퍼터미널을이용하여로봇제어하기 시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6,
More informationAVR Atmega128
AVR Atmega128 외부인터럽트 중원대학교최재영 인터럽트와폴링 MCU 에서입력을받아들이는방법은폴링방식과인터럽트방식이있음 - 폴링 (Polling) 방식 : 사용자의명령어에의해서하드웨어의변경사항을주기적으로읽어들이는방식 주기적으로하드웨어의변화를체크하기때문에사용자의프로그래밍에따라다양핚변화에대응이가능하지만 CPU 의점유율이높기때문에반응속도가느리다. 인터럽트 (Interrupt)
More informationHBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터
HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 타이머와카운터 1. 클럭과카운터 2. ATMega128 의타이머 / 카운터 3. 8 비트타이머 / 카운터의일반동작모드 4. 타이머로 LED 점멸시키기 5. 타이머로디지털시계만들기 타이머 / 카운터 타이머와카운터 정확한시간의측정이필요하다.( 자명종과스톱워치
More informationMicrosoft PowerPoint - es-arduino-lecture-03
임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습
More informationMicrosoft PowerPoint - 08-MP-8-ADC
8. A/D 변환기 순천향대학교 컴퓨터학부 이 상 정 학습 내용 ATmega28 ADC ADC 개요 ADC 레지스터 ADC 프로그램 온도센서 프로그램 순천향대학교 컴퓨터학부 이 상 정 2 ATmega28 ADC 순천향대학교 컴퓨터학부 이 상 정 3 A/D 변환기 개요 물리적인 현상(전압, 전류,온도,속도,조도,습도,압력,속,,습,압력 )들은 아날로그 값이므로
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information슬라이드 1
AVR(Atmega128) Interrupt 1 Interrupt Polling 사용자가명령어를사용하여입력핀의값을계속읽어서변화를알아냄 모든경우의입력또는값의변화에대응하여처리가가능 Interrupt MCU 자체가하드웨어적으로그변화를체크하여변화시에만일정한동작 하드웨어적으로지원되는몇개의입력또는값의변화에만대응처리가가능 처리속도는일반적인경우인터럽트가빠름 인터럽트발생시
More information목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기
Chapter. 10 외부메모리인터페이스 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기 ATMega128 의외부메모리인터페이스 ATMega128 의외부메모리인터페이스 칩외부에더큰용량의메모리나별도의주변장치들을연결하기위한인터페이스
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More informationSection 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역
Section 03 인터럽트활성화와인터럽트서비스루틴연결 33/82 Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역인터럽트활성화비트가 1 로셋되었을때
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More information// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD
Code Vison AVR C ATmega8535 ATmega8535 제어실습 Chapter 1 I / O 포트제어하기 FND 제어 FND에는 Vcc를이용하는애노드 (anode) 형과 Gnd를이용하는 cathode형이있다. LED가여러개모여있다생각하고 LED선택에따라문자와숫자를만들어낼수있다. 최대한많은영문자를만들기위해대문자와소문자를혼합한다. ( 표현가능한문자
More information<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>
테핑라인트레이서개발하기 류대우 (davidryu@newtc.co.kr) 1. 센서보드 적외선센서 1. 적외선센서 (Photo Sensor) 라인트레이서나마이크로마우혹은다른마이크로로봇에서센서로사용하는것중가장많이사용하는것이 photo sensor입니다. 거리의측정에도사용되지만원거리는잘사용하지않고근거리를측정하고자할때사용되기도하며물체의유 / 무등많은곳에서사용되고있습니다.
More informationMicrosoft Word doc
2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.
More informationAPI 매뉴얼
PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations
More informationMicrosoft PowerPoint - polling.pptx
지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식
More informationPowerPoint 프레젠테이션
KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된
More information<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>
7 장. 인터럽트의동작 한국산업기술대학교 이응혁 ehlee@kpu.ac.kr WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,
More informationINDEX 1. DataSheet 및 Circuit 1-1 DataSheet 1-2 Circuit 2. ADC 를통한조도센서, 온도센서활용. 2-1 조도센서, 온도센서활용 (ADC) 3. DBGU 를통한 LED, Relay, LCD, 초음파센서활용. 3-1 LED 토글
ARM 보고서 (AT91SAM7S256) 스마트컨트롤과정 2013 김성엽 INDEX 1. DataSheet 및 Circuit 1-1 DataSheet 1-2 Circuit 2. ADC 를통한조도센서, 온도센서활용. 2-1 조도센서, 온도센서활용 (ADC) 3. DBGU 를통한 LED, Relay, LCD, 초음파센서활용. 3-1 LED 토글 ( PIO 활용
More informationC & System
1-1 마이크로컨트롤러 (MCU) MCU = CPU Core(Architecture) + Peripherals(Controllers) 1 1-2 마이크로컨트롤러동작구조 1-3 AVR ATmega128 특징 뛰어난성능 (Advanced RISC Architecture) Most Single Clock Cycle Execution 32 X 8bit General
More information슬라이드 1
Chap7. LED, LCD 와 7- 세그먼트 켜기및 IIC 통신 LED 를켜기위한순서 1. 프로그램코딩및빌드 ( 헥사파일만들기 ) 2. 프로그램메모리라이팅 M-IDE 빌드해서핵사파일만들기 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5.
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More information(MHT-SB112\273\347\276\347\274\255.hwp)
무한테크 Digital I/O Board MHT-SB112 경기도의왕시고천동 290-2 대영골든밸리 902 호 http:// Tel : 031-450 - 6737 Fax : 031-450 - 6738 Email : info@moohantechbiz 차례 1 사용되는용도및특징 2 구성요소 3 인터페이스구성 4 아날로그입력 5 통신프로토콜 6 딥스위치설정 7 PCB
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More informationCANTUS Evaluation Board Ap. Note
Preliminary CANTUS - UART - 32bits EISC Microprocessor CANTUS Ver 1. October 8, 29 Advanced Digital Chips Inc. Ver 1. PRELIMINARY CANTUS Application Note( EVM B d ) History 29-1-8 Created Preliminary Specification
More informationKEY 디바이스 드라이버
KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More information<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>
제목 : 실험 #7 예비보고서 USART 통신제어 실험목적 - RS-232C 통신규격에대해이해한다. - ATmega128의 USART0과 USART1을이용한동기및비동기 RS-232C 통신방법을알아본다. 실험장비 - ATmega128(AVR Chip), MAX232CPE Chip, RS-232C 케이블 실험이론 - RS-232C 통신 직렬통신에는동기식과비동기식통신방법이있는데,
More informationMicrosoft PowerPoint - Chapter 8_USART Serial Communication
MEC382 마이크로프로세서응용및실습 USART Serial Communication Jee-Hwan Ryu School of Mechanical Engineering 통신방법 병렬통신 고속데이터전송이필요한곳에서이루어짐 여러개의라인에서동시에이루어짐 직렬통신 한라인에서이루어짐 데이터의송수신속도가느리다 라인수적고멀리까지통신 동기식, 비동기식있음 동기식 : 기준클럭인동기클럭라인과데이터송
More informationMicrosoft PowerPoint - 08-MP-4-interrupt
순천향대학교컴퓨터학부이상정 1 학습내용 인터럽트기본 ATmega128 인터럽트벡터외부인터럽트인터페이스외부인터럽트프로그램예 순천향대학교컴퓨터학부이상정 2 인터럽트기본 순천향대학교컴퓨터학부이상정 3 인터럽트개념 CPU 내부또는외부의요구에의해서정상적인프로그램의실행순서를변경하여보다시급한작업 ( 인터럽트서비스루틴 ) 을먼저수행한후에다시원래의프로그램으로복귀하는것 인터럽트는주변장치의서비스요청에
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationMicrosoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드]
AVR UART 통신 류대우 davidryu@newtc.co.kr 시리얼 (Serial) 통신이란? Serial 통신은하나의신호선을이용해서데이터를비트단위로보내는방식 8 비트비동기식통신콘트롤러 (UART : Universal Asynchronous Receiver Transmitter) 데이터는 LSB 부터 MSB 순으로데이터전송 Serial interface
More information2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.
C 언어와 Assembly Language 을사용한 Programming 20011.9 경희대학교조원경 1. AVR Studio 에서사용하는 Assembler AVR Studio에서는 GCC Assembler와 AVR Assmbler를사용한다. A. GCC Assembler : GCC를사용하는경우 (WinAVR 등을사용하는경우 ) 사용할수있다. New Project
More informationIoT FND8 7-SEGMENT api
IoT FND8 7-SEGMENT api http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document History
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationMicrosoft PowerPoint - 제7장 타이머와 PWM (HBE-MCU-Multi AVR).ppt [호환 모드]
Chapter. 7 타이머와 PWM HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. PWM(Pulse Width Modulatio) 2. 8비트타이머 / 카운터의동작모드 3. 16비트타이머 / 카운터 4. PWM으로 LED 밝기조절하기 5. 타이머로버저울리기 PWM(Pulse Width Modulatio) 펄스 (Pulse) 와펄스폭 (Pulse
More informationBY-FDP-4-70.hwp
RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,
More informationT100MD+
User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+
More information2009년2학기 임베디드시스템 응용
임베디드시스템기초 (#514115 ) #2. GPIO & Matrix Keypad 한림대학교전자공학과이선우 Short Review #1 General Purpose Input Output (GPIO) Output port Input port Switch 사용방법 2 General Purpose Input Output(GPIO) port 모든 MCU의가장기본적이고중요한주변장치
More informationSRC PLUS 제어기 MANUAL
,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO
More information프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어
개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,
More informationMicrosoft PowerPoint - ccs33_bios_com1_semaphore.ppt [호환 모드]
1. CCS3.3 DSP/BIOS semaphore 를이용한 COM1 시리얼통신 기존의예제프로그램을바탕으로실제현장에적용가능한 BIOS 프로그램을시작하겠습니다. 이장에서사용할 H/W 는 F28335 내부에있는 UART0 포트를사용해 PC 와 RS-232 통신을 프로세서간동기를맞추는데사용하는 semaphore 를사용해작성해보겠습니다. -Semaphore 란 C
More information<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>
연습문제해답 3-1 ATmega328P-AU는 TQFP 형태의패키지를가지면 32개의핀을가지고있다. 이중 28개핀은 ATmega328P-PU와동일한기능을가지는핀이며추가된 4개중 2개는 VCC와 GND에해당한다. 나머지 2개는 ADC6과 ADC7에해당한다. ADC6과 ADC7은아날로그입력을받을수있는핀으로 MUX에연결되어있지만다른아날로그입력핀 (ADC0 ~ ADC5)
More information슬라이드 1
Hardware/Iot Hacking AVR 프로그래밍 mongii@grayhash 마이크로컨트롤러소개 MCU = Micro Controller Unit 한마디로 작은 CPU 혹은작은컴퓨터 특수목적을수행하는소형화된 CPU 주변장치를추가해나가며기능확장 (Control) 가능 주로 C언어를이용하여프로그래밍 칩내부에 RAM과 ROM 등을포함 System on a
More informationISP and CodeVisionAVR C Compiler.hwp
USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler
More informationMicrosoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx
Team : T1 Member : 김영훈, 남장우, 황규원 Presenter : 김영훈 Statement of Purpose System Context Diagram Event List Data Flow Diagram Process Specification i Structured Charts Elevator Reservation System(ERS) -ERS는입력이들어오면입력을스케줄에저장한다.
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationWATAVR128_manual.hwp
WAT-AVR128 (ATMEGA128 Module) HOMEPAGE: E-MAIL: whiteat@whiteat.com TEL: 070-4412 - 5754 1 부 - ATMEGA128A 1. ATMEGA128A 2 1.1 특징 2 1.2 블록도 3 1.3 핀정의 4 1.4 상태레지스터 (SREG) 6 1.5 범용레지스터 7 1.6 스택포인터 (Stack
More information데이터 통신
직 / 병렬통신 1. 병렬전송 2. 직렬전송 3. RS-232 통신 4. RS-422 통신 5. RS-485 통신 직 / 병렬통신 1 전송방식 직 / 병렬통신 2 1 병렬전송 병렬전송 한번에 1 개의비트가아닌 n 개의그룹의비트를전송 n 비트를전송하기위해 n 개의전선을사용 장점 직렬전송에비해 n 배만큼전송속도가증가 단점 가격이비싸다 짧은거리만가능 직 / 병렬통신
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information<BDC7C7E83820BFB9BAF1BAB8B0EDBCAD2E687770>
제목 : 실험 #8 예비보고서 ADC 제어 실험목적 - ADC를이용하여아날로그신호를디지털신호로변환하는과정을이해한다. - ATmega128의내장 ADC 제어방법을이해한다. 실험장비 - ATmega128(AVR Chip), 온도센서 (TC1047A), 조도센서 (TSL251R) 실험이론 - A/D 변환 아날로그신호 샘플링펄스 - A/D 변환과정 - A/D 변환과정은샘플
More informationFormatvorlage für Arbeitsanweisungen
Page 1 of 11 비접촉온도측정 근거리온도측정 Small Size High Accuracy 디지털인터페이스 (SPI 프로토콜 ) 제품설명 DTS-M300 은적외선온도센서를기반으로한접촉하지않고원하는대상에온도를정확히측정할수있는온도센서모듈입니다. DTS-M300 은접촉을하지않고원하는물체표면에온도를 1 초이내에정확하게측정할수있는온도센서모듈입니다. DTS-M300
More informationPowerPoint 프레젠테이션
A 반 T2 - 김우빈 (201011321) 임국현 (201011358) 박대규 (201011329) Robot Vacuum Cleaner 1 Motor Sensor RVC Control Cleaner Robot Vaccum Cleaner 2 / Event Format/ Type Front Sensor RVC 앞의장애물의유무를감지한다. True / False,
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationMicrosoft Word ARM_ver2_0a.docx
[Smart]0703-ARM 프로그램설치 _ver1_0a 목차 1 윈도우기반으로리눅스컴파일하기 (Cygwin, GNU ARM 설치 )... 2 1.1 ARM datasheet 받기... 2 1.2 Cygwin GCC-4.0 4.1 4.2 toolchain 파일받기... 2 1.3 Cygwin 다운로드... 3 1.4 Cygwin Setup... 5 2 Cygwin
More informationTEL: 042-863-8301~3 FAX: 042-863-8304 5 6 6 6 6 7 7 8 8 9 9 10 10 10 10 10 11 12 12 12 13 14 15 14 16 17 17 18 1 8 9 15 1 8 9 15 9. REMOTE 9.1 Remote Mode 1) CH Remote Flow Set 0 2) GMate2000A
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터
More information<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>
제목 : 실험 #5 예비보고서 Interrupt 제어 실험목적 - Interrupt에대한기초지식을알아본다. - Atmega128의 Interrupt를사용해보고, 동작방식과동작방법및특징을확인한다. 실험장비 - ATmega128(AVR Chip), Switch, LED(Green-LED) 실험이론 - 인터럽트 (Interrupt) 인터럽트는프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생을말한다.
More informationMicrosoft Word - FS_ZigBee_Manual_V1.3.docx
FirmSYS Zigbee etworks Kit User Manual FS-ZK500 Rev. 2008/05 Page 1 of 26 Version 1.3 목 차 1. 제품구성... 3 2. 개요... 4 3. 네트워크 설명... 5 4. 호스트/노드 설명... 6 네트워크 구성... 6 5. 모바일 태그 설명... 8 6. 프로토콜 설명... 9 프로토콜 목록...
More information뉴티씨 (NEWTC) 2. FB-CY4E-DEV (FPGA 개발 키트) 구성도 Port Select SW 7 Segment Text LCD UART RS-232C JTAG PORTA (5V) Active Serial PORTB (5V) OSC. 50MHz Analog
뉴티씨 (NEWTC) FPGA 개발 키트 (FB-CY4E-DEV) 매뉴얼 (주) 뉴티씨 ( NEWTC ) 1. FB-CY4E-DEV (FPGA 개발 키트) 소개 ALTERA 사의 FPGA(EP4CE6E22C8N)를 이용한 개발보드 입니다. USB 블래스터(FM-USBBLASTER) 를 이용하여 프로그램을 다운로드 가능 LCD, FND(7-Segment), 스위치
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information2. Deferred Interrupt Processing A. Binary Semaphores를이용한동기 (Synchronization) i. Binary Semaphores는 Interrupt가발생하였을때특정한 를 Unblock 하는데사용할수있다. 이러한기능은 In
AVR FreeRTOS : Interrupt Management 1. 이장의개요 Embedded Real Time 시스템은주변장치로부터발생하는 Event 에실시간으로응답하여야하는응용분야에많이이용된다. 응용분야에따라서는여러개의 Interrupt Source로부터발생하는 Event를실시간으로처리하여야하고, 각각의 Interrupt 처리는서로다른처리시간과속도를필요로하기때문에최적의
More informationRVC Robot Vaccum Cleaner
RVC Robot Vacuum 200810048 정재근 200811445 이성현 200811414 김연준 200812423 김준식 Statement of purpose Robot Vacuum (RVC) - An RVC automatically cleans and mops household surface. - It goes straight forward while
More informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More informationuntitled
int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015
More information