다이오드

임베디드/개념 2018. 1. 4. 12:17

다이오드란 한쪽 방향으로 전류가 흐르도록 제어하는 반도체 소자를 말한다. 


대부분의 반도체 다이오드는 p-n 접합으로 두개의 전극을 갖는 반도체 결정체(crystalline)이다. PN 다이오드에서 전류는 P형 반도체 면에서 N형 반도체 면으로만 흐를 수 있다.


다이오드의 종류로는 한쪽 방향으로만 전류를 흐르게 하는 정류 다이오드, 일정 신호에서 필요한 신호만 거를 때 사용하는 검파 다이오드, 빛을 낼 수 있는 발광 다이오드 등 여러 종류가 있다.



참고


다이오드 - 위키백과, 우리 모두의 백과사전

'임베디드 > 개념' 카테고리의 다른 글

에너지 띠  (0) 2018.01.04
P형 반도체, N형 반도체  (0) 2018.01.04
단자와 반도체 소자  (0) 2018.01.03
JTAG  (0) 2018.01.02
개념 정리 목록  (0) 2018.01.02
블로그 이미지

NCookie

,

단자 : 전기적으로 신호를 전달하는 회로의 끝 부분



소자


구조, 제조방식, 역할, 단자 수 등에 따라 분류할 수 있다.


구조 : 점접촉형, 결정성장형, 합금접합형, 메사형, 평면형 등


제조방식 : 확산접합형, 에피택셜형, 인슐레이터 위의 실리콘 등


역할 : 능동소자, 수동소자


단자 수 : 2단자 소자, 3단자 소자, 다단자 소자



대표적인 고체소자로는 TR, FET, SCR, 다이오드, LED 등이 있다.


반도체 소자는 개별부품이나 다수의 소자를 하나의 기판에 집적하는 집적회로 등에 사용될 수 있다.



참고


단자 - 위키백과, 우리 모두의 백과사전


반도체소자 (semiconductor device, 半導體素子)

'임베디드 > 개념' 카테고리의 다른 글

P형 반도체, N형 반도체  (0) 2018.01.04
다이오드  (0) 2018.01.04
JTAG  (0) 2018.01.02
개념 정리 목록  (0) 2018.01.02
PWM이란  (0) 2017.11.24
블로그 이미지

NCookie

,

JTAG

임베디드/개념 2018. 1. 2. 18:07

JTAG(Joint Test Action Group)이란 임베디드 시스템 개발 시에 사용되는 디버깅 장비이다. 보통 '제이택'이라고 발음하더라.


다층기판 보드가 등장하면서 기존의 보드 테스트 방식은 안정성과 비용에 문제를 일으키게 되었고, 이러한 문제점을 해결하기 위해 80년대 중반에 joint European Test Access Group이란 단체가 결성되어 a serial shift register around the boundary of the device라는 개념을 발전시켜 탄생하게 되었다. 일반적으로 JTAG이란 말보다는 Boundary-Scan이란 말을 더 많이 사용한다.


JTAG의 작동 방식은 칩 내부에 Boundary Cell을 만들어 이것이 외부의 핀과 일대 일로 연결되어, 프로세서가 할 수 있는 동작을 중간의 Cell을 통해 인위적으로 수행할 수 있도록 하는 것이다. 이런 방식으로 JTAG은 다양한 하드웨어의 테스트나 연결 상태등을 체크할 수 있다.


라고 위키피디아에 나와있었는데, 직접 본 적도 없어서 잘 모르겠다. 그냥 디버깅 장치라는 것만 알고 나중에 직접 사용하게 되면 다시 알아봐야겠다.


============================================================================


이 글을 쓴지 하루만에 JTAG를 볼 수 있게 되었다. 컴퓨터와 연결하기 위해서 USB B type을 사용한다. JTAG의 화살표가 있는 부분과 보드에서 네모 모양의 납 부분이 1번 핀이므로 이거에 맞게 연결하면 된다.


