Cyfinity의 주저리주저리

cyfinity.egloos.com

포토로그


Banner


나의 캔셋 제작기 01 - LED 깜박거리는 회로 만들기 만든것

2009년 당시 동아리에서 만들었던 캔셋 (Cansat, 깡통 사이즈의 초소형 위성) 제작기입니다.

귀찮으니 반말체로 하겠습니다.

---------------

때는 2009년.

같은 학과 로켓동아리에서 전국 대학생 로켓 연합(NURA) 에서 주최하는 소형로켓발사대회에 참가한다고, 우리 동아리에 연합을 의뢰해 왔다.

그리하여 시작된, 시작은 미약(?)하였으나 끝도 미약했던 .... orz.... 캔셋 제작.

개인적으로 소중한 경험이었지만 졸업후 차츰 잊혀져가는 기억이 안타깝기도 했고..
이러다 진짜, 정말로 다 잊어버리기 전에 기록으로 남겨둔다.


1. Atmega (AVR) 과의 첫만남

당시 자료를 검색하다 찾아냈던 AVR은 한마디로, 놀라운 기기였다.

무려 C언어가 지원되는 IC칩이라니!
게다가 개당 가격이 만원도 안해!

보니까 Atmega 128을 많이들 쓰는거 같길래 디바이스마트 (devicemart.co.kr)에서 dr kim atmega128이라는 미리 조립된 모듈을 하나 질렀다.

...당시 학과에서 학생들이 진행하는 프로젝트에 거의 무제한으로 자금을 지원해줬었는데 정말 감사합니다.
이런 오픈마인드가 유지되는 한 부산대 물리학과의 미래는 영원할 것임.
학과 도움이 없었다면 손도 못댔을, 아니 꿈도 못꿨을 프로젝트.

Atmega가 도착한 첫날 제작한 회로는 1초에 한번씩 LED를 깜박거리게 만드는 회로.
회로도는 다음과 (거의) 같다.

물론 이 회로도는 내가 그린거 아니다. 그치만 똑같은 회로임 ㅋ
Dr. Kim모듈이 짱 좋은게, 크리스탈이랑 리셋회로랑 다운로드 회로랑 다 들어있고
빵판에 딱 꽂아서 테스트하기 좋게 세로로 길어서 진짜 최고다. 처음 AVR다룬다면 적극추천.

여튼 회로도에 보면 이것저것 막 적혀있는데 중요한건 PB에 꽂혀있는 LED들이다.
PB는 Port B의 약자임.

즉 이것은 B번 포트에 0번부터 7번까지 LED랑 330옴의 저항을 꽂은 것.
회로도에 보면 LED들을 PA냅두고 궂이 PB에 꽂았는데 아마 회로도 그리기 편해서 그런거같다.
맘에 안들면 PA에 꽂아도 됨.
(5V일때 LED랑 같이쓰는 저항으로 330옴을 많이 쓰는데 왜 그런지 모르겠다. 330옴이 적당한가봄?)

일단 이렇게 꽂으면 회로도는 완료.

이제 Atmega가 어떻게 동작하는지 간략하게 알아보자.

먼저 dr. kim보드에 보면 은색 동그란거 16.000이라고 적힌게 있다. 그게 크리스탈이다 (안에 수정이 들었음).
Atmega는 기본적으로 프로그램을 실행하는 CPU비슷한건데
그 숫자는 1초에 실행할 수 있는 명령의 개수를 의미한다. 16.000은 16MHz라는 뜻임.

Atmega는 짱 좋아서 내부에 자체 발진회로도 갖고 있어서 외부 크리스탈 없이도 동작한다. 근데 느림 ㅋ
그래서 Dr. Kim보드는 미리 외부 크리스탈을 달아 최고 속도 (16MHz)로 동작하도록 세팅 완료되어 있다.

