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

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기

슬라이드 1

2주차: 입출력 제어 복습

시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7

K&R2 Reference Manual 번역본

정보보안 개론과 실습:네트워크

MAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다

ATmega128

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

ATmega128 교재 - 8장 EEPROM.hwp

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

Microsoft PowerPoint - 제7장 타이머와 PWM (HBE-MCU-Multi AVR).ppt [호환 모드]

<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Microsoft PowerPoint - 08-MP-8-ADC

C & System

슬라이드 1

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

CANTUS Evaluation Board Ap. Note

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

Microsoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드]

2. Deferred Interrupt Processing A. Binary Semaphores를이용한동기 (Synchronization) i. Binary Semaphores는 Interrupt가발생하였을때특정한 를 Unblock 하는데사용할수있다. 이러한기능은 In

lecture4(6.범용IO).hwp

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

슬라이드 1

목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기

데이터 통신

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

CodevisionAVR C compiler 사용법 ( 요약 ) (1) 1.1 마이크로프로세서시스템회로도및동작 마이크로콘트롤러 ATmega128 내부회로도 AVR 의구조및종류 ATmega128 Pin 배치및내장 I/O 종류 A

Microsoft PowerPoint - 08-MP-4-interrupt

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

AVR Atmega128

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

T100MD+

PowerPoint 프레젠테이션

AVR128 자료.hwp

Chapter #01 Subject

untitled

<BDC7C7E83820BFB9BAF1BAB8B0EDBCAD2E687770>

Microsoft PowerPoint - 9.Serial.pptx

[8051] 강의자료.PDF

Page 2 of 21 Absolute Maximum Ratings Absolute Maximum Rating 값을초과하는조건에서 DTPML을동작시킬경우치명적인손상을 가할수있습니다. Parameter Symbol Conditions min Typ Max Unit Sup

AN_0005B_UART

키트전자 KE-RC-B 코드비젼

1. 제품소개 그림. 1.1 이란? DC 모터구동시하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 입니다. 또한당사 DEV 보드와 1P 점퍼클립케이블을이용하여연동이가능하며, 산업용 DC 모터의정회전, 역회전구동및속도제어시유용하게사용되는 입니다.

ATmega128 Architecture Pin Configurations 1 Jo Sang Min DanKook Univ. E.E. Electron - Func1 Func2 Func3 PIN Num VCC Digit

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

USB3-FRM13 API 매뉴얼

<C3CA3520B0FAC7D0B1B3BBE7BFEB202E687770>

歯9장.PDF

IoT FND8 7-SEGMENT api

歯MW-1000AP_Manual_Kor_HJS.PDF

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - es-arduino-lecture-03

목차 1. 요약 1-1. 의개요와특징 Page 주요사양요약 Page 3 2. Dynamixel 기동 2-1. 기계부조립방법 Page Connector 조립 Page Dynamixel의배선연결 Page 5 3. Communicatio

쉽게 풀어쓴 C 프로그래밍

WATAVR128_manual.hwp

Formatvorlage für Arbeitsanweisungen

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp


API 매뉴얼

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

중간고사

MPLAB C18 C

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Page 2 of 27 Absolute Maximum Ratings - Supply voltage : 3.5V - Operating Temperature Range : -20 ~ 70 - Storage Temperature Range : -40 ~ 85 위조건을넘어서게

Microsoft PowerPoint - chap12-고급기능.pptx

2009년2학기 임베디드시스템 응용

Microsoft Word doc

Microsoft PowerPoint - Chapter 8_USART Serial Communication

PowerPoint 프레젠테이션

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

C++-¿Ïº®Çؼ³10Àå

Microsoft PowerPoint - polling.pptx

교육지원 IT시스템 선진화

PowerPoint 프레젠테이션

AN2629

PowerPoint 프레젠테이션

C프로-3장c03逞풚

chap7.key

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

Transcription:

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 16000000UL UART PORT1 void UARTInit1(unsigned long baud); UART 초기화함수. void SerialPutchar1(char ch); 문자송신함수. char SerialGetchar1(); 문자수신함수. #endif UART.c ============================================================== main.c : 메인함수. rx 받은문자를1초마다전송해주는프로그램. ============================================================== #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <compat/deprecated.h> #include "uart.h" volatile char rx; int main() DDRC = 0x03; LED OUTPUT(PORTC 0,1) PORTC = 0; LED ON DDRD = 0x10; 485 TX/RX OUTPUT(PORTD 4) DIR_RXD; RX mode UARTInit1(57600); 1 번 uart init(baudrate : 57600) while(1) DIR_TXD; 1