지금 회사에서 Microchip의 PIC라는 칩을 만지고 있는데, 같은 회사에서 만든 디버깅 도구인 PICkit3가 아래 사진에 있는 것이다. 이것을 통하여 칩에 read/write, 디버깅 등을 할 수 있다. 또한 보드에 전원도 공급할 수 있는데, 대신 target이 소비하는 전류가 30mA 이하이어야 한다. 자세한 내용은 공식 문서 참조

 




참고


https://ko.wikipedia.org/wiki/JTAG

'임베디드 > 개념' 카테고리의 다른 글

다이오드  (0) 2018.01.04
단자와 반도체 소자  (0) 2018.01.03
개념 정리 목록  (0) 2018.01.02
PWM이란  (0) 2017.11.24
레귤레이터(Regulator)  (0) 2017.10.25
블로그 이미지

NCookie

,

회사에서 앱을 개발하는데 가장 최근에 열린 activity를 알아오는 기능이 필요했었다. 그래서 찾아보다가 리플렉션도 잠깐 건드려보기도 했는데, 굉장히 간단한 방법을 찾았다.


어려운 개념도 아니다. Application.ActivityLifecycleCallbacks라는 인터페이스를 구현해주기만 하면 된다. 메소드로 onActivityStarted, onActivityResumed 등이 있는데, 매개변수로 onStart, onResume 등을 호출한 Activity가 전달된다. 이걸 manifest에서 등록한 application 파일에서 구현하면 쉽게 최근 activity을 얻어올 수 있다.


public class WWAApplication extends Application { public static Activity mCurrentActivity = null; ActivityLifecycleCallbacks mActivityLifecycleCallbacks = new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { mCurrentActivity = activity; Log.i("WWAAplication", activity.getClass().getSimpleName()); } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }; @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks); } }


callback register 해주는 것 잊지 말고.


나는 이것을 이용하여 사용자가 어플리케이션 화면을 벗어나거나 화면을 off 하면 notification bar를 띄우고, 다시 화면으로 돌아오면 notification을 disable하였다. 이 부분에 관해 자세한 방법은 No, You Can Not Override the Home Button... But You Don't Have To! 참고.

블로그 이미지

NCookie

,

개념 정리 목록

기계 2018. 1. 2. 16:56

이것도 이미 정리가 끝났어야 하는 것들이다. 하. 자괴감 든다.


  • 기어비
  • 주물, 주조
  • 금형
  • 스크류
  • 백레쉬 및 해결방법
  • 나사 종류(샘스, 둥근, 무두 등) 및 규격


블로그 이미지

NCookie

,

원래는 몇 개월 전에 정리가 끝났어야 하는 것들인데, 내가 게을러서 이제서야 다시 시작한다. 마음 잡고 잘 해보자.


중요한건 어느 정도 깊이까지 공부를 하느냐가 문제인데... 우선 목표는 다른 사람이 이해할 수 있도록 설명해주는 수준으로 아는 것이다. 솔직히 원리까지 알자면 시간도 오래 걸리고 금방 질릴 것 같다. 지금 당장은 개념과 특징 정도만 알아두어도 괜찮을 것 같다.



마지막 업데이트

오전 10:33
수요일, 2018년 1월 31일 (GMT+9)


'임베디드 > 개념' 카테고리의 다른 글

단자와 반도체 소자  (0) 2018.01.03
JTAG  (0) 2018.01.02
PWM이란  (0) 2017.11.24
레귤레이터(Regulator)  (0) 2017.10.25
수동소자, 능동소자  (0) 2017.10.25
블로그 이미지

NCookie

,

지금 다니고 있는 회사는 분야가 임베디드에 가깝기 때문에 소프트웨어 쪽만 알고서는 일하기 힘들다. 그렇기 때문에 진입장벽이 낮다는 PIC를 통해 임베디드 분야에 입문을 하게 되었다.


차장님께 추천받은 IDE는 MPLAB X IDE로 마이크로 컨트롤러와 아날로그 반도체 분야에서 유명한 회사라고 한다. 이 회사에서 개발자를 위해 MPLAB 이라는 개발환경을 제공한다. 기존에 자체적으로 만들었던 MPLAB과 NetBeans 기반의 MPLAB X가 있는데, 후자가 더 최신이고 평가도 좋다. 회사에서도 무료로 쓸 수 있는 프리웨어이다.