나중에 보드 안사고 AVR 칩만 달랑 사서 크리스탈을 달아서 썼던 적도 있는데,
칩에 크리스탈을 그냥 단다고 동작 안하고 컴퓨터로 셋팅을 해줘야 동작한다.
그리고 셋팅 해줬는데 크리스탈 없으면 AVR이 뻗어버리니까 (심지어 컴퓨터 연결도 안됨) 크리스탈은 꼭 여분을 챙기던가 하는게 좋다.

마지막으로 Atmega는 디지털 회로이다.
즉 Atmega에 들어오거나 Atmega로부터 나가는 신호는 항상 2가지 상태밖에 없다. 0 또는 1.
이것은 각각 0볼트와 VCC전압 (보통 5볼트)에 대응한다.

다음 C 언어. 컴퓨터에 C언어 사용 셋팅을 해줘야 한다.

윈도우 유저는 AVR Studio랑 AVR-GCC를 깔아야 함.
AVR Studio다운받으려면 뭐 가입해야되고 따로 설정도 해줘야 됨. 잡다한 버그도 열라게 많음. 제일 맘에 안드는 버그가 다운로딩 프로그램에 COM포트가 4번까지인가밖에 지원이 안되서 usb다운로더가 막 com8번 이런걸로 잡히면 안구워짐. 여러모로 귀차늠. 자세한건 검색 ㄱㄱ

나는 리눅스를 썼다. 특히 우분투가 참 편한게, 

sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude

하면 설치끝.

자 vi를 켜고 코딩을 시작.

먼저 필요한건 포트를 제어하는 것 + 1초를 기다리는 것.

특히 1초 기다리도록 하는거 중요하다.
AVR은 기본적으로 아무것도 안하고 기다리는 기능같은거 없다.
무조건 얘들은 16MHz, 즉 1초에 1천 6백만번 무슨 명령이건간에 실행을 해야 한다.
그래서 1초를 기다리려면 뭔가 뻘짓(0에 0을 곱한다던가)을 1천 6백만번 해줘야 비로소 1초를 기다릴 수 있는거다.

물론 몇초동안 기다리라는 건 정말 많이 쓰는 명령이니까
매번 이걸 만드는건 미친짓이고 누가 미리 만들어둔 것이 있을 것 같다.

빙고. 있다. 바로

util/delay.h

다.

포트를 제어하는 것은 인풋 아웃풋이니까.
avr/io.h에 선언되어 있다.

그럼 본격적인 코딩.

#include <util/delay.h>
#include <avr/io.h>

int main(void) {
DDRB=0xff;
PB=0x00;
while (1) {
PB=0x00;
delay_ms(1000);
PB=0xff;
delay_ms(1000);
}
return 0;
}

자 delay_ms는 이름에서 쉽게 알수 있듯이 몇 밀리세컨드 만큼 기다려라 하는 함수이다.
1000을 줬으니 1000ms = 1초 기다리는것이다.

Datasheet를 읽어보니 AVR의 각 포트는 외부 신호를 받던가 내보내던가 둘중 하나만 할 수 있고,
그걸 설정하는게 DDRX이며 얘는 포트X의 방향을 결정하는 애란다.

그럼 DDRB=0xff는 뭔가?

FF는 2진수로 표현하면 1111 1111이다.
8개다. 앗 포트의 개수와 같다!

그렇다. 이것들은 차례대로 PB0부터 PB7까지 대응되며,
DDRB=0xFF는 포트B의 모든 핀에 전부 1을 대응시킨 것이다.
즉, 모든 포트를 신호를 내보내는 용도로 사용하겠다는 말이다.

이제 PB=0x00과 0xFF는?
포트 B에 신호를 설정하는 것이다.

즉 PB=0x00은 모든 포트에 0V가 걸리고, 0xFF는 모든 포트에 5V가 걸리는 것이다.
따라서 PB=0xff일때 모든 LED에 불이 들어올것이다!

자 이제 프로그램 분석이 끝났다.

