본문 바로가기

AVR12

[AVR] ATmega128 RGB LED 제어 (16bit Timer, PyQT) [ATmega128 RGB LED 제어] 이 글에서는 크게 2단계에 걸쳐서 RGB LED를 다뤄볼 것이다. 첫 번째로 코드 상에서 0~255까지의 RGB 값을 넘겨주면 해당 값으로 RGB를 설정하여 LED를 키는 함수를 구현해볼 것이며 두 번째로 PyQT를 사용해서 GUI상에서 RGB를 입력하여 PC에서 Atmega128을 제어하는 실험을 수행할 것이다. # 실험 1. RGB LED 제어 RGB 값들은 0~255, 0x00~0xFF까지의 값인데 이를 표현하기 위해서는 PWM을 사용해서 전압을 값에 따라 바꿔줘야 한다. PWM을 사용하기 위해서는 8bit Timer와 16bit Timer를 사용해야 한다. 여기서는 8bit Timer가 아니라 16bit Timer를 사용했는 데 이것에 대해서는 나중에 다시.. 2020. 11. 29.
[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.
[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.
[AVR] Atmel Studio 7.0 설치하고 샘플 프로젝트 실행하기(+ ISP를 통해서 USB전원 공급하는 방법) [Atmel Studio 7.0 설치하고 샘플 프로젝트 실행하기(+ ISP를 통해서 USB전원 공급하는 방법)] 이 글에서는 전에 만들어둔 AVR 개발환경 준비하는 과정을 담은 영상을 글로 표현해보려고 한다. 시작하기에 앞서 준비물이 있다. 바로 AVRISP와 AVR 보드이다. AVR 보드는 AVR 칩을 사용하기 위한 기타 요소들을 모아 하나의 보드로 만든 것이며 AVRISP는 이 보드에 PC에서 작성한 코드를 업로드하기 위한 도구이다. 내가 사용한 AVRISP와 AVR 보드는 AVRISP-mk2와 AT128A-70B V2.0이다. 먼저 ISP를 통해서 USB 전원을 공급하기 위해서는 AVRISP-mk2를 분해시켜 줘야 한다. 설명서를 보면 "USB에서 나오는 5V를 타겟보드의 전원으로 사용 할 때는 제.. 2020. 4. 24.
반응형