SerialPutchar1(rx); while(!bit_is_set(ucsr1a,6) ); DIR_RXD; _delay_ms(1000); return 0; ============================================================== UART.c : UART통신에필요한함수. 사용함수 : UDRn = x; 또는x = UDRn;, ISR(vect) UARTInit0(1) 함수내의레지스터세팅후사용. ============================================================== SIGNAL(USART1_RX_vect) rx = UDR1; / UART PORT1 void UARTInit1(unsigned long baud) unsigned short ubrr; if(baud == 115200) ubrr = (unsigned short)(cpu_clock_hz/(16*baud)); else ubrr = (unsigned short)(cpu_clock_hz/(16*baud)-1); UCSR1A = (0 << U2X1) (0 << MPCM1); UCSR1B = (1 << RXCIE1) (0 << TXCIE1) (0 << UDRIE1) (1 << RXEN1) (1 << TXEN1) (0 << UCSZ12); UCSR1C = (0 << 7) (1 << UCSZ11) (1 << UCSZ10) (0 << UMSEL1) (0 << UPM11) (0 << UPM10) (0 << USBS1) (0 << UCPOL1); UBRR1H = (unsigned char) (ubrr >> 8); 상위바이트 UBRR1L = (unsigned char) ubrr; 하위바이트 BAUDRATE. 103 : 9600BAUD. SREG = 0x80; sei(); GLOBAL Interrupt Enable 2

void SerialPutchar1(char ch) while(!bit_is_set(ucsr1a,5)); UCSR1A = 0x40; UDR1 = ch; char SerialGetchar1() char ch; while(!bit_is_set(ucsr1a,6) ); ch = UDR1; return ch; 3

Encoder.h #ifndef _main_h_ #define _main_h_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define MOTOR_RIGHT #define MOTOR_LEFT #define MOTOR_STOP sbi(portb,0), cbi(portb,1) cbi(portb,0), sbi(portb,1) cbi(portb,0), cbi(portb,1) #define CPU_CLOCK_HZ 16000000UL void InterruptInit(); extern volatile int cnt; void TCInit0(); void TCInit1(); void TCInit2(); void TCInit3(); UART PORT1 void UARTInit1(unsigned long baud); void SerialPutchar1(char ch); char SerialGetchar1(); #endif Encoder.c ============================================================== main.c : 메인함수. 모터정방향구동및엔코더데이터를받을수있는프로그램. ============================================================== #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <compat/deprecated.h> #include "encoder.h" 4

volatile int cnt = 0; int main() DDRC = 0x03; LED OUTPUT(PORTC 0,1) PORTC = 0; LED ON DDRB = 0xff; MOTOR_STOP; MOTOR OUTPUT MOTOR STOP DDRD = 0x10; 485 TX/RX OUTPUT(PORTD 4) DIR_TXD; TX mode UARTInit1(57600); 1 번 uart init(baudrate : 57600) InterruptInit(); Interrupt initial setting sbi(portd,0); 내부풀업저항설정. sbi(portd,1); TCInit1(); Timer/counter 모드 initial setting MOTOR_RIGHT; motor 구동. while(1) SerialPutchar1(cnt); _delay_ms(1000); return 0; ============================================================== UART : UART통신에필요한함수. 사용함수 : UDRn = x; 또는x = UDRn;, ISR(vect) ============================================================== / UART PORT1 void UARTInit1(unsigned long baud) unsigned short ubrr; if(baud == 115200) ubrr = (unsigned short)(cpu_clock_hz/(16*baud)); else ubrr = (unsigned short)(cpu_clock_hz/(16*baud)-1); 5

UCSR1A = (0 << U2X1) (0 << MPCM1); UCSR1B = (0 << RXCIE1) (0 << TXCIE1) (0 << UDRIE1) (1 << RXEN1) (1 << TXEN1) (0 << UCSZ12); UCSR1C = (0 << 7) (1 << UCSZ11) (1 << UCSZ10) (0 << UMSEL1) (0 << UPM11) (0 << UPM10) (0 << USBS1) (0 << UCPOL1); UBRR1H = (unsigned char) (ubrr >> 8); 상위바이트 UBRR1L = (unsigned char) ubrr; 하위바이트 SREG = 0x80; GLOBAL Interrupt Enable sei(); void SerialPutchar1(char ch) while(!(ucsr1a & (1 << UDRE))); UDR1 = ch; char SerialGetchar1() char ch; while(!(ucsr1a & (1<<RXC))); ch = UDR1; return ch; ============================================================== Timer : 타이머 / 카운터구동에필요한함수. 사용함수 : ISR(vect); 혹은SIGNAL(vect) ============================================================== 16bit timer/counter Register void TCInit1() TCCR1A = (0 << COM1A1) (0 << COM1A0) (0 << COM1B1) (0 << COM1B0) (0 << COM1C1) (0 << COM1C0) (0 << WGM11) (0 << WGM10); TCCR1B = (0 << WGM13) (0 << WGM12) (0 << CS12) (0 << CS11) (0 << CS10); TCCR1C = (0 << FOC1A) (0 << FOC1B) (0 << FOC1C); TCCR1A = 0xA2; TCCR1B = 0x11; TIMSK = (0 << OCIE1A) (0 << OCIE1B) (0 << TICIE1) (0 << TOIE1); TIMSK = 0x01; ETIMSK = (0 << OCIE1C); 설정값 (MAX/MIN data) 6

