<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

Size: px
Start display at page:

Download "<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>"

Transcription

1 연습문제해답 3-1 ATmega328P-AU는 TQFP 형태의패키지를가지면 32개의핀을가지고있다. 이중 28개핀은 ATmega328P-PU와동일한기능을가지는핀이며추가된 4개중 2개는 VCC와 GND에해당한다. 나머지 2개는 ADC6과 ADC7에해당한다. ADC6과 ADC7은아날로그입력을받을수있는핀으로 MUX에연결되어있지만다른아날로그입력핀 (ADC0 ~ ADC5) 과다르게디지털입출력핀으로는사용할수없다

2 4-1 ATmega328P는내부발진회로를사용하여 8MHz로동작할수있으므로내부 8MHz를사용하도록설정된경우에는전원만주어지면동작할수있다. 스케치업로드를위한연결커넥터만연결하면스케치업로드장치를통해전원을공급받을수있으므로별도의전원도필요하지않다. 다만, 스케치업로드가완료된이후독립적으로동작하기위해서는전원을준비하여야한다 종류의마이크로컨트롤러는메모리의크기, 부트로더의지원, 그리고인터럽트벡터크기를제외하면거의동일한사용을가지고있다. 한가지주의할점은마이크로컨트롤러에따라고유의값이정해져있으므로단순히마이크로컨트롤러를교체한다고해서동작하지는않는다는점이다

3 ATmega48 ATmega88 ATmega168 ATmega328 플래시 (KByte) EEPROM (Byte) RAM (KByte) 부트로더지원 인터럽트벡터크기 1 instruction word/vector 1 instruction word/vector 2 instruction word/vector 2 instruction word/vector AVR에서의부트로더는프로그램메모리영역의특정위치에존재하는프로그램이다. 반면컴퓨터에서의부트로더는전용칩에내장되어있다. 2. AVR이부팅될때부트로더는사용하거나사용하지않도록퓨즈를통해설정될수있다. 반면컴퓨터의부트로더는가장먼저실행된다. 3. AVR의부트로더는부팅시다운로드할새로운프로그램의존재여부를검사하여프로그램을다운로드하고설치하기위해사용된다. 반면컴퓨터의부트로더는하드웨어장치를검사하고운영체제가시작될수있도록하드디스크의특정위치 (boot record) 에서실행이시작되도록하기위해사용된다. 9-2 코드 9-2 #define F_CPU L #include <avr/io.h> #include <util/delay.h> int main(void) char patterns[] = 0x81, 0x42, 0x24, 0x18, 0x24, 0x42; DDRD = 0xFF; while(1) - 3 -

4 for(int i = 0; i < 6; i++) PORTD = patterns[i]; _delay_ms(1000); return 1; 9-3 코드 9-3 #define F_CPU L #include <avr/io.h> #include <util/delay.h> int main(void) DDRD = 0xFF; char pattern_previous = 0x00, pattern_current; while(1) for(int i = 0; i < 8; i++) char p1 = 0x01 << i; char p2 = 0x01 << (7 - i); pattern_current = p1 p2; if(pattern_current == pattern_previous) continue; pattern_previous = pattern_current; - 4 -

5 PORTD = pattern_current; _delay_ms(1000); return 1; 10-1 TTL 레벨은 CPU에서동작하는전압레벨을그대로사용하여통신하는것을말한다. 따라서 CPU 의종류에따라 TTL 레벨은다를수있다. 아두이노우노에사용된 ATmega328의경우 5V를사용하므로 5V를기준으로통신이이루어진다. TTL 레벨은전압이낮아먼거리로전송이어렵다. 따라서 RS232의경우이를증폭하여먼거리로전송이가능하도록만든것이다. RS232는 1969 년미국 EIA(Electric Industries Association) 에의해직렬통신을위한표준인터페이스로정의되었다. RS232는 3V에서 25V사이의전압을논리 1, +3V에서 +25V 사이의전압을논리 0으로나타내는부논리 (negative logic) 를사용하며일반적으로컴퓨터에서는 +13V와 13V로논리 0과논리 1을표현한다. (a) TTL 레벨 - 5 -

6 (b) RS-232 레벨 10-2 코드 10-2 #define F_CPU L #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include "UART.h" void UART_printFloat(float value, int n) int upper; if((int)value == 0) upper = 1; else upper = log10(value) + 1; char str[21]; // 최대 20자리이하로가정 int value_integer = (int)value; for(int i = upper; i > 0; i--) str[i - 1] = (value_integer % 10) + '0'; value_integer /= 10; - 6 -

7 str[upper] = '\0'; if(n > 0) float value_below = value - (int)value; str[upper] = '.'; for(int i = 0; i < n; i++) str[upper i] = (int)(value_below * 10) + '0'; value_below *= 10; value_below -= (int)value_below; str[upper n] = '\0'; UART_printString(str); int main(int argc, char *argv[]) float pi = ; UART_INIT(); for(int i = 0; i < 8; i++) UART_printFloat(pi, i); UART_printString("\n"); while (1) return 0;

8 코드 C 스타일 #define F_CPU L #include <avr/io.h> #include <util/delay.h> #include <string.h> #include "UART.h" int main(void) int counter = 100; int index = 0; int process_data = 0; char buffer[20] = ""; char data; UART_INIT(); UART_printString("Current Counter Value : "); UART_print16bitNumber(counter); UART_printString("\n"); while(1) data = UART_receive(); if(data == '\r' data == '\n') buffer[index] = '\0'; process_data = 1; else buffer[index] = data; index++; - 8 -

9 if(process_data == 1) if(strlen(buffer) == 0) else if(strcasecmp(buffer, "DOWN") == 0) counter--; UART_printString("Current Counter Value : "); UART_print16bitNumber(counter); UART_printString("\n"); else if(strcasecmp(buffer, "UP") == 0) counter++; UART_printString("Current Counter Value : "); UART_print16bitNumber(counter); UART_printString("\n"); else UART_printString("** Unknown Command **"); UART_printString("\n"); index = 0; process_data = 0; 코드 아두이노스타일 boolean process_data = false; int counter = 100; String buffer = ""; void setup() Serial.begin(9600); Serial.print("Current Counter Value : "); - 9 -

