본문 바로가기

전체49

[AVR] 점핑 게임 Jumping Game - LCD로 만드는 게임 [Jumping Game - LCD로 만드는 게임] 방학 시즌이 다가오면서 학교에서도 수행평가와 시험에 대한 마무리가 진행되었다. 이 글에서는 마이크로프로세서 제어 과목에서 내가 1학기 개인과제로 제출한 LCD로 만든 게임 - Jumping Game 프로젝트에 대해서 기록하고자 한다. 일단 거두절미하고 실행영상부터 보여주고자 한다. 이 프로젝트는 LCD를 이용해서 Jumping Game을 구현한다. 하트를 먹으면 100점을 얻으며 장애물에 걸리거나 9900점을 얻으면 게임이 끝난다. 점수 9900점 미만의 경우 모두 게임에 진 것으로 판단한다. 이렇게 얻은 점수를 기준으로 A,B,C,... 등급으로 게임 성적이 표현되며 이것은 6개의 LED로 확인할 수 있다. LED의 색깔이 바뀔 경우 아이템(장애물, .. 2020. 7. 30.
[AVR] LCD1602A를 ATmega128에서 쉽게 사용하기 with lcd1602a_h68 라이브러리 (+ 커스텀 문자 출력, Display Shift) + 2020.06.27 첫 작성 + 2020.06.28 기준으로 lcd1602a_h68에 커스텀 문자를 생성하는 함수가 추가되어 이 부분을 다루는 내용을 추가함 + 2020.06.30 기준으로 lcd1602a_h68에 LCD display를 shift 시키는 함수가 추가되어 이 부분을 다루는 내용을 추가함(이 부분에 대해서 오류랄까 문제를 발견하여 현재 수정 중에 있음) [LCD1602A를 ATmega128에서 쉽게 사용하기 with lcd1602a_h68] 이번에는 ATmega128에서 LCD를 다뤄봤다. 블로그 글만 보면, LED만 실습하다가 갑자기 LCD로 넘어간 것처럼 보이는 데 블로그 실습은 개인적으로 실습한 내용을 다룬 것뿐이라 학교 수업 진도는 계속 나갔다. 어찌됐든 그리하여 LCD를 학교에.. 2020. 6. 27.
[AVR] ATmega8 브레드보드 테스트 - 스위치 & LED [ATmega8 브레드보드 테스트 - 스위치 & LED] 지난 글에서 ATmega8에 대한 주변회로를 구성하고 간단한 테스트를 위해 LED를 500ms만큼 껐다 키는 프로그램을 업로드하여 실행시켰었다. 이 과정에서 많은 실수를 범하고 심지어는 칩을 날려먹기도 했지만 매우 뜻깊은 활동이었다 자부할 수 있다. 이번에는 프로젝트를 위한 브레드보드에서의 두 번째 테스트로 외부 풀업 저항을 단 스위치로 입력을 받고, 해당하는 스위치가 입력되었을 때 해당 LED가 켜지도록 하는 프로그램을 작성하고 실행해보았다. 코드는 아래와 같다. 회로도에 대해서는 생략을 했는 데, 지난 글에서 구성한 ATmega8 주변 회로에서 코드만 봐도 알 수 있다시피 포트D 2,3,4 핀에 10k 저항의 풀업 저항을 단 스위치를 연결하고 .. 2020. 6. 11.
[AVR] ATmega8 브레드 보드에서 사용하기 - 퓨즈Fuse 비트를 잘못 변경하면 생기는 일 [ATmega8 브레드 보드에서 사용하기 - 퓨즈Fuse 비트를 잘못 변경하면 생기는 일]최근에 프로젝트를 하나 진행하고자 ATmega8 외 기타 주변회로를 구성하기 위한 부품 + 프로젝트 부품들을 구매했다. ATmega8의 경우, 완성된 보드 가격이 12000원에 달하는 것에 비해 ATmega8-PU 칩 가격은 1700원밖에 하지 않는다. 여기서 주변회로에 사용한 부품들까지 합해도 절대 12000원이 되지 않을 것이다라는 계산을 했고, 직접 ATmega8 보드를 만들어서 사용하기로 했다. 일단 브레드보드에서 ATmega8을 사용하기 위해 필요한 부품은 아래와 같다. 총 가격은 2080원으로 이는 가장 기본적인 것만 계산한 결과이다. 기타 전원부 회로라던가, 기타 등등을 추가하게 되면 더 늘어날 것이다... 2020. 6. 10.
[AVR] LED 실습 6. LED 순차 점등 제어(for 문 이용) [LED 실습 5. LED 순차 점등 제어(for 문 이용) ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 6. LED 순차 점등 제어(for 문 이용) 이 문제에서 알아야 할 것은 LED실습2와 같으므로 생략하겠다. 회로의 경우, 실습1 과 동일하다. 코드의 핵심 동작은 LED 실습 5와 동일하다. 여기서 달라지는 것은 구현 방식이다. 기존에는 while문 안에서 buff 변수의 값이 모두 시프트되었는 지를 확인하여 모두 시프트되어 켜졌을 때 다시 buff 변수에 초깃값을 대입해줬다면, 아래의 코드는 while문의 반복이 시작되었을 때 buff.. 2020. 6. 9.
[IT] Git으로 버전관리하는 첫 걸음 완벽 정리 - init, add, commit, push 이 글에서는 Git의 사용법에 대해서 다뤄보려고 한다. Git을 왜 사용해야 하는 지에 대한 이유에 대해서 학생의 지극히 개인적인 입장에서 이야기 해보자면, 내가 무엇을 했는 지에 대해서 기록을 하는 데 사용하는 것이 매우 편하다. 누구나 가끔씩 어제 짠 코드가 뭔지, 그저께 코드와 어제의 코드는 뭐가 다르고 내가 왜 이렇게 짰는 지에 대해서 궁금해 할 것이다. 그리고 오늘 갑자기 오류가 발생했을 때 Ctrl+Z를 눌러 어제의 정상 동작하던 코드로 돌아가고 싶은 마음도 가진 적이 있을 것이다. 이럴 때 사용하면 좋은 것이 Git이다. "그저께 제 코드는 정상 동작했습니다. 그러다가 더 나은 코드를 위해 어제 코드의 일부를 수정을 했고, 오늘 필요가 없는 부분이라고 생각되었던 부분이 있어서 삭제를 했는 데.. 2020. 6. 8.
[AVR] LED 실습 5. LED 순차 점등 제어(if 문 이용) [LED 실습 5. LED 순차 점등 제어(if 문 이용) ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 5. LED 순차 점등 제어(if 문 이용) 이 문제에서 알아야 할 것은 LED실습2와 같으므로 생략하겠다. 회로의 경우, 실습1 과 동일하다. LED 상태를 기록하는 버퍼 역할의 변수를 선언하고, while(1){}안에서 이 버퍼를 PORTn에 대입한다. 그리고 이 버퍼를 시프트 시킨 값에 1을 더한 후 버퍼에 대입한다. 이때 만약 버퍼값이 0xFF라면 이 작업 대신 버퍼를 초기값인 0x00로 초기화시킨다. 버퍼를 시프트시키고 1을 더하는 .. 2020. 6. 8.
[AVR] LED 실습 4. LED 일일히 설정하여 Shift On/Off [LED 실습 4. LED 일일히 설정하여 Shift ON/OFF ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 4. LED 일일히 설정하여 Shift ON/OFF 이 문제에서 알아야 할 것은 LED실습2와 같으므로 생략하겠다. 회로의 경우, 실습1 과 동일하다. 먼저 LED를 모두 키고 500ms동안 대기한다. 그 다음에는 LED를 모두 끄고 500ms만큼 대기한다. 그 다음에는 왼쪽 LED 4개를 키고 500ms만큼 대기하고 LED를 모두 끄고 500ms만큼 대기한다. 이번에는 오른쪽 LED 4개를 키고 500ms만큼 대기하고 LED를 모두 .. 2020. 6. 4.
[AVR] LED 실습 3. LED 잔상 실험 [LED 실습 3. LED 잔상 실험 ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 3. LED 잔상 실험 이 문제에서 알아야 할 것은 LED실습2와 같으므로 생략하겠다. 회로의 경우, 실습1 과 동일하다. 코드의 로직은 LED실습2와 매우 유사하다. 단지 지연 시간만 짧게 해주면 된다. 그 이유는 LED가 짧은 시간 동안 껐다 켜지게 되면 우리 눈에 LED의 "잔상"이 남아 LED가 켜진 것으로 인식하기 때문이다. 이 실습은 그것을 실험하기 위함일 듯하다. 여기서는 지연 시간을 10ms로 설정하였다. #define F_CPU 16000000UL.. 2020. 6. 4.
[AVR] LED 실습 2. LED의 ON/OFF 반복 [LED 실습 2. LED의 ON/OFF 반복 ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 2. LED의 ON/OFF 반복 이 문제에서 알아야 할 것은 LED실습1 과 동일하지만 지연(delay) 시키는 것을 더 알아야 한다. 일반적으로 ms단위로 delay시키는 함수인 _delay_ms()함수를 사용하며, 이를 위해 F_CPU를 정의하여 외부 클럭을 정의해준다. 내가 사용하고 있는 ATmega128 보드의 경우 16MHz를 사용하고 있어 16000000UL로 정의해줬다. 회로의 경우, 실습1 과 동일하다. 코드의 로직은 단순하다. 먼저 DDR.. 2020. 6. 4.
[AVR] LED 실습 1. LED 출력 포트 설정하고 다 켜놓기 [LED 실습 1. LED 출력 포트 설정하고 다 켜놓기 ] 이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다. # 실습 1. LED 출력 포트 설정하고 다 켜놓기 이 문제에서 알아야 할 것은 AVR 포트를 출력으로 설정하는 것과 포트의 출력값을 변경하는 것이다. 이것을 위해서는 각각 DDRn 레지스터와 PORTn 레지스터를 다뤄야 한다.(여기서 n은 포트 A,B,C,D ...를 의미한다. 포트의 m핀을 입력으로 설정하고자 한다면 DDRn레지스터의 m번째 비트를 0으로, 출력으로 설정하고 싶다면 DDRn레지스터의 m번째 비트를 1로 설정하면 된다. 포트의 m핀의 .. 2020. 6. 3.
[C언어] 배열의 기초 - 여러개의 자료를 묶어서 관리하려면? [배열의 기초 - 여러개의 자료를 묶어서 관리하려면?] 오늘 글에서는 배열에 대해서 살펴볼 것이다. 배열에 대해서 이야기 하기 전에 한가지 이야기할 것이 있는데 언어에서 제공하는 기능, 문법들은 필요하기 때문에 만들어 진 것이며 가장 기본적인 문법들은 모든 프로그램의 가장 기본이 되며 가장 많이 사용된다는 것이다. 그렇기 때문에 가장 기본적인 문법들을 이해하는 것이 중요하며 기계적으로 사용하는 것이 아니라 왜 필요한 지에 대해서 생각하고 이해하면서 사용하는 것이 중요하다. 그래야 기계적으로 코드를 짜는 것에서 벗어나 재미있게 코드를 짤 수 있다. 그러면 먼저 배열이 왜 필요한 지에 대해서 생각해보자. 주목할 것은 우리가 일상을 살다보면 많은 것들을 보게 되는데 여기서 대부분의 것들은 어떠한 집합 아래 속.. 2020. 4. 30.
반응형