ICR1 = 1000; OCR1A = 800; OCR1B = 800; duty TCNT1H = ; TCNT1L = ; SREG = 0x80; sei(); ============================================================== Interrupt : 인터럽트레지스터설정및구동에필요한함수. 사용함수 : ISR(vect); 혹은SIGNAL(vect) ============================================================== SIGNAL(INT0_vect) interrupt routine cnt++; if(cnt == 5000) cnt = 0; void InterruptInit() EICRA = (0 << ISC31) (0 << ISC30) (0 << ISC21) (0 << ISC20) (1 << ISC11) (0 << ISC10) (1 << ISC01) (0 << ISC00); EICRB = (0 << ISC71) (0 << ISC70) (0 << ISC61) (0 << ISC60) (0 << ISC51) (0 << ISC50) (0 << ISC41) (0 << ISC40); EIMSK = (0 << INT7) (0 << INT6) (0 << INT5) (0 << INT4) (0 << INT3) (0 << INT2) (1 << INT1) (1 << INT0); sei(); 전역인터럽트허용 7

ADC.h #ifndef _main_h_ #define _main_h_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ 16000000UL #define BUFFER_LENGTH 20 #define MAX_PACKET 5 UART PORT1 void UARTInit1(unsigned long baud); void SerialPutchar1(char ch); char SerialGetchar1(); void ADCInit(); int ADCget(); #endif ADC.c ============================================================== main.c : 메인함수. 1초마다ADC핀에서받은analog값을char 형태로전송한다. ============================================================== #include <avr/io.h> #include <util/delay.h> #include <compat/deprecated.h> #include <avr/interrupt.h> #include "adc.h" int main() int adc; DDRC = 0x03; LED OUTPUT(PORTC 0,1) PORTC = 0; LED ON DDRD = 0x10; 485 TX/RX OUTPUT(PORTD 4) DIR_TXD; TX mode 8

UARTInit1(57600); 1 번 uart init(baudrate : 57600) ADCInit(); ADC init; while(1) adc = ADCget(); SerialPutchar1(adc/256); SerialPutchar1(adc%256); _delay_ms(1000); return 0; ============================================================== ADC : ADC변환에필요한함수. 사용함수 : ADCget(); ============================================================== void ADCInit() ADMUX = 0x40; ADCSRA = 0xe7; ADMUX = (0 << REFS1) (0 << REFS0) (0 << ADLAR); ADCSRA = (0 << ADEN) (0 << ADIE) (0 << ADPS2) (0 << ADPS1) (0 << ADPS0); int ADCget() int ADCR; ADMUX = 0x40; ADMUX = (0 << MUX4) (0 << MUX3) (0 << MUX2) (0 << MUX1) (0 << MUX0); ADCSRA = (1 << ADSC); while((adcsra & 0x10) == 0x00); 변환종료 ADCR = (int)adcl + ((int)adch<<8); return ADCR; 9

============================================================== UART : UART통신에필요한함수. 사용함수 : UDRn = x; 또는x = UDRn;, ISR(vect) ============================================================== / UART PORT1 void UARTInit1(unsigned long baud) unsigned short ubrr; if(baud == 115200) ubrr = (unsigned short)(cpu_clock_hz/(16*baud)); else ubrr = (unsigned short)(cpu_clock_hz/(16*baud)-1); UCSR1A = (0 << U2X1) (0 << MPCM1); UCSR1B = (1 << RXCIE1) (0 << TXCIE1) (0 << UDRIE1) (1 << RXEN1) (1 << TXEN1) (0 << UCSZ12); UCSR1C = (0 << 7) (1 << UCSZ11) (1 << UCSZ10) (0 << UMSEL1) (0 << UPM11) (0 << UPM10) (0 << USBS1) (0 << UCPOL1); UBRR1H = (unsigned char) (ubrr >> 8); 상위바이트 UBRR1L = (unsigned char) ubrr; 하위바이트 BAUDRATE. 103 : 9600BAUD. SREG = 0x80; sei(); GLOBAL Interrupt Enable void SerialPutchar1(char ch) while(!(ucsr1a & (1 << UDRE))); UDR1 = ch; char SerialGetchar1() char ch; while(!(ucsr1a & (1<<RXC))); ch = UDR1; return ch; 10