10 Serial.println(counter); void loop() if(serial.available()) char data = Serial.read(); if(data == '\r' data == '\n') process_data = true; else buffer = buffer + data; if(process_data) if(buffer.length() == 0) else if(buffer.equalsignorecase("down")) counter--; Serial.print("Current Counter Value : "); Serial.println(counter); else if(buffer.equalsignorecase("up")) counter++; Serial.print("Current Counter Value : "); Serial.println(counter); else Serial.println("** Unknown Command **"); process_data = false; buffer = "";

11 11-2 코드 C 스타일 #define F_CPU UL #include <avr/io.h> #include <util/delay.h> #include "UART.h" void INIT_PORT(void) DDRD &= 0x0F; int main(void) UART_INIT(); INIT_PORT(); while(1) uint8_t data = PIND; for(int i = 7; i > 3; i--) if(bit_is_set(data, i)) UART_printString("O "); else UART_printString("X "); UART_printString("\n"); _delay_ms(1000); 코드 아두이노스타일

12 void setup() for(int i = 4; i <= 7; i++ ) pinmode(i, INPUT); Serial.begin(9600); void loop() for(int i = 7; i >= 4; i--) if(digitalread(i)) Serial.print("O "); else Serial.print("X "); Serial.println(); delay(1000); 11-3 코드 C 스타일 #define F_CPU UL #include <avr/io.h> #include <util/delay.h> void INIT_PORT(void) DDRB = 0x20; PORTB = 0x00;

13 int main(void) uint8_t state = 0; INIT_PORT(); while(1) uint8_t data = PIND; if(data & 0x10) state = 1; _delay_ms(50); if(data & 0x20) state = 0; _delay_ms(50); PORTB = (state << 5); 코드 아두이노스타일 boolean state = false; void setup() pinmode(13, OUTPUT); digitalwrite(13, state); void loop() if(digitalread(4))

14 state = true; delay(50); if(digitalread(5)) state = false; delay(50); digitalwrite(13, state); 12-2 코드 C 스타일 #define F_CPU L #include <avr/io.h> #include <util/delay.h> void ADC_INIT(unsigned char channel) ADMUX = 0x40; // AVCC 를기준전압으로선택 ADCSRA = 0x07; ADCSRA = (1 << ADEN); ADCSRA = (1 << ADATE); // 분주비설정 // ADC 활성화 // 자동트리거모드 ADMUX = ((ADMUX & 0xE0) channel);// 채널선택 ADCSRA = (1 << ADSC); // 변환시작 int read_adc(void) while(!(adcsra & (1 << ADIF))); // 변환종료대기

15 return ADC; // 10 비트값을반환 void PORT_INIT(void) DDRD = 0xFF; int main(void) int value; uint8_t on_off; ADC_INIT(0); PORT_INIT(); while(1) value = read_adc() >> 7; on_off = (0x01 << value); PORTD = on_off; 코드 아두이노스타일 int LED_pins[] = 0, 1, 2, 3, 4, 5, 6, 7; void setup() for(int i = 0; i < 8; i++) pinmode(led_pins[i], OUTPUT);

16 digitalwrite(led_pins[i], LOW); void loop() int value = analogread(a0) >> 7; for(int i = 0; i < 8; i++) if(i == value) digitalwrite(led_pins[i], HIGH); else digitalwrite(led_pins[i], LOW); 12-3 코드 12-3 void setup() Serial.begin(9600); void loop() int value1 = analogread(a0); delay(20); value1 = analogread(a0); int value2 = analogread(a1); delay(20); value2 = analogread(a1);

17 Serial.println(String(value1) + " : " + value2 + " ==> " + abs(value1 - value2)); delay(1000); 13-1 코드 13-1 #include <avr/io.h> #define F_CPU UL #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t state = 0; ISR(INT0_vect) state = (state + 1) % 2; void INIT_PORT(void) DDRB = 0x20; PORTB = 0x00; DDRD = 0x00; PORTD = 0x04; void INIT_INT0(void) EIMSK = (1 << INT0);

18 EICRA = (1 << ISC00); sei(); int main(void) INIT_PORT(); INIT_INT0(); while(1) if(state == 0) PORTB = 0x20; else PORTB = 0x00; 13-2 코드 13-2 #include <avr/io.h> #define F_CPU UL #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t state = 0; ISR(INT0_vect) state = (state + 1) % 2; void INIT_PORT(void)

19 DDRB = 0x20; PORTB = 0x00; DDRD = 0x00; PORTD = 0x04; void INIT_INT0(void) EIMSK = (1 << INT0); EICRA = (1 << ISC01); sei(); int main(void) INIT_PORT(); INIT_INT0(); while(1) if(state == 0) PORTB = 0x00; else PORTB = 0x20; 13-3 코드 13-3 volatile byte count = 0; byte count_previous = 0; ISR(PCINT2_vect)

20 count++; void setup() Serial.begin(9600); pinmode(4, INPUT_PULLUP); pinmode(5, INPUT_PULLUP); PCICR = (1 << PCIE2); PCMSK2 = (1 << PCINT20) (1 << PCINT21); void loop() if(count!= count_previous) Serial.println(String("Current Count : ") + count); count_previous = count; 14-2 코드 14-2 #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t pattern = 1; ISR(TIMER1_COMPA_vect)

21 TCNT1 = 0; pattern = pattern + 1; if(pattern > 6) pattern = 1; int main(void) DDRD = 0xFF; PORTD = 0; TCCR1B = (1 << CS12) (1 << CS10); OCR1A = 0x2000; TIMSK1 = (1 << OCIE1A); sei(); while(1) int LED_count; if(pattern < 5) LED_count = 2 * pattern; else LED_count = (8 - pattern) * 2; uint8_t on_off = 0; for(int i = 0; i < LED_count; i++) on_off = (1 << i); PORTD = on_off;