이제 컴파일을 하고 Atmega에 프로그램을 넣어줘야 한다. 컴파일은 avr-gcc로 gcc컴파일하듯이 하면 그냥 된다.

컴파일된 바이너리를 넣을려면 ISP다운로더라는게 있어야한다. 나는 로보블럭꺼 usb되는거! 저렴한거 하나 구입했다.
연결하고 Avrdude를 실행한 뒤, 파일을 골라주면 띠릭~ 금방 구워진다.

전원을 넣으니 깜박깜박 잘도 깜박거렸더랬다.
PB에 넣는값을 바꾸면 꺼졌다 켜졌다 하는 LED도 바꿀수있고
깜박거리는 시간도 바꿀수있고
심지어 도미노도 탈수있다. ㅋㅋ

이렇게 첫 회로가 끝났다.

음 이걸로 뭘 할수 있을까.
알아보니 AVR에는 ADC란게 있어서 아날로그 신호도 받을 수 있단다.

오호 그럼 기압계를 달아서 그 신호를 읽으면 로켓의 고도를 잴 수 있겠구나.
그래서 다음날부터 기압계를 구입해서 동작 테스트를 시도하였다.

그것은 다음에 또 올리겠음.

이어지는 내용

HOWTO : Build GDL on Windows

Now the windows port patches are successfully merged to CVS main source tree, you can compile GDL on windows without manually applying the patches.

1. Download latest CVS version of GDL - from here, and decompress it. You will have 'gdl' directory in result. Move the directory wherever you want.

2. Download prerequisite packages. You should download both development(lib file and header files) and binary(dll file) packages.


Some packages don't contain lib file. In this case, you can create one from def file with 'LIB' utility supplied with MSVC. You can also download the packages you need, e.g. FFTW libraries...

3. Decompress the packages. Make directories for them. For each directories, make 'include' and 'lib' subdirectories. Put the package's header files in 'include' directory, and lib file into 'lib' directory.

4. Download PLPlot and WxWidgets. These two packages are source code distributions, should be manually compiled with cmake.

Before compile PLPlot, you should add

__declspec (dllexport) 

in front of

plP_mmpcx
plP_mmpcy

functions in plcvt.c, and

plstrl

function in plsym.c. You should also modify the header file (plplotP.h) in the same way.

Or you can simply apply this patch - plplot.diff, should work with plplot 5.9.9.

Now you can compile the packages.

5. Build GDL. 

This is my command to build GDL on windows.

cmake ..\gdl -G "Visual Studio 10" -DCURSES_LIBRARY=..\pdcurses\lib\curses.lib -DCURSES_INCLUDE_PATH=..\pdcurses\include -DREADLINEDIR=..\readline -DZLIBDIR=..\zlib -DGSLDIR=..\gsl -DPCRE_LIBRARY=..\pcre\lib\pcre.lib -DPCRE_INCLUDE_DIR=..\pcre\include -DPLPLOTDIR="C:\Program Files (x86)\plplot" -DWXWIDGETSDIR=C:\wxWidgets-2.8.12 -DWXWIDGETSDIR="C:\wxWidgets-2.8.12" -DXDR_LIBRARY=..\xdr\lib\xdr.lib -DXDR_INCLUDE_DIR=..\xdr\include -DFFTW_LIBRARY="..\fftw\lib\libfftw3-3.lib" -DFFTWF_LIBRARY="..\fftw\lib\libfftw3f-3.lib" -DFFTW_INCLUDE_DIR="..\fftw\include" -DFFTW=ON -DMAGICK=OFF -DNETCDF=OFF -DHDF=OFF -DHDF5=OFF -DPYTHON=OFF -DPSLIB=OFF -DX11=OFF -DOPENMP=ON

This will generate a Visual Studio solution. You can also set the generator as 'NMake Makefiles', then you can use the 'nmake' command. I manually specified library name for some packages, because cmake couldn't find the packages in default settings.

