atmega128 12

[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] 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] 캡스톤대회 - L298 모터드라이버

으어... 캡스톤... 쿼드콥터를 넣는건 실수였다... 어쨌든 지상에서 돌아다닐 놈들을 만들었다. 기어드 DC모터를 사용했다. 기어비는 1:50이고 12V 먹는다. 이놈을 제어하기 위해서 모터드라이버가 필요한데 내가 옛날에 블로그에 올렸던 모터드라이버로는 무리다. 아마도,,, 어쩄든 L298 이라는 놈 하나면 DC모터 2개를 제어할 수 있다. 위에 사진이 L298이다. 아래는 데이터시트~ 데이터시트를 보면 DC Operation이 2A다. 회로 구성하고 그냥 공중에 띄어서(거의 무부하) 돌려보니까 0.3A나온다. 잘 돌아가던놈 손으로 잡으니까 거의 2A까지 빨아당긴다. 구성 회로 역시 데이터시트 6쪽에 나와있다. 10번,12번은 모터 정/역회전 결정해주는 것이고 11번은 Enable핀이다. 10,11,1..

[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] 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] 소형 모터드라이버 만들기

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

Embedded System/AVR 2017.04.02

[AVR] ADC 사용하기(13.11.25 코드 수정)

AVR을 이용해 개발하는 사람들은 꼭 해보는 과정이 있다. 내가 배워온 과정을 순서대로 적으면 다음과 같다.(아마 제일 흔한 과정이 아닐까?) IO핀을 이용하여 LED제어 ↓ 타이머/카운터로 1초 만들기 ↓ PWM사용해서 서보모터 제어 ↓ 캐릭터 LCD 동작구현 ↓ USART통신 ↓ ADC 사용해서 센서값 받아오기 여기까지 하면 나머지 부분은 스스로 데이터시트를 보면서 할 수 있다고 생각한다. PWM사용하는것 까진 쉽게 할 수 있어서 이렇게 따로 게시글로 정리하진 않았다. 그래도 캐릭터 LCD, USART까지 글을 올렸으니 ADC도 올리는게 맞는거겠지? ADC는 뭐인고? Analog to Digital Converter의 약자다. 즉 아날로그 신호를 디지털값으로 바꿔주는 놈이다. AVR의 ADC분해능은 ..

Embedded System/AVR 2017.04.02