22 코드 15-2 byte interval_array[] = 2000 / 512, 5000 / 512; volatile byte interval = interval_array[0]; byte index = 0; void change_delay() index = (index + 1) % 2; interval = interval_array[index]; void setup() pinmode(11, OUTPUT); pinmode(2, INPUT_PULLUP); attachinterrupt(0, change_delay, FALLING); void loop() for(int i = 0; i < 256; i++) analogwrite(11, i); delay(interval); for(int i = 254; i > 0; i--) analogwrite(11, i); delay(interval); 17-2 코드

23 #include <Wire.h> #define RTC_ADDRESS 0x68 int count = 0; uint8_t bcd_to_decimal(uint8_t bcd) return (bcd >> 4) * 10 + (bcd & 0x0F); uint8_t decimal_to_bcd(uint8_t decimal) return ( ((decimal / 10) << 4) (decimal % 10) ); byte bin2bcd(int n) byte val = 0; int ten = n / 10; int one = n % 10; val = (ten << 4) one; return val; void timesetting(int _year, int _month, int _day, int _hour, int _min, int _sec, int _day_of_week) Wire.beginTransmission(RTC_ADDRESS); Wire.write(0); Wire.write(decimal_to_bcd(_sec)); Wire.write(decimal_to_bcd(_min)); Wire.write(decimal_to_bcd(_hour)); Wire.write(decimal_to_bcd(_day_of_week)); Wire.write(decimal_to_bcd(_day)); Wire.write(decimal_to_bcd(_month)); Wire.write(decimal_to_bcd(_year));

24 Wire.write(0x10); Wire.endTransmission(); void RTCinterrupt() Serial.println("RTC Interrupt " + String(++count)); void setup() Serial.begin(9600); Wire.begin(); attachinterrupt(0, RTCinterrupt, FALLING); // 2014년 9월 1일 12시 34분 56초월요일로초기화 timesetting(14, 9, 1, 12, 34, 56, 2); void loop() 19-1 코드 19-1 #define F_CPU L #include <avr/io.h> #include <avr/interrupt.h> #define CLOCKS_PER_MICRO ( F_CPU / L ) #define CLOCKS_TO_MICROSECONDS(a) ( (a) / CLOCKS_PER_MICRO ) #define MICROSECONDS_PER_TIMER0_OVERFLOW ( CLOCKS_TO_MICROSECONDS(64 * 256) )

25 #define MILLIS_INCREMENT_PER_OVERFLOW ( MICROSECONDS_PER_TIMER0_OVERFLOW / 1000 ) #define MICROS_INCREMENT_PER_OVERFLOW ( MICROSECONDS_PER_TIMER0_OVERFLOW % 1000 ) volatile unsigned long timer0_millis = 0; volatile int timer0_micros = 0; ISR(TIMER0_OVF_vect) unsigned long m = timer0_millis; int f = timer0_micros; m += MILLIS_INCREMENT_PER_OVERFLOW; f += MICROS_INCREMENT_PER_OVERFLOW; int micro_to_millis = f / 1000; m += micro_to_millis; f = f % 1000; timer0_millis = m; timer0_micros = f; unsigned long millis() unsigned long m; uint8_t oldsreg = SREG; cli(); m = timer0_millis; SREG = oldsreg; return m;

26 int main(void) uint8_t numbers[] = 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6; int count = 0; DDRD = 0xFF; PORTD = numbers[0]; TCCR0B = (1 << CS01) (1 << CS00); TIMSK0 = (1 << TOIE0); sei(); unsigned long time_previous, time_current; time_previous = millis(); while(1) time_current = millis(); if((time_current - time_previous) > 1000) time_previous = time_current; count = count - 1; if(count < 0) count = 9; PORTD = numbers[count]; return 1;

27 코드 19-2 #define F_CPU L #include <avr/io.h> #include <avr/interrupt.h> #define CLOCKS_PER_MICRO ( F_CPU / L ) #define CLOCKS_TO_MICROSECONDS(a) ( (a) / CLOCKS_PER_MICRO ) #define MICROSECONDS_PER_TIMER0_OVERFLOW ( CLOCKS_TO_MICROSECONDS(64 * 256) ) #define MILLIS_INCREMENT_PER_OVERFLOW ( MICROSECONDS_PER_TIMER0_OVERFLOW / 1000 ) #define MICROS_INCREMENT_PER_OVERFLOW ( MICROSECONDS_PER_TIMER0_OVERFLOW % 1000 ) volatile unsigned long timer0_millis = 0; volatile int timer0_micros = 0; ISR(TIMER0_OVF_vect) unsigned long m = timer0_millis; int f = timer0_micros; m += MILLIS_INCREMENT_PER_OVERFLOW; f += MICROS_INCREMENT_PER_OVERFLOW; int micro_to_millis = f / 1000; m += micro_to_millis; f = f % 1000; timer0_millis = m; timer0_micros = f; unsigned long millis()

28 unsigned long m; uint8_t oldsreg = SREG; cli(); m = timer0_millis; SREG = oldsreg; return m; int main(void) uint8_t numbers[] = 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02; int count = 0; DDRD = 0xFF; PORTD = numbers[0]; TCCR0B = (1 << CS01) (1 << CS00); TIMSK0 = (1 << TOIE0); sei(); unsigned long time_previous, time_current; time_previous = millis(); while(1) time_current = millis(); if((time_current - time_previous) > 200) time_previous = time_current; count = (count + 1) % 6; PORTD = numbers[count];

