AVR 13

[AVR] 캐릭터 LCD (CLCD, LMC1623A) 소스코드

이미 AVR LCD관련 글을 올렸지만(http://embejied.tistory.com/15) 이후 작성하는 글에서 올리는 소스에는 따로 헤더파일로 만들어서 "lcd.h"를 사용했는데 생각보다 요걸 물어보는 사람이 상당수 있었다... 사실 내용은 별거 없는뎈ㅋㅋ 그냥 메인에 있던 함수들을 헤더파일로 빼주고 매크로상수 몇개 넣어줬다... 그래도 혹시나 하는 마음에 정리해서 간단한 설명과 예제소스를 올려본다. 일단 헤더파일이다. #ifndef LCD_H_ #define LCD_H_ #define F_CPU 16000000UL #include #include #define RS 7 // RRL BOARD #define RW 6 #define E 5 #define DATABUS PORTC #define CTRL..

Embedded System/AVR 2017.04.02

[AVR] 적외선 통신(IR) - 2. 구현(코딩)

이론에 대해서 알아보았으면 실제로 어떻게 구현하는지 보자. 먼저 변조를 하고 프로토콜(너무 거창한가...?)을 정해야하는데 적외선통신에서 일반적으로 사용하는 변조방식은 다음과 같다. ▶ Bi-Phase ▶ ASK or OOK (Amplitude Shift Keying or On-Off Keying) ▶ PDM or PWM(Pulse Duration or Width Modulation) 먼저 Bi-Phase 방식은 한 비트를 반으로 쪼개서 상승엣지면 "1", 하강엣지면 "0"을 의미한다. 두 번째로 ASK 혹은 OOK방식인데 가장 단순한 진폭변조방식이다. high인 시간은 같고 low인 시간을 달리하여 "0"과 "1"을 구별한다. 세 번째로 PDM 혹은 PWM방식인데 high인 시간을 달리하여 "0"과 "..

Embedded System/AVR 2017.04.02

[AVR] 다중 ADC 사용시 주의점!

드디어 알아냈다. 왜인지는 모르겠는데 ADC 여러개 사용할 때 ADMUX랑 ADCSRA 레지스터 설정하고 조금의 딜레이를 주어야한다!!! 안그러면 채널이 바뀌기 전에 변환해버려서 데이터 밀림현상이 나타난다. 예를 들어서 이라는 소스에서는 ADC값이 저장되는 배열에서 데이터의 순서가 한칸씩 밀리게 된다. 8번째 ADC값이 배열의 첫 번째로 들어가버리고 한칸씩 당겨져서 저장이 되었다. 실제로 텀프로젝트 때문에 ADC사용할 일이 있어서 값을 확인했더니 x값, mic값, PSD값 순서대로 출력되어야 하는데 아래 사진처럼 PSD값, x값, mic값 순서대로 출력되었다ㅜㅜ 이러한 문제를 해결하기 위해 다음과 같이 GET_ADC함수안에서 변환완료 플래그를 확인하기 전에 약 100us정도의 딜레이를 넣어주면 된다. 이..

Embedded System/AVR 2017.04.02

[AVR] Atmel studio 6 sprintf함수 사용하기

Atmel Studio 6 환경에서 sprintf 함수를 사용하면 LCD에 문자열을 쉽게 표시할 수 있다. 정수를 표현하고 싶다면 그냥 string.h 을 추가하여 그냥 사용해도 되지만 실수형도 표시하고 싶으면 약간의 설정이 필요하다. 프로젝트를 켜고 Alt + F7 키를 눌러서 프로젝트 설정창으로 이동한다. 그리고 왼쪽 AVR/GNU Linker의 Libraries를 눌러 아래 그림과 같이 설정해준다. 추가버튼을 눌러서 아래 그림처럼 libprintf_flt 라고 적어주고 OK를 눌러준다. 그리고 General로 이동하여 아래 그림에서 빨간 밑줄들을 체크해준다. 그리고 저장하면 사용준비 완료다~! 간단하게 테스트 해보았다. DC모터 엔코더 값을 출력해 보았다. 먼저 char arr[16]을 선언해주고 ..

Embedded System/AVR 2017.04.02

[project] 도트매트릭스 테스트

인터넷에 돌아다니는 소스코드 그대로 돌려보았다. 그랬더니... 우왕ㅋ굳ㅋ 잘 되네. 이제 소스 분석해서 만들어야겠다~ 인터넷에 돌아다니는 소스는 옛날에 만들어진거라서 winAVR에서 지원안하는 놈들이 좀 있다. 그럴땐 라는 헤더파일을 추가해주면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89..

[project] 도트매트릭스(slm1604) 시작

여름 방학동안 현장실습이라는 과목을 하게 되었는데 업체에서 의뢰받은 프로젝트이다. 원래 현장실습이면 배우러 가는건데 나는 뭔가 의뢰랄까..발주랄까... 팀장님께서 "전자과 3학년이면 왠만한건 다 할 줄 알겠네~ 허허허"라고 하시는데 큰 착각입니다. 흐헝헝엏어헝허엉...외부업체에 뭔가를 맡기는 것처럼 느껴지는건 뭐지...-_-? 어쩄든 거기 팀장님께서 도트매트릭스를 만들어 보라고 해서 만들고 있는 중이다. 블루투스로 한글띄우고 싶다고 하던데 흠...... 고민좀 해봐야겠다. 아래 사진들은 일단 도트매트릭스만 연결해보았다. 사용한 부품들은 다음과 같다. ●포맥스(외형 제작용) ●도트매트릭스(slm1604) ●Atmega128 ●기타 잡다한 선들 이제 소스를 짜볼까~

[AVR] ISP 커넥터(6핀, 10핀)

여러 AVR 모듈을 쓰다 보면 종종 ISP 커넥터가 안 맞는 경우가 있다. 10핀 배열이 많이 쓰이지만 6핀 배열도 은근히 많이 보인다. 그럴때 변환 커넥터를 만들어 줘야 하는데 매번 자료 찾는게 짜증나서 블로그에 올려버린다. 한번 보고나면 그걸로 끝내서 자료를 정리해놓지 않았는데 이번에 정리해놔야지... 핀 배열도 간간히 쓰일때가 있으므로 여기에 올린다.

Embedded System/AVR 2017.04.02

[AVR] SPI 통신

SPI(Serial Peripheral Interface)는 직렬 주변기기 인터페이스다. CPU와 다수의 CPU들 또는 CPU와 다수의 주변장치들 사이에 고속으로 데이터를 동기 전송하는데 사용되는 직렬 통신 방법 중에 하나이다. 장치들은 마스터 슬레이브 모드로 통신하며 여러 슬레이브 장치들은 개별 슬레이브 셀렉트(SS or Chip Select(CS)) 라인과 함께 동작할 수 있다. [그림 1] 싱글 마스터와 싱글 슬레이브 SPI 통신은 4가지 논리신호를 지정한다. ◎ SCLK(Serial Clock) : 직렬클럭 ◎ MOSI(Mater Output Slave Input) : 마스터 출력, 슬레이브 입력 ◎ MISO(Mater Input Slave Output) : 마스터 입력, 슬레이브 출력 ◎ SS(..

Embedded System/AVR 2017.04.02

[AVR] 모터드라이버 변경!!(V6 엔진 장착)

이전 글에서 만들었던 모터드라이버는 MOSFET을 이용한 모터드라이버였다. 하지만 전류가 조금 딸리는 면이 있는것 같아서 회로를 바꾸어 보았다. 기존에 MOSFET으로 할때 모터가 생각보다 빨리 돌지 않고 토크가 약해서 장애물을 만나면 멈추어 버렸다. 전압을 높이면 될거 같았지만 근본적인 해결방법을 찾기위해 예전에 가지고 놀던 깡통RC를 뜯어보았다. 분명 깡통RC는 전압을 3V(1.5건전지 2개) 밖에 사용하지 않는데 모터가 미친듯이 잘 돌아갔다. PCB를 잘 보면 전부 BJT 밖에 없었다. 그래서 나도 BJT로 만들기로 결심하고 아래회로를 따라 만들었다. 참고로 저항값은 내가 끼워맞춘 값이다. 사용부품은 A1015 2개, C1815 2개, 2N3904 2개 1K, 47옴 저항 2개씩... 그냥 PNP ..

Embedded System/AVR 2017.04.02

[AVR] 소형 모터드라이버 만들기

AVR의 출력포트를 이용하여 모터를 제어하는것은 무리였다. 전압은 문제가 없는데 전류가 문제다. 핀 하나당 뽑아줄 수 있는 전류가 제한되어있으니 말이다. 15mA였나? 기억이 잘 안난다. 모터 돌려주려면 적어도 100mA정도는 필요하지 않을까? 어쨌든 사람들이 비싼돈 주고 모터드라이버를 이용하는데는 다 이유가 있다. 모터드라이버를 검색하다가 LB1630 이라는 소형 모터드라이버를 알게되었다. 서면에 협신전자(ic114.com)싸이트를 검색해보니 1200원인데 재고가 없었다. 디바이스마트(devicemart.co.kr)에 검색해 보니 무려 2200원 이었다... 거기에 배송비까지 합치면 ㅎㄷㄷ.... 그래서 그냥 만들어 보기로 했다. 필요한 준비물은 N-Channel MOSFET 4개, 선, 지네발 등....

Embedded System/AVR 2017.04.02