컴파일러는 회사에서 구매했다고 하는 CCS를 사용하기로 하였다. CCS는 마이크로 칩을 위한 C 컴파일러라고 한다. 자세한 내용은 홈페이지 참고.


처음 차장님이 개발환경을 구축하는데 시간이 꽤 걸릴 것이라고 말씀하셔서 걱정을 했었는데 다행히 자료가 많아서 생각보다 일찍 끝났다. 내가 MPLAB X IDE에서 CCS 컴파일러를 사용하기 위해 참고했던 자료가 있다.(PDF)



자세한건 첨부 링크 참조하고, 간단하게 설명하자면 그냥 플러그인 설치하고 프로젝트 생성할 때 설정만 해주면 된다. 그리고 내가 헤매서 쓸데없이 시간을 낭비한 부분이 있었다. 프로젝트를 생성하면 기본적으로 헤더와 소스 파일이 없는데, 소스 파일같은 경우에는 기존에 있던 파일을 불러와 사용할 수 있다.



그리고 저 예제 파일은 컴파일러가 설치되는 폴더(기본적으로 C 드라이브의 Program Files에 설치됨)에 함께 들어있는데, 만약 저 다이얼로그 박스의 우측 하단에 있는 Copy 부분을 체크하지 않으면 해당 파일 경로를 참조하게 된다. 즉, 시스템 폴더 안에 있는 파일을 접근하려고 하기 때문에 빌드 과정에서 오류가 발생할 수 밖에 없는 것이다.


저 Copy 부분을 보지 못해서 몇 시간동안 문제를 찾기 위해서 뻘짓을 했었다. 공식 메뉴얼에서도 이 부분을 언급했었는데 나는 이것이 문제라고는 생각지도 못하고 넘어갔었다. 앞으로는 문서를 꼼꼼하게 살피고 넘어가자...

블로그 이미지

NCookie

,

현재 회사에서 진행하고 있는 프로젝트에서 안드로이드 어플리케이션은 특정 디바이스와 계속해서 블루투스 연결을 유지해야 한다. 그러다보니 Service와 Broadcast 같은 것들에 대해 알아보게 되었는데, Service 부분이 헷갈리는게 있어서 정리하려고 한다.



안드로이드의 서비스는 life cycle에 따라 종류가 두 가지로 나누어진다.




1. Started Service


startService 메소드를 사용하면 서비스가 생성되며, stopService 또는 stopSelf를 호출하지 않는 이상 서비스는 종료되지 않고 계속 작동한다.


이러한 형태는 백그라운드에서 계속 돌아가야 하는 음악 재생 어플리케이션 등에서 사용된다.


그리고 서비스의 life cycle에 따라 콜백 메소드들이 존재한다.


하나의 서비스가 생성될 때 onCreate가 단 한번만 호출된다.


예전에는 onStart를 사용하였지만 요즘은 onStartCommand 사용을 권장하고 있다. 서비스가 시작될 때 호출되는데, 만약 이미 startService를 했는데 추가로 startService를 하려고 하면 이 onStartCommand가 호출된다. bindService를 사용할 때는 호출되지 않는다.


그리고 이 메소드는 int형의 반환값을 가지는데, 리소스 부족 등의 이유로 시스템이 서비스를 강제종료 했을 떄, 어떻게 처리할지를 정하는 플래그이다. 


- START_STICKY : client에서 startService 사용 시 intent로 서비스를 전달하며, onStartCommand에서 intent를 인자로 받을 수 있다. 단, 기존의 전달되었던 intent 값은 넘어오지 않는다.


- START_NOT_STICKY : 시스템이 서비스를 죽여도 다시 살아나지 않는다.


- START_REDELIVER_INTENT : 기본적으로 START_STICKY 플래그와 비슷하며, 대신 기존에 전달했던 intent 값을 돌려준다.


서비스 생성 : startService(Intent service)

서비스 종료 : stopService() 또는 stopSelf()



2. Bound Service


bindService 메소드를 사용하면 서비스가 생성되며, unbindService를 사용하거나 기존에 bound 된 액티비티들이 모두 unbind 하면 종료된다.