29 return 1; 19-3 코드 19-3 int segment_pins[] = 0, 1, 2, 3, 4, 5, 6, 7; uint8_t numbers[] = 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6; unsigned long time_previous, time_current; int button_pin = 8; int count = 0; boolean go_on = true; void setup() for(int i = 0; i < 8; i++) pinmode(segment_pins[i], OUTPUT); pinmode(button_pin, INPUT_PULLUP); time_previous = millis(); void loop() time_current = millis(); if(go_on) if(time_current - time_previous > 1000)

30 time_previous = time_current; for(int i = 0; i < 8; i++) boolean on_off = bitread(numbers[count], i); digitalwrite(segment_pins[i], on_off); count = (count + 1) % 10; else time_previous = time_current; if(!digitalread(button_pin)) go_on =!go_on; delay(100); 20-1 코드 20-1 int rows[] = 2, 3, 4, 5, 6, 7, 8, 9; int cols[] = 10, 11, 12, 13, A0, A1, A2, A3; unsigned long time_previous, time_current; int start_index = 0; byte smile[] = 0b , 0b , 0b , 0b , 0b ,

31 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b ; void setup() for(int i = 0; i < 8; i++) pinmode(rows[i], OUTPUT); pinmode(cols[i], OUTPUT); time_previous = millis(); void loop() time_current = millis(); if(time_current - time_previous > 500) time_previous = time_current; start_index = (start_index + 1) % 16; for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) digitalwrite(rows[j], LOW);

32 byte col_data = ~(1 << i); for(int j = 0; j < 8; j++) digitalwrite(cols[j], (col_data >> j) & 0x01); for(int j = 0; j < 8; j++) digitalwrite(rows[j], (smile[start_index + i] >> (7 - j)) & 0x01); delay(2); 20-2 코드 20-2 int rows[] = 2, 3, 4, 5, 6, 7, 8, 9; int cols[] = 10, 11, 12, 13, A0, A1, A2, A3; unsigned long time_previous, time_current; int index = 0; byte patterns[10][8] = 0x00, 0x7e, 0x81, 0x81, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x40, 0xff, 0x00, 0x00, 0x00, 0x00, 0x41, 0x83, 0x85, 0x89, 0x91, 0x61, 0x00, 0x00, 0x42, 0x81, 0x91, 0x91, 0x91, 0x6e, 0x00, 0x00, 0x18, 0x28, 0x48, 0x88, 0xff, 0x08, 0x00, 0x00, 0xf1, 0x91, 0x91, 0x91, 0x91, 0x8e, 0x00, 0x00, 0x7e, 0x91, 0x91, 0x91, 0x91, 0x4e, 0x00, 0x00, 0x81, 0x82, 0x84, 0x88, 0x90, 0xe0, 0x00, 0x00, 0x6e, 0x91, 0x91, 0x91, 0x91, 0x6e, 0x00, 0x00, 0x60, 0x91, 0x92, 0x94, 0x98, 0x60, 0x00 ;

33 void setup() for(int i = 0; i < 8; i++) pinmode(rows[i], OUTPUT); pinmode(cols[i], OUTPUT); time_previous = millis(); void loop() time_current = millis(); if(time_current - time_previous > 500) time_previous = time_current; index = (index + 1) % 10; for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) digitalwrite(rows[j], LOW); byte col_data = ~(1 << i); for(int j = 0; j < 8; j++) digitalwrite(cols[j], (col_data >> j) & 0x01); for(int j = 0; j < 8; j++) digitalwrite(rows[j], (patterns[index][i] >> (7 - j)) & 0x01); delay(2); 22-1 코드

34 const byte ROWS = 2; const byte COLS = 2; char keys[rows][cols] = '1', '2', '3', '4' ; byte rowpins[rows] = 2, 3; byte colpins[cols] = 6, 7; byte pattern[rows][cols]; void setup() for(int i = 0; i < ROWS; i++) pinmode(rowpins[i], INPUT); for(int i = 0; i < COLS; i++) pinmode(colpins[i], OUTPUT); digitalwrite(colpins[i], LOW); Serial.begin(9600); void loop() int row, col, count = 0; for(col = 0; col < COLS; col++) digitalwrite(colpins[col], HIGH); for(row = 0; row < ROWS; row++) pattern[row][col] = digitalread(rowpins[row]); count += pattern[row][col]; digitalwrite(colpins[col], LOW);

35 if(count > 0) for(row = 0; row < ROWS; row++) for(col = 0; col < COLS; col++) if(pattern[row][col]) Serial.write(keys[row][col]); else Serial.write('.'); Serial.write(" "); Serial.write('\n'); Serial.write('\n'); delay(1000); 23-2 코드 23-2 #include <Servo.h> #define ROTATION_DELAY 1000 String buffer = ""; boolean rotateit = false; Servo microservo; int servopin = 9; void setup() Serial.begin(9600); microservo.attach(servopin);

36 void loop() if(serial.available()) char data = Serial.read(); if(data == '\n') rotateit = true; else buffer += data; if(rotateit) rotateit = false; int angle = buffer.toint(); microservo.write(angle); delay(rotation_delay); buffer = ""; 24-1 코드 C 스타일 #define F_CPU UL #include <avr/io.h> #include <util/delay.h> uint8_t numbers[] = 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6; void Init_74595(void) DDRB = 0b ;

37 void ShiftClock(void) PORTB = 0b ; PORTB &= 0b ; void LatchClock(void) PORTB = 0b ; PORTB &= 0b ; void ByteDataWrite(uint8_t data) for(uint8_t i = 0; i < 8; i++) if(data & 0b ) PORTB = 0b ; else PORTB &= 0b ; ShiftClock(); data = data << 1; LatchClock(); int main(void) uint8_t index = 0; Init_74595(); while(1) index = (index + 1) % 10;

