Embedded System 58

[Cortex-M3] GPIO 사용하기

내가 AVR(ATmega시리즈)을 배울때는 데이터시트 띄어놓고 레지스터보면서 코드를 짰지만 STM32 이놈은..... 너무 많다.... 난 항상 새로운걸 배울땐 무지에서 오는 귀찮음 때문에 진도가 안나간다... 친구는 그렇게 하지말고 예제를 보며 역추적하라고 해서 그 방법을 적용해볼까 한다. 먼저 코드부터 살펴봅시다~~ #include "stm32f10x.h" void init_port() { GPIO_InitTypeDef PORTA; GPIO_InitTypeDef PORTB; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); PORTA.GPIO_Pin = 0x0001; PORTA.GPIO_Mode = GPIO_Mod..

[Cortex-M3] uVision4 새 프로젝트 만들기

새 프로젝트를 만들어보자. 일단 uVision4를 켠다. 새 프로젝트 만들기 클릭 적절한 위치에 폴더를 하나 만들고 프로젝트 이름을 입력하고 저장을 클릭한다. 저장버튼을 누르고 나면 CPU고르는 팝업이 하나 뜨는데 난 ST사의 칩을 사용하므로 스크롤을 내려 STMicroelectronics를 눌러서 STM32F100RB를 선택하고 OK버튼을 눌러준다. OK버튼을 누르면 아래와 같은 화면이 뜨는데 왼쪽의 Taget1 그림에 마우스 오른쪽버튼을 눌러서 Manage Project Items...를 클릭하고 설정창을 띄운다. 처음에는 Groups에 Source Group 1 하나만 있는데 더블클릭하여 이름을 Start up으로 바꿨다. 사실 이름은 안바꿔도 되는데 그냥 바꿔줬다. 그리고 CMSIS, User, ..

[Cortex-M3] KEIL MDK-ARM, STM32F10x : uVision4 개발환경구축 및 표준라이브러리 설치

드디어 나도 ARM 시리즈를 사용해보는구나... 일단 나는 ST사에서 나온 레퍼런스보드인 STM32VLDISCOVERY 보드로 Cortex-M3 를 다루어보고자 한다. 일단 해야할 일부터 나열해보자면 1. 개발 툴 설치 2. 레퍼런스코드 다운로드 3. 프로그래밍~ 요렇게 3단계가 되겠다. 개발 툴은 여러 가지가 있겠으나 나는 Keil사에서 만든 uVision4를 사용했다. 사실 난 이클립스를 사용해보고자 했으나 뭔가 해야할게 많아서..... 어쨌든 먼저 다운부터 받자. https://www.keil.com/download/product/ 여기로 들어가서 MDK-ARM v4를 클릭한다. 클릭하면 몇 가지 정보를 입력하고 나면 아래와 같은 화면이 나오는데 클릭하여 다운로드하고 설치해주자. 그럼 이제 ST사 ..

[아두이노] 가속도센서를 이용한 서보모터 제어

교생실습 중에 해본것인데 가속도센서를 이용하여 서보모터를 제어해 보았다. 3축 가속도센서로 사용한 모듈은 마이센이라는 회사에서 만든 [P0-AXA-12-01] 3축 아날로그 가속도 센서모듈이다. 서보모터는 국민서보라 불리는 HS-311 두 개를 사용하였다. 사용한 보드는 아두이노 UNO보드를 사용하여 만들어보았다~ 나는 서보모터 2개를 사용하기 때문에 X, Y, Z축 중에서 X, Y축만 사용하였다. 기본적인 회로는 다음과 같다. 회로까지는 문제가 없는데 A0, A1 핀에서 받아온 ADC값을 이용하여 서보모터의 각도 값으로 변환하고 넣어줄 때 별다른 필터없이 바로 서보모터에 입력하면 문제가 발생한다. 노이즈때문에 값이 고정되어 있지 않고 계속해서 변하기 때문이다. 가끔씩 튈 때도 있다... 그래프로 나타내..

[안드로이드] 토스트 메시지(메세지?) 관련...

확실한건 아닐 수 있음. 난 모름. 그냥 올리는 거임 -ㅅ-. 내가 경험한 바에 의하면 토스트 메시지를 사용하려면 액티비티가 존재하는 곳에서 사용해야 한다. 따라서 액티비티가 없는 클래스에서는 오류를 뿜어댔다. 상속을 시켜봐도 안되자나... 사실 객체지향을 몰라서 상속이 뭔지도 모름. 부모 자식 요런거 잘 모름.... 이번에 처음 해보는거임.....ㅜㅜ 뭐 어쨌든... 아래와 같이 오류가 났었다. 그래서 해결방법을 찾아냈죵. 핸들러를 이용하는겁니다. 액티비티에 정의되어 있는 핸들러가 토스트를 뿌려주는거지.. 아래처럼... AAA.java파일에는 클래스만 정의되어있다고 칩시다. 그리고 MainActivity.java파일에는 액티비티가 정의되어있다고 합시다. MainActivity 클래스에서 다음과 같이 핸..

[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