{{:journal:m-bugs_wifi_2013.9.png?600|}} 에효 금요일 부터 회로도 그려서 월요일 8시 되어서야 완성. ㅜㅠ 다리가 후달린다. 틀리지 않길! 지난번에 그렸던것 덕분에 시간 단축이 되긴했다. 질문 - Gerber 2.3버전으로 보냈는데, 괜찮을까? {{:journal:m-bugs_wifi_2013_9_to_fix1.png?600|}} DCDC 그라운드를 연결을 하나밖에 안했네;;;; 점퍼 날려야겠어. ====== 9월 17일 ====== C언어의 함수의 원형에 대해서 알아보았다. 명확하지 않아서 여러개 파일로 함수를 쪼개서 선언하고 불러올때 의심이 생기곤 했었다. 컴파일러마다/ 표준마다 조금씩 다르다. gcc경우는 함수의 원형을 안써도 warning을 내면서 컴파일이 된다. 그런데 재밌는건 원형을 안쓰면 기본 타입(int)으로 컴파일러가 원형을 만든다. 그래서 int 리턴 함수가 아닌 원형 선언 없이 void 타입의 함수는 main.c:14:6: warning: conflicting types for ‘add’ [enabled by default] 이런 에러가 난다. 그리고 함수의 원형은 여러줄을 같은줄 써도 에러가 안난다. 중복되어도 괜찮다. 아마도 여러개 파일에서 각자 원형을 써도 문제 없이 되게 하기 위해서 인 듯 하다. ---- IAR경우는 Required Prototype이라는 컴파일 옵션이 있구만. 그래서 미로사믹의 프로그래밍 강의(9화)에서 프로토타입을 안쓰면 에러가 나는구나. 컴파일러 최적화 옵션은 low로 맞추었군. ---- 하드웨어 개발자를 위한 소프트웨어 워크숍에서 arm 어셈블리 코드를 머리로 실행하는데 R4레지스터를 함수에서 사용할때 스택에 넣고 복원하는데 왜 하는지 궁금했었는데-_-; AAPCS라는 함수호출에 대한 스팩이 있다 별걸 다 스팩으로 만들어 놨네 http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf A subroutine must preserve the contents of the registers r4-r8, r10, r11 and SP (and r9 in PCS variants that designate r9 as v6). ====== 9월 18일 ====== 노트나 필기할때 Emacs의 org-mode를 사용하다가 싱크하기 불편하고 Emacs자체 키는게 불편해서 A4에 필기하고 있는데, 가볍고 싱크하기 편리한 툴을 찾았다. Emacs에서도 싱크를 지원하는 툴이고.. simplenote.com, 싱크하기 쉽고, 여러가지 클라이언트 지원하고, 저장을 txt로 로컬에 한다. 원도우에서는 nvPy라는 클라이언트를 사용하면 되고, 맥에서는 nvAlt 클라이언트를 사용하고, Emacs지원하니 Emacs작업한 내용을 정리하기가 쉽다. 그리고 org-mode는 문서 단위로 사용하기는 좋은데, 노트한 문서가 커지니깐 검색하기가 불편하다. nvAlt는 검색이 간단해서 좋다. 기본 포멧이 markdown인것도 좋고! ![](http://dh8.kr/wiki/lib/tpl/dokuwiki/images/logo.png) ====== 9월 19일 ====== FET 마이크로컨트롤러에서 큰 dc신호 제어할때 irf540을 썼었는데, V threshold가 2~4v이길래. logic 레벨이라고 생각 했다. 그런데 irf540의 Rds(on) 스펙을 보면 Vgs가 10v 이다. 열이라든지, 암페어 레이팅은 Rds(on)가 관련이 있는데, Vgs가 10v일떄 Rds(on)이 0.077 ohm 이라는것은 보통 내가 제어하는 5v에서는 아마도 ... Rds(on)이 휠씬 크다는 이야기다.Full로 게이트를 키지 않았기 때문에. 그래서 인공위성 LED회로에서 LED 제어하는 모스펫 킬려고 voltage doubler를 썼다. 결론은 5V로 IRF540을 킬 수 는 있지만, Full로 킬 수 는 없다는 이야기 이다. {{:journal:20130919040733944.png?500|}} IRF540 Rdson {{:journal:20130919040815646.png?500|}} IRF510 Rdson 그래서 5V에서 Full로 키고 싶을 때는 logic level fet (RFP30N06LE) 를 사용하는게 좋다. 참고: * http://www.vishay.com/docs/91021/91021.pdf * http://bildr.org/2012/03/rfp30n06le-arduino/ * http://propaneandelectrons.com/projects/wifire16 * https://www.sparkfun.com/datasheets/Components/General/RFP30N06LE.pdf http://propaneandelectrons.com/projects/wifire16 이 프로젝트는 건희씨 작업 도와줄때 만든 octoled랑 비슷하다. // 질문: wifire16은 octoisolator를 사용했다. 12v전원은 어떻게 배선했을까? 솔레노이드 제어(1A+)하는데 pcb배선만으로 파워가 딸릴거 같은데.// http://propaneandelectrons.com/projects/wireless-solenoid-controller-card 여기 회로도 보니깐 내부에서 12v공급하는데.. {{:journal:20130919043547629.png?600|}} kicad 열어서 보드파일 보니깐. 바닥면에 SOLPWR+(12V) 전원을 (세로 2.54*8mm) 크기로 폴리곤을 깔았고, SOLPWR=는 윗면에 폴리곤으로 깔았다. 그러게. 이방법이 있는데, -_-; 나는 바닥을 그냥 GND로 깔아버렸어.. 그리고 octoled는 low side driving을 해서 이런 생각을 안햇지;; {{:journal:20130919044542909.png?600|}} 안드로이드 컨트롤러도 만들었네 : https://github.com/S3FA/SuperStreetFireAndroid ===== 또 I2C ===== 몇 주간 쿼드콥터에 uart만 붙이면 죽어서 찾아보니깐 i2c 문제 였다. I2C 코드는 왜이리 버그가 많냐. I2Cx->CR1 |= CR1_START_Set; while ((I2Cx->CR1 & 0x100) == 0x100) ; 요 며칠 고민한 코드. 인터럽트 방식 안쓰고 결국 polling 방식으로 해결. polling 방식이 낫다는 작년 겨울 msp430 코딩하다가 호준님하고 낸 결론 이었지만, IC 회사에서 주는 샘플코드가 인터럽트 방식으 로 되어 있어서 믿고 싶었다. ====== 9월 24일 ====== 오늘의 커밋 로그. MjpegViewer추가. 9월24일 데모는 여기까지. - Frame레이아웃을 사용하여 LinearLayout 두개를 넣어서 MjpegView와 ControlViewer를 보이게 함. - ControlViewer를 MJpegViewer위에 보이게 하고 싶은데, 세팅메뉴에서 MjpegView 보였다 안보였다 한다. - Frame레이아웃에는 두개의 LinearLayout이 있는데, 이들 순서를 바꾸면 동작이 안된다. (왜?) - 다른 사람 코드를 미리 읽어 본게 삽질 덜하게 도와준것 같다. - 크레이지플라이 사람들(?) 여러 방면에서 잘한다.(전자/펌웨어/파이썬 클리이언트/안드로이드) - 2013년 09월 24일 오전 1:04 client (pc) gst-launch -v udpsrc port=4000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! ffdec_h264 ! fpsdisplaysink fps-update-interval=5000 sync=false server cat run.sh #v4l2-ctl --set-fmt-video=width=1280,height=720,pixelformat=1 # with 30fps or 15fps or 10fps ... #v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=1 # with 30fps #v4l2-ctl --set-fmt-video=width=1024,height=576,pixelformat=1 # with 30fps #v4l2-ctl --set-fmt-video=width=864,height=480,pixelformat=1 # with 10fps (v4l2-ctl --set-parm=10) v4l2-ctl --set-fmt-video=width=1280,height=720,pixelformat=1 # with 30fps v4l2-ctl --set-parm=15 #v4l2-ctl --set-parm=30 sleep 1 ./capture -c 100000 -o | gst-launch -v fdsrc ! legacyh264parse ! rtph264pay ! udpsink host=192.168.1.240 port=4000 #v4l2-ctl --list-formats #v4l2-ctl --list-formats-ext android viewer https://bitbucket.org/coisme/simplemjpegview_gst/src https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java