38 ByteDataWrite(numbers[index]); _delay_ms(1000); 코드 아두이노스타일 int datapin = 11; int latchclockpin = 12; int shiftclockpin = 13; uint8_t numbers[] = 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6; int index = 0; void setup() pinmode(datapin, OUTPUT); pinmode(shiftclockpin, OUTPUT); pinmode(latchclockpin, OUTPUT); void loop() index = (index + 1) % 10; shiftout(datapin, shiftclockpin, MSBFIRST, numbers[index]); digitalwrite(latchclockpin, HIGH); digitalwrite(latchclockpin, LOW); delay(1000);

39 24-2 코드 24-2 #define SEGMENT_DELAY 5 int datapin = 11; int latchclockpin = 12; int shiftclockpin = 13; int digit_pins[] = 2, 3, 4, 5; uint8_t numbers[] = 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6; unsigned long time_previous, time_current; int count = 1000; void setup() pinmode(datapin, OUTPUT); pinmode(shiftclockpin, OUTPUT); pinmode(latchclockpin, OUTPUT); for(int i = 0; i < 4; i++) pinmode(digit_pins[i], OUTPUT); digitalwrite(digit_pins[i], HIGH); time_previous = millis(); void show_digit(int position, int number) for(int i = 0; i < 4; i++) if(i + 1 == position) digitalwrite(digit_pins[i], LOW); else digitalwrite(digit_pins[i], HIGH); shiftout(datapin, shiftclockpin, MSBFIRST, numbers[number]);

40 digitalwrite(latchclockpin, HIGH); digitalwrite(latchclockpin, LOW); delay(segment_delay); void loop() int thousands, hundreds, tens, ones; thousands = count / 1000; hundreds = count / 100 % 10; tens = count / 10 % 10; ones = count % 10; show_digit(1, thousands); show_digit(2, hundreds); show_digit(3, tens); show_digit(4, ones); time_current = millis(); if(time_current - time_previous > 100) time_previous = time_current; count++; if(count == 10000) count = 1000; 25-1 코드 25-1 int temp_pin = A1; int input_value;

41 float input_voltage; float temperature; int LED_pins[] = 4, 5, 6, 7; void setup() for(int i = 0; i < 4; i++) pinmode(led_pins[i], OUTPUT); digitalwrite(led_pins[i], LOW); Serial.begin(9600); void loop() input_value = analogread(temp_pin); input_voltage = 5.0 * input_value / ; temperature = (input_voltage - 0.5) * 100.0; Serial.println(temperature); int LEDcount = map(temperature, 20, 30, 1, 4); if(ledcount < 1) LEDcount = 1; if(ledcount > 4) LEDcount = 4; for(int i = 0; i < 4; i++) if(i < LEDcount) digitalwrite(led_pins[i], HIGH); else digitalwrite(led_pins[i], LOW); delay(1000);

42 코드 25-2 int temp_pin = A1; int input_value; float input_voltage; float temperature; int LED_pins[] = 4, 5, 6, 7; boolean hightemperature = false; boolean LEDstate = false; unsigned long time_previous1, time_current1, time_previous2, time_current2; float THRESHOLD = 27.0; void setup() for(int i = 0; i < 4; i++) pinmode(led_pins[i], OUTPUT); digitalwrite(led_pins[i], LOW); Serial.begin(9600); time_previous1 = millis(); time_previous2 = time_previous1; void loop() time_current1 = millis(); time_current2 = time_current1; input_value = analogread(temp_pin); input_voltage = 5.0 * input_value / ; temperature = (input_voltage - 0.5) * 100.0; if(temperature >= THRESHOLD) hightemperature = true; else hightemperature = false; if(hightemperature)

43 if(time_current2 - time_previous2 > 500) time_previous2 = time_current2; LEDstate =!LEDstate; for(int i = 0; i < 4; i++) digitalwrite(led_pins[i], LEDstate); else for(int i = 0; i < 4; i++) digitalwrite(led_pins[i], LOW); if(time_current1 - time_previous1 > 1000) time_previous1 = time_current1; Serial.println(temperature); 25-3 코드 25-3 int distance; int triggerpin = A0; int echopin = A1; int LED_pins[] = 4, 5, 6, 7; unsigned long time_previous, time_current, time_previous1, time_current1; boolean objectclose = false; boolean LEDstate = false; void setup() for(int i = 0; i < 4; i++) pinmode(led_pins[i], OUTPUT);

44 digitalwrite(led_pins[i], LOW); Serial.begin(9600); pinmode(triggerpin, OUTPUT); pinmode(echopin, INPUT); time_previous = millis(); time_previous1 = time_previous; void loop() time_current = millis(); time_current1 = time_current; digitalwrite(triggerpin, HIGH); delaymicroseconds(10); digitalwrite(triggerpin, LOW); distance = pulsein(echopin, HIGH) / 58; if(time_current1 - time_previous1 > 1000) time_previous1 = time_current1; Serial.println("Distance(cm) = " + String(distance)); if(distance <= 20) objectclose = true; else objectclose = false; if(objectclose) if(time_current - time_previous > 500) time_previous = time_current; LEDstate =!LEDstate; for(int i = 0; i < 4; i++) digitalwrite(led_pins[i], LEDstate);

45 else for(int i = 0; i < 4; i++) digitalwrite(led_pins[i], LOW); 26-2 코드 26-2 #define F_CPU L #include <avr/io.h> #include <util/delay.h> #include "UART.h" int main(void) uint8_t data; UART_INIT(); DDRB = 0x20; PORTB = 0x00; while(1) data = UART_receive(); // 데이터수신 if(data == '0') PORTB = 0x00; else if(data == '1') PORTB = 0x20;

46 26-3 코드 26-3 char buffer[5] = ""; int index = 0; boolean process = false; int LED_pins[] = 4, 5, 6, 7; void setup() Serial.begin(9600); for(int i = 0; i < 4; i++) pinmode(led_pins[i], OUTPUT); digitalwrite(led_pins[i], LOW); void loop() if(serial.available()) byte data = Serial.read(); if(data == '1' data == '0') buffer[index++] = data; if(index == 4) index = 0; process = true; if(process) process = false; for(int i = 0; i < 4; i++) if(buffer[i] == '0') digitalwrite(led_pins[i], LOW); else if(buffer[i] == '1') digitalwrite(led_pins[i], HIGH);

