목록 95

[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

[라즈베리파이] SPI 버퍼할당 문제 발견ㅜㅜ

현재 내가 사용하는 라즈비안의 커널버전은 3.6이고 2014년 1월에 나온 최신 라즈비안의 커널은 3.10이다. 최신버전에서 SPI 테스트하다가 알아낸건데 이놈이 SPI버퍼 크기를 고정시켜놨다.... 안바뀐다.... 아래는 kernel 3.6 에서의 spi buffer 크기를 확인해본것이다. 부팅할 때 sudo gpio load spi 256 을 해주었기 때문에 256kb로 할당되어있는것을 확인할 수 있다. 하지만 문제의 kernel 3.10버전... 똑같이 부팅할 때 gpio load spi 256을 해주지만 buffer size가 변하지 않았다. 구글링을 하다보니 나만의 문제가 아닌듯 하다.. 라즈베리파이 포럼에 올라와있는 글이다..(www.raspberrypi.org) 그리고 lsmod 해보면 sp..

[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] 적외선 통신(IR) - 1. 이론

무선통신은 블루투스밖에 해보지 않아서 적외선통신을 시도해 보았다. 요즘 블로그에 업데이트를 안하다 보니 올려야 할 자료들이 무지하게 많다. 이놈의 귀차니즘... 어쨌든 적외선통신에 간략히 설명하자면 다음과 같다. ◎ 적외선(IR : Infrared Ray) 가시광선에서 적색 바깥쪽(파장 750nm~1000um)의 영역에 위치한 광선 적외선 영역중에서도 근적외선, 중간적외선, 원적외석으로 나뉘는데 우리가 보통 라인트레이서나 리모컨등에 사용되는 적외선은 근적외선 영역을 사용한다. 이유는 모른다. 디바이스마트 같은곳에서 파는 적외선 센서는 대개 근적외선을 사용한다. ◎ 전송특성 ▶장점 - 빛을 매체로 사용하기 때문에 전파규제가 없다. - 전파에 비해 넓은 대역폭을 쉽게 획득할 수 있다. ▶단점 - 통신거리가 ..

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

헐 무단퍼가기 당함ㅜㅜㅜ

후배가 발견해줌ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그 분 블로그에서 내 글 발견@_@ 내 블로그 그대로 복사 ㅜㅜ 그래서 덧글 달아줌 ㅋㅋ 요즘 디스가 유행이길래 Embejied @embejisu Control 비트 다운 받았습니다. Embejied @embejisu 오늘밤.. Embejied @embejisu http://embejied.tistory.com/15 --------------------------------------..

[project] 캡스톤대회 - L298 모터드라이버

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