6. Finally, move the dll files supplied with the libraries into the directory contains the compiled GDL binary. Now, run gdl.exe. It should run properly.

-------------------------------------

13-09-30, Added tgzipped libraries file for building GDL on Windows.

Windows Port of GDL

------------------ 2012/Sep/18 Added ----------------

Here is an organized version of the patches I did.

After decompressing the file you will get 3 patches.

The 1st patch includes the prefix patch of GDL typecodes, and the signedness patch for the 'omp for' statements.
(And in the last patch I uploaded, the signedness patch didn't work as I intended. It was corrected in this patch.)

The 2nd patch includes actual patches to make it compilable in windows.

The 3rd patch is for a premature plotting support. It needs more testing.

The patches should be applied 1->2->3 in sequence.


------------------------------------------------------
This is a windows port of GDL, based on the SVN version.

You can apply this patch on the gdl directory after download the GDL source code from SVN.

You need following packages to compile:

fftw - http://www.fftw.org/install/windows.html
gsl - http://gnuwin32.sourceforge.net/packages/gsl.htm
pcre - http://gnuwin32.sourceforge.net/packages/pcre.htm
pdcurses - http://gnuwin32.sourceforge.net/packages/pdcurses.htm
readline - http://gnuwin32.sourceforge.net/packages/readline.htm
zlib - http://gnuwin32.sourceforge.net/packages/zlib.htm
xdr - http://code.google.com/p/bsd-xdr/

and plplot, wxWidgets, etc.


Tested on Visual Studio 2010, with following build options :

cmake.exe ..\gdl -G "Visual Studio 10" -DCURSES_LIBRARY=..\pdcurses\lib\curses.lib -DCURSES_INCLUDE_PATH=..\pdcurses\include -DREADLINEDIR=..\readline -DZLIBDIR=..\zlib -DGSLDIR=..\gsl -DPCRE_LIBRARY=..\pcre\lib\pcre.lib -DPCRE_INCLUDE_DIR=..\pcre\include -DPLPLOTDIR="C:\Program Files (x86)\plplot" -DWXWIDGETSDIR=C:\wxWidgets-2.8.12 -DWXWIDGETSDIR="C:\wxWidgets-2.8.12" -DXDR_LIBRARY=..\xdr\lib\xdr.lib -DXDR_INCLUDE_DIR=..\xdr\include -DMAGICK=OFF -DNETCDF=OFF -DHDF=OFF -DHDF5=OFF -DFFTW=OFF -DPYTHON=OFF -DPSLIB=OFF -DX11=OFF -DOPENMP=OFF

컴퓨터 기초 - 전자계산기 공부한것

아래의 글은 제가 학부생 때 동아리원 프로그래밍 교육을 위해 작성하였던 글입니다.

아무래도 물리학과생이다보니 비유가 물리학과스럽네요.

틀린 부분은 지적 부탁드립니다.

---------------------------------------------------------------------------------------------

1. 전자계산기


1.1 튜링 기계(Turing machine)


튜링 기계는 1936년에 앨런 튜링(Alan Mathison Turing) 이 소개한 개념이다. 어떠한 특정 기계를 의미하는 것이라기보다는 튜링이 정한 규칙을 따르는 모든 기계를 통틀어 일컫는 말이다.

튜링은 수학자의 뇌를 하나의 기계로 간주하였으며, 따라서 수학 문제를 푸는 수학자의 행동이 무엇이건 그것이 곧 기계화된 동작들로 표시될 수 있다고 생각하였다. 튜링이 최종적으로 고안한 것은 입력, 프로그램, 출력의 세 구성 요소로 이루어진 기계였다. 이 세 구성 요소는 각각 수학에서의 공리, 추론, 정리와 일대일 대응을 이룬다. 수학에서는 이러한 세 구성 요소로 이루어진 것을 ‘알고리즘’이라고 부르며, 따라서 튜링 기계는 곧 알고리즘이다.


(출처 : http://www.aistudy.com)


위 그림은 튜링 기계를 간단하게 그린 것이다. 기계는 긴 선형의 테이프 위에 위치하며, 왼쪽, 오른쪽으로 한 칸씩 이동할 수 있게 되어 있다. 또한 현재상태와 읽은 데이터에 대해 어떻게 행동하라고 정의되어진 프로그램이 입력되면 그대로 동작한다. 튜링 기계가 어떻게 수학 문제를 해결하는지에 관해서는 다른 많은 좋은 자료들이 있으니 찾아보고 참고하기를 바란다. 중요한 것은 이런 단순한 기계가 복잡한 수학 문제를 풀 수 있다는 것을 알아두는 것이다.

현재 존재하는 모든 컴퓨터의 CPU, 즉 중앙처리장치는 튜링이 고안한 방식보다 훨씬 진보한 방식으로 연산을 수행한다. 그러나 이것은 성능을 높이기 위한 여러 최적화가 적용된 것이고, 수학적으로 이 모든 장치들은 튜링 기계와 동일하다. 따라서 나중에 CPU의 동작원리나 어셈블리어(기계어를 영어에 1:1 대응시킨 언어)를 공부하고 싶은 사람은 튜링 기계의 원리에 대해 공부해 두면 좋을 것이다.


1.2 처치-튜링 명제


처치-튜링 명제는 알론조 처치(Alonzo Church), 앨런 튜링에 의해 제창된 ‘모든 효율적인 계산이나 알고리즘은 튜링 기계가 계산할 수 있다’라는 명제이다. ‘효율적인 계산’이란 말은 우리가 직관적으로 ‘알고리즘’이라고 생각하는 방법에 의해 계산될 수 있는 계산이라는 뜻을 지닌다. 그러나 모든 계산에 대해(우리가 생각하지 못하는, 미래에 발견될 수도 있는 계산을 포함해서) 이 명제가 성립하는가를 확인할 길은 없다.

수많은 사람들이 이 명제를 깨기 위해 도전하였으나, 어느 누구도 이 명제를 깨뜨릴 만한 결론을 얻은 사람은 없었다. 사람들은 이 명제를 참으로 간주하기 시작하였고 이를 기반으로 컴퓨터 과학이라는 학문을 발전시켰다.

많은 시간이 지나, 처치-튜링 명제는 현대의 컴퓨터 과학에서 물리학이나 화학의 기본 법칙과 동등한 위상을 갖게 되었다. 이를테면 고전 물리학의 근거가 되는 뉴턴의 운동 법칙은 증명될 수 없지만 참이라고 간주하고 물리학 문제를 풀듯이, 처치-튜링 명제도 증명될 수 없는 하나의 공리로써 간주하고 프로그래밍에 임하는 것이다.



다음 클라우드 패쳐 만든것

다음에서 클라우드 앱을 내놓았더군요.

그런데 안타깝게도 미리보기 기능이 약해서 많은 종류의 문서나 동영상을 제대로 볼 수가 없네요.

외부 프로그램으로 여는 기능이 지원되면 여러모로 참 좋을텐데,

그래서 외부 프로그램 지원 기능을 추가하는 애드온을 만들었습니다.

보관함에 들어가서 문서를 열고, 오른쪽 위에 새로 추가된 버튼을 눌러 외부 프로그램으로 보내면 됩니다.

스크린샷 :


뭐 이렇습니다.

설치방법은 아래 파일을 내려받고, 아이폰에 ssh로 접속하시던가 ifunbox라던가 하는걸 이용해서

/Library/MobileSubstrate/DynamicLibraries

에 넣고 respring 해주시면 되겠습니다.

아, 물론 탈옥폰에서만 지원됩니다. 

---------------------------------------------------------------


1 2



통계 위젯 (화이트)

10
10
2254

수평형 스카이스크래퍼

ga

mathjax