47 27-2 코드 27-2 #include <avr/io.h> #include <avr/eeprom.h> #include "UART.h" void eeprom_write_int(int address, int value) eeprom_update_byte((uint8_t*)address, (uint8_t)((value & 0xFF00) >> 8)); eeprom_update_byte((uint8_t*)(address + 1), (uint8_t)(value & 0x00FF)); int eeprom_read_int(int address) uint8_t upper = eeprom_read_byte((uint8_t*)address); uint8_t lower = eeprom_read_byte((uint8_t*)(address + 1)); return ((upper << 8) + lower); int main(void) int data = 1023; int address = 0; UART_INIT();

48 eeprom_write_int(address, data); int readdata = eeprom_read_int(address); UART_print16bitNumber(readData); while(1); return 0; 29-1 하이퓨즈로퓨즈확장퓨즈 16MHz 0xDE 0xFF 0x05 8MHz 0xDE 0xE2 0x05 8MHz 클록을사용하는경우변경되는값은로퓨즈값이다. 내부 8MHz 클록사용을위한 CKSEL 값은 0010 이며이에따른가장긴초기구동시간은 SUT 값이 10인경우이다. 비트이름비트설명 16MHz 8MHz 번호클록을내부적으로 1 1 CKDIV8 7 8로나눔 ( 클록을낮추지않음 ) ( 클록을낮추지않음 ) 클록을포트 B의 0번 CKOUT 핀으로출력 SUT 초기구동시간 SUT CKSEL CKSEL 클록소스 CKSEL CKSEL

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<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>

<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

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

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

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft 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 information

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