명시적으로 메소드를 사용해야 종료되는 Started Service와는 달리, 생성한 서비스에 bound 된 액티비티가 존재하지 않는다면 서비스는 종료된다.


콜백 메소드로는 onBind, onRebind, onUnbind가 있다. onRebind 같은 경우, 이미 unbind 되었던 액티비티가 다시 서비스에 연결했을 때 호출된다. 내 프로젝트를 예로 들자면 사용자가 앱 화면을 벗어나 다른 작업을 할 때 unbind가 되는데, 현재 디바이스가 연결되어 있다는 것을 notification bar로 보여준다. 그리고 다시 화면으로 돌아와 rebind 되면 notification을 내린다.


Bound Service 또한 마찬가지로 서비스에 플래그를 전달할 수 있는데, bindService 메소드의 인자로 값을 설정한다. 흔히 사용하는 플래그로는 0과 BIND_AUTO_CREATE가 있다.


0을 플래그로 설정하면 startService로 서비스를 생성하기 이전까지는 서비스가 생성되지 않는다. 만약 기존에 서비스가 생성되어 있다면 정상적으로 bind 된다.


BIND_AUTO_CREATE는 시스템에 의해 강제로 종료되더라도 리소스가 충분해지면 리소스에서 다시 실행하도록 하며, onBind에서 이전에 전달받았던 Intent 값을 받을 수 있다. 즉 바인딩된 액티비티가 존재하는 한 서비스를 생성한다. 대신 onStartCommand는 startService를 사용할 때에만 호출된다.


서비스 생성 : bindService(Intent service, ServiceConnection conn, int flags)

서비스 종료 : unbindService() 또는 모든 액티비티 unbound



3. start와 bind 동시 사용


startService와 bindService를 동시에 사용하는 것 또한 가능하다. 


이 때 서비스의 life cycle은 Started Service를 따른다. 즉, 명시적으로 stopService 또는 stopSelf 메소드를 사용하지 않는 이상 서비스는 종료되지 않는다.(시스템이 종료하는 것은 제외하고...)


이에 대해서는 구글에 좋은 예제가 있다.



참고


[Android] 서비스(Service)의 기초


19. Service에 대해서 - Service의 생존(2)


[컴][안드로이드] service에 bind하기 - local service


android service startService() and bindService()


Use 0 or BIND_AUTO_CREATE for bindService's flag


Google Android developers Context#BIND_AUTO_CREATE

블로그 이미지

NCookie

,

Serializable 을 implements 해서 BluetoothDevice 객체를 Intent에 넣어서 전달하려고 했는데, 막상 받아보니 null 값이 들어있었다.


그래서 찾아보니, BluetoothDevice 클래스 선언 단계에서 Parcelable 을 implements 하였고, 필요한 함수들도 이미 구현되어 있다고 한다.


그래서 Parcelabe을 implements 하거나 그에 따라 필요한 함수들도 따로 구현할 필요가 없다.


그냥 값을 넘길 때


intent.putExtra(intent_key, mSelectedDevice);
startActivity(intent);

하고, 값을 받으려면


Intent intent = getIntent();
BluetoothDevice bluetoothDevice = intent.getExtras().getParcelable(intent_key);


이렇게 하면 된다. 엄청 편하다.



참고


Passing BluetoothDevice Object to Another Activity though Intent


Google Developers : BluetoothDevice

블로그 이미지

NCookie

,

png 이미지를 안드로이드에서 사용했는데, 위 아래의 여백이 있었다.


그러나 실제 이미지에는 그런 여백이 없었다.


이런 현상은 android:adjustViewBounds 속성을 이용하여 해결할 수 있다. 이 속성은 drawable의 원래 비율을 유지하기 위해 뷰의 영역을 조절할지 정한다.


그렇기 때문에 이 속성을 true로 하면 여백을 없앨 수 있다.


만약 안드로이드의 API 가 17 이하라면, 이미지가 이미지뷰보다 클 때에만 적용된다. 자세한 내용은 아래의 링크를 참고하자.




참고


Google Developers ImageView


[안드로이드] SDK 17 이하에서 ImageView의 adjustViewBounds 속성 문제

블로그 이미지

NCookie

,