정보보안 개론과 실습:네트워크 ` 마이크로프로세서설계및실습 12-13 주차강의자료 학습목표 A/D 변환기의제어방법을이해한다 능숙하게 A/D 변환기를제어할수있도록반복실습한다 2/28 아날로그 - 디지털변환회로 아날로그 - 디지털변환회로 (A/D 변환회로 ) 는, 아날로그전기신호를디지털전기신호로변환하는전자회로이다 A/D 컨버터 (ADC: Analog-to-digital converter) 라고도불린다

More information

ATmega128

ATmega128 ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약

More information

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

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<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

lecture4(6.범용IO).hwp

lecture4(6.범용IO).hwp 제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장

More information

ü ü ü #include #include #include #include Servo servoleft; Servo servoright; int sensorvalue1, sensorvalue2; // 각각앞쪽과뒤쪽의조도센서 int voltage, voltage2;

More information

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63> 라인트레이서강좌 4. 프로그래밍 2005년 8월 1일류대우 (davidryu@newtc.co.kr) 1. 라인트레이서란? 라인트레이서는정해진주행선을따라움직이는자율이동로봇이다. 현재공장자동화부분에서이용되고있는무인반송차가라인트레이서이다. 라인트레이서의기본적인원리는주어진주행선을센서로검출하여이것에따라목적위치까지이동하는것이다. 라인트레이서는크게 3부분 - 컨트롤러부,

More information

[8051] 강의자료.PDF

[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 information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<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

Motor

Motor Interactive Workshop for Artists & Designers Earl Park Motor Servo Motor Control #include Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect

More information

K&R2 Reference Manual 번역본

K&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

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

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

More information

슬라이드 1

슬라이드 1 Hardware/Iot Hacking AVR 프로그래밍 mongii@grayhash 마이크로컨트롤러소개 MCU = Micro Controller Unit 한마디로 작은 CPU 혹은작은컴퓨터 특수목적을수행하는소형화된 CPU 주변장치를추가해나가며기능확장 (Control) 가능 주로 C언어를이용하여프로그래밍 칩내부에 RAM과 ROM 등을포함 System on a

More information

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁교수 WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

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

2. 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 information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< 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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

슬라이드 1

슬라이드 1 AVR(Atmega128) Interrupt 1 Interrupt Polling 사용자가명령어를사용하여입력핀의값을계속읽어서변화를알아냄 모든경우의입력또는값의변화에대응하여처리가가능 Interrupt MCU 자체가하드웨어적으로그변화를체크하여변화시에만일정한동작 하드웨어적으로지원되는몇개의입력또는값의변화에만대응처리가가능 처리속도는일반적인경우인터럽트가빠름 인터럽트발생시

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

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

Microsoft 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1 < 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1 1. Arduino IDE 설치하기 1) Arduino IDE 다운로드 - 홈페이지주소 : https://www.arduino.cc 접속합니다. Download 를클릭합니다. Windows

More information

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁 ehlee@kpu.ac.kr WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63> 테핑라인트레이서개발하기 류대우 (davidryu@newtc.co.kr) 1. 센서보드 적외선센서 1. 적외선센서 (Photo Sensor) 라인트레이서나마이크로마우혹은다른마이크로로봇에서센서로사용하는것중가장많이사용하는것이 photo sensor입니다. 거리의측정에도사용되지만원거리는잘사용하지않고근거리를측정하고자할때사용되기도하며물체의유 / 무등많은곳에서사용되고있습니다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

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

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

More information

Microsoft PowerPoint - 08-MP-4-interrupt

Microsoft PowerPoint - 08-MP-4-interrupt 순천향대학교컴퓨터학부이상정 1 학습내용 인터럽트기본 ATmega128 인터럽트벡터외부인터럽트인터페이스외부인터럽트프로그램예 순천향대학교컴퓨터학부이상정 2 인터럽트기본 순천향대학교컴퓨터학부이상정 3 인터럽트개념 CPU 내부또는외부의요구에의해서정상적인프로그램의실행순서를변경하여보다시급한작업 ( 인터럽트서비스루틴 ) 을먼저수행한후에다시원래의프로그램으로복귀하는것 인터럽트는주변장치의서비스요청에

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<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

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770> 제목 : 실험 #5 예비보고서 Interrupt 제어 실험목적 - Interrupt에대한기초지식을알아본다. - Atmega128의 Interrupt를사용해보고, 동작방식과동작방법및특징을확인한다. 실험장비 - ATmega128(AVR Chip), Switch, LED(Green-LED) 실험이론 - 인터럽트 (Interrupt) 인터럽트는프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생을말한다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

untitled

untitled if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(

More information

2주차: 입출력 제어 복습

2주차: 입출력 제어 복습 마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과 2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈 3/35

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

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 - (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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

untitled

untitled while do-while for break continue while( ) ; #include 0 i int main(void) int meter; int i = 0; while(i < 3) meter = i * 1609; printf("%d %d \n", i, meter); i++; return 0; i i< 3 () 0 (1)

More information

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

2009년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 information

슬라이드 1

슬라이드 1 임베디드시스템개론 : Arduino 활용 Lecture #10: 시리얼통신 (Serial Comm.) 2015. 5. 26 by 김영주 강의목차 시러얼통신개요 I2C 통신개요 I2C 통신실험 2 3 1. Serial Communication 아두이노통신 아두이노통신개요 아두이노 MCU 와 on-board 장치또는외부연결장치간의통신 통신프로토콜에따른데이터송수신을위해개별적인통신장치

More information

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

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM AVR (ATmega2560) 보고서 2013 년 6 월 14 일 스마트컨트롤러 2013 조유진 1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT,

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

Microsoft PowerPoint - 08-MP-8-ADC

Microsoft PowerPoint - 08-MP-8-ADC 8. A/D 변환기 순천향대학교 컴퓨터학부 이 상 정 학습 내용 ATmega28 ADC ADC 개요 ADC 레지스터 ADC 프로그램 온도센서 프로그램 순천향대학교 컴퓨터학부 이 상 정 2 ATmega28 ADC 순천향대학교 컴퓨터학부 이 상 정 3 A/D 변환기 개요 물리적인 현상(전압, 전류,온도,속도,조도,습도,압력,속,,습,압력 )들은 아날로그 값이므로

More information

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

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

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

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

Page 2 of 27 Absolute Maximum Ratings - Supply voltage : 3.5V - Operating Temperature Range : -20 ~ 70 - Storage Temperature Range : -40 ~ 85 위조건을넘어서게 Page 1 of 27 비접촉온도측정 방사율조절가능 IR refresh rate : 50Hz 원거리온도측정 High Accuracy Digital Interface : SPI 레이저포인터기본장착 AVR / 아두이노 UNO 예제코드제공 제품설명 DTPML-SPI Series는온도계산프로세서를내장하고있어정확한온도값을출력합니다.

More information

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

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50 Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 500ms 이내에정확하게측정할수있는온도센서모듈입니다. DTS-L300-V2는온도계산프로세서를내장하고있어정확한온도값을출력합니다. (Master

More information

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

목차 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 information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729> 1주차 ATmega128의구조와메모리 Next-Generation Networks Lab. 1. ATmega128의특징 고성능, 저전력의 8 비트마이크로컨트롤러 진보된 RISC 구조 대부분단일클럭에서실행되는강력한 133개의명령어구조 16MHz에서거의 16MIPS로동작 32개의 8 bit 범용작업레지스터와추가된주변장치제어레지스터 2 사이클내에서수행되는강력한곱셈기내장

More information

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

슬라이드 1

슬라이드 1 임베디드시스템개론 : Arduino 활용 Lecture #9: Motor 제어 2012. 5. 18 by 김영주 강의목차 소형모터개요 트랜지스터를이용한 DC 모터제어 Motor Driver IC를이용한 DC 모터제어 Servo 모터제어 2 3 1. 소형모터 (Motor) 소형모터 (1) 소형모터 전기에너지를회전운동으로변환하는장치모터소형화로다양하게응용되고있음

More information

Microsoft PowerPoint - es-arduino-lecture-09

Microsoft PowerPoint - es-arduino-lecture-09 임베디드시스템개론 : Arduino 활용 Lecture #9: Motor 제어 2012. 5. 13 by 김영주 강의목차 소형모터개요 트랜지스터를이용한 DC 모터제어 Motor Driver IC를이용한 DC 모터제어 Servo 모터제어 2 3 1. 소형모터 (Motor) 소형모터 (1) 소형모터 전기에너지를회전운동으로변환하는장치모터소형화로다양하게응용되고있음

More information

졸업작품 2 차보고서 Graduation Project 내자전거를지켜줘! 이름학번연락처이메일 이주희 김민선 지도교수 :

졸업작품 2 차보고서 Graduation Project 내자전거를지켜줘! 이름학번연락처이메일 이주희 김민선 지도교수 : 내자전거를지켜줘! 이름학번연락처이메일 이주희 201011357 010-5043-9053 da2468@naver.com 김민선 201011312 010-9086-9037 mieeu@hanmail.net 지도교수 : 김기천교수님 ( 인 ) Computer Science & Engineering 1/18 1. 프로젝트소개 1.1 배경및목적 1.2 시나리오 1.3

More information

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

Page 2 of 21 Absolute Maximum Ratings Absolute Maximum Rating 값을초과하는조건에서 DTPML을동작시킬경우치명적인손상을 가할수있습니다. Parameter Symbol Conditions min Typ Max Unit Sup Page 1 of 21 비접촉온도측정 방사율조절가능 빠른온도업데이트 (50Hz) 원거리온도측정 High Accuracy Digital Interface : SPI 레이저포인터기본장착 제품설명 DTPML-SPI Series는접촉을하지않고원하는물체표면의온도를 20ms 이내에정확하게측정할수있는온도센서모듈입니다.

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft 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 information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

ARDUINO Open Physical Computing Platform 오탈자, 문의및보완이필요한내용은 으로알려주세요.

ARDUINO Open Physical Computing Platform 오탈자, 문의및보완이필요한내용은 으로알려주세요. ARDUINO Open Physical Computing Platform 오탈자, 문의및보완이필요한내용은 으로알려주세요. Chapter 20. I2C 와 SPI 통신을이용한아두이노연결 SPI(Serial Peripheral Interface) 는 I2C(Inter-Integrated Circuit) 와더불어마이크로컨트롤러와주변장치사이에디지털정보를간편하게전송할수있는방법을제공하기위해만들어진통신프로토콜이다.

More information

歯7장.PDF

歯7장.PDF 7 Hello!! C 2 . 3 ([] ) < > [ ]; int array[10]; < > [ ][ ]; int array [3] [5]; 4 < > [ ]={ x1,,x10} ( ); (,). ({}). : int array[10]={1,2,3,4,5,6,7,8,9,10}; (" "). : char array[7]="turbo-c"; 5 int array[2][3]={{1,2},{3,4},{5,6}};

More information

chap7.PDF

chap7.PDF 7 Hello!! C 2 . 3 ([] ) < > [ ]; int array[10]; < > [ ][ ]; int array [3] [5]; 4 < > [ ]={ x1,,x10} ( ); (,). ({}). : int array[10]={1,2,3,4,5,6,7,8,9,10}; (" "). : char array[7]="turbo-c"; 5 int array[2][3]={{1,2},{3,4},{5,6}};

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

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

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR) 한백전자기술연구소 HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR편) 마이크로컨트롤러기능 제 3 장 GPIO 입출력제어 GPIO 입출력제어 1. HBE-MCU-Multi 구동 2. 마이크로컨트롤러와 GPIO 3. AVR 마이크로컨트롤러의입출력포트 4. GPIO 를이용하여 LED 켜기 5. GPIO를이용한스위치눌러 LED 불켜기 6. GPIO 를이용하여

More information

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

Microsoft 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

C & System

C & 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

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

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 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 information

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1 SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 100) 1 Contents 1 INTRODUCTION 2 PROTOCOL FRAME OUTLINE 3 FUNCTION FIELD 4 DATA FIELD 5 CRC CHECK 6 FUNCTION EXAM 7 EXCEPTION RESPONSE 8 I/O STATUS

More information

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

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

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 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

<4D F736F F F696E74202D E6F312D BCB3C4A12C20C4DAB5F920B1E2C3CA2C20BDC3B8AEBEF3C5EBBDC5>

<4D F736F F F696E74202D E6F312D BCB3C4A12C20C4DAB5F920B1E2C3CA2C20BDC3B8AEBEF3C5EBBDC5> Arduino 1 ( 소개, IDE 설치, 기초코딩 ) 컴퓨터 2 컴퓨터 컴퓨터 자동적으로계산이나작업을수행하는기계 컴퓨터기능 연산 : 데이터에대한산술연산 ( 덧셈, 뺄셈, 곱셈, 나눗셈 ), 논리연산 (AND, OR 등 ) 등을하는기능. 중앙처리장치 (CPU; central processing unit) 에서수행. 제어 : 명령을순차적으로읽고해석하여처리하는기능으로모든장치의동작을지시하고감독통제하여자동적인처리가가능함.

More information

untitled

untitled 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

아두이노로만드는인형뽑기장치

아두이노로만드는인형뽑기장치 아두이노로만드는인형뽑기장치 목 차 Ⅰ. 아두이노및 C프로그래밍기초 ------------------------------------------------------- 1 1. 아두이노소개 ------------------------------------------------------------------------- 1 2. 아두이노개발환경구축 --------------------------------------------------------------

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.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 information

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

Chapter. 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 information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Raspberry Pi 입출력디바이스 II 1 제 05 강 입출력디바이스 II 터치스위치자석스위치움직임감지센서부저모듈 LED Array RGB LED 릴레이모듈초음파센서 ( 거리측정 ) 적외선센서및리모콘 ( 미작성 )

Raspberry Pi 입출력디바이스 II 1 제 05 강 입출력디바이스 II 터치스위치자석스위치움직임감지센서부저모듈 LED Array RGB LED 릴레이모듈초음파센서 ( 거리측정 ) 적외선센서및리모콘 ( 미작성 ) Raspberry Pi 입출력디바이스 II 1 제 05 강 입출력디바이스 II 터치스위치자석스위치움직임감지센서부저모듈 LED Array RGB LED 릴레이모듈초음파센서 ( 거리측정 ) 적외선센서및리모콘 ( 미작성 ) 터치스위치 * IM120710023 터치스위치 : 유형... 토글형및비토글형 Raspberry Pi 입출력디바이스 II 2 : S( 디지털출력

More information

Arduino- 서보모터 서울과학기술대학교기계시스템디자인공학과 교수김성환

Arduino- 서보모터 서울과학기술대학교기계시스템디자인공학과 교수김성환 Arduino- 서보모터 2017.11.25 서울과학기술대학교기계시스템디자인공학과 교수김성환 1. Arduino 란? (1) 아두이노 (Arduino) 는오픈소스를기반으로한단일보드마이크로컨트롤러. AVR 기반. (2) 가장큰장점은마이크로컨트롤러를쉽게동작시킬수있다는것. 일반적인번거로운과정을피하고, 컴파일된펌웨어를 USB를통해쉽게업로드. (3) 저렴하고, 윈도를비롯해맥

More information

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

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

C++-¿Ïº®Çؼ³10Àå C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include

More information

T100MD+

T100MD+ 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 information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게 Physical Computing for Artists & Designers 연세대학교디지털아트학과 Earl Park 시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다.

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

int main(void) int a; int b; a=3; b=a+5; printf(a : %d \n, a); printf(b : %d \n, b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf( a : %x \ ? 1 int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \n", &a); printf(" b : %x \n", &b); * : 12ff60,

More information