ATmega 16 ( avr ) 을 잠깐 취미로 하기 위해서 무었을 봐야 할까요?

doodoo의 이미지

갑자기 avr 마이콤에 관심이 생겼습니다.
제가 오락을 좋아해서(제 아이콘 보이시죠?, IL-2에서 제가 탈출하는 겁니다...ㅎㅎ) 조이스틱을
자작 해 볼까 하는것에서 시작했는데요

인터넷에 가면 Mjoy16, Mjoy8 두가지의 공개된 회로와 hex파일이 있습니다
이것을 마이콤에 업로드를 해야 하는데 이 마이콤이 바로 ATmega16, ATmega8 입니다.

업로드로 사용할 예정인 포트는 시리얼 입니다. 이것도 시리얼로 약간의 회로를 꾸며서 마이콤으로 넣는 회로가 인터넷에 있더군요.
프로그램은 avr-gcc 에 uisp, avrdude 등을 가지고(현재 우분투 입니다)
넣으면 될것 같더군요. 이미 hex 파일이 있으니 avr-gcc 등은 필요도 없겠지요

그면 간단히 넣으면 되는것 아니냐? 라고 해야겠지만 문제가...

첫번째는 제가 이걸 첨 해보는 거라서 실제로 업로드 할때 어떻게 어떤 순서로 하는게 좋은지
잘 몰라서 여기에 글을 써 봅니다.

두번째는 아시다시피 포텐시오미터(가변저항기)로 이루어진 조이스틱은 시간이 가면서 열화가
나서 점점 사용이 불가능하게 되는데(실제로 모든 일은 제 조이스틱의 러더가 속썪여서...ㅠㅠ)
이것을 해결하는 방법중 볼마우스 처럼 인크리멘털 인코더를 쓴것이 좋을것 같더군요
이 인코더를 해석하는 디코더가 바로 쿼드리쳐 디코더 인데 이것도 avr-gcc 안에 드라이버에
들어가 있더군요

그러면 프로그램을 짜서 이 디코더를 조이스틱 프로그램과 연결을 해야 하는데 프로그램
능력이 형편없습니다
남들이 짜놓은 코드는 정말 모르겠더군요(저는 hello.c 정도의 실력 정도 입니다.) 심각하죠?

여러분들의 의견을 듣고 싶네요...무었부터 해야 하는지....

추신1. 엘레파츠에서 atmega16관련 부품을 샀습니다.크리스탈.저항.콘덴서.커넥터등등
조립은 만능기판에 점퍼선으로 엉성하게 하고, 완성되면 고정용으로 실리콘을 발라놓을
생각입니다.

추신2. 아주 오래전에 전자과를 나와서 그런지 atmega data sheet 를 봐도 무슨 예기인지
잘 모르겠더군요...아주 햇갈립니다.

추신3. 지금 가지고 있는 hex파일을 c 쏘스처럼 만드는건 불가능 하겠죠?(옛날의 소프트아이스 처럼) 그것을 가지고 핀 3개를 희생시키고 쿼드리쳐 인코더 입력의 A, B, Z 시그널 인풋으로 만들려고 하는데, 제 생각에 거의 불가능 하다고 생각합니다. 그면 쿼드리쳐 디코더는 또 다른 마이콤으로
추가로 만들어야 한다고 생각 하는데 맞습니까?

추신4. 여기 개시판을 다 뒤지니 여기서도 avr 을 이용해서 사용하시는 분들이 많이 계시더군요
특히 데스크탑 출품작인 나빌레라님꺼도 한동안 봤는데 서로 목적이 다른것도 있고, 씨언어
실력때문에 도데체 무슨 프로그램을 짠건지 잘 모르겠더군요(avr 쪽...)

어느쪽에 예기를 꺼내야 할지 몰라서 자유게시판에 올립니다..^^;
갑자기 이곳저곳에서 정보를 찿으니 두서가 없군요..

bus710의 이미지

다운로드하실 때, 일반 hex 말고도 fusebit를 주의하셔야 할 것 같습니다...
fusebit는 콘트롤러가 rc발진을 이용할지 xtal의 입력을 이용할지를 정하기도 하고, 워치독 on-off, brown out detect도 관리합니다.

그게 잘 세팅되지 않으면 원하는 동작이 나오기 어렵죠...

akudoku.net

life is only one time

puaxx의 이미지


당연한 이야기이겠지만 일단 책을 사서 보시구요...전자공학 전공하셨다면 책 보시면 이해 금방 하실것 같습니다.

저도 배울라고 인터넷 여기저기 뒤져봤는데..역시 책만한것 없었습니다.

그런데 C언어 실력이 기초수준이시라면 당장 뭘 만들기는 힘들겠네요.

네이버 카페에 "당근이의 AVR" 이라는 카페가 있습니다.제가 알기론 국내 AVR 카페중에서는 상위권에 든다고 생각합니다.

해외에는 "AVR FREAK" 이라는 곳이 있습니다.

doodoo의 이미지

감사합니다...
혹시 디코더에 대해 아시는 분 없으신가요?

근데...오늘 교보문고에 가서 봤는데...avr-gcc 를 이용한 예제는 전무하더군요.
모두 윈도우에서 작업을 하는것으로 되어 있는데...결국 못사고 왔어요.

이왕 리눅스도 있고 apt-get 으로 avr 관련 소프트웨어는 몽땅 깔아둔 터라
여기서 작업하고 싶은데....ㅠㅠ

정태영의 이미지

오래된 글이지만 디코더는 00 -> 0, 01 -> 1, 10 -> 2, 11 -> 3 같은 동작을 하는 디바이스입니다. 입력 I0, I1 을 출력 O0, O1. O2, O3 중 하나로 변경하는 역할을 하죠.

avrstudio 는 avr-gcc, avr-libc, binutils 등 이것저것을 묶어놓은 개발 툴 패키지라고 보시면 되구요.

책을 사시면 좋은게 프린트된 ISP 보드가 있어서 ISP 를 쉽게 만들 수 있더군요. 옛날에 잠깐 AVR 가지고 이것저것 해볼때는 뭔가 열심히 공들여서 프로그래머도 만들구 그랬었는데 --;; 요새 다 귀찮다보니 활용을 안하게 되네요.

http://b.mytears.org/2006/12/466

아래 링크는 제가 avr 가지고 장난쳤던것들 관련된 포스트들입니다.~

http://b.mytears.org/tag/avr

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

WinAVR은 avr-gcc의 Windows 버전입니다. 그러므로 차이는 없습니다.

그리고 위에서 akudoku님이 이미 언급하셨지만 Fuse Bit 설정 잘못하면 외부 클럭 입력라인으로 강제 클럭 펌프질해야 하는 경우도 생기므로 주의하시기 바랍니다. (돈이 남아돈다면 칩을 다시 갈아주는 방법도 있습니다) 일단은 주어진 회로도를 보고 입출력을 확인하는게 중요한데요. 이건 뭐... 디지털 회로에 대한 기초는 있어야 합니다. 그리고 hex -> C로의 변환은 불가능하다고 보시는게 낫습니다. 그 노력이면 새로 소스 코드를 만들고도 남습니다.

Quadrature Encoder는 회전에 따라 클럭 펄스가 발생하는 구조이고 T/4의 위상차로 움직이는 두개의 펄스 출력을 냅니다. 따라서 두 클럭 펄스 조합의 변화가 축의 회전 방향을 알려줍니다. 펄스 입력은 보통 AVR의 I/O 핀에 물려 있을 것이고 각각 1개의 Bit 입력이 될 것이므로 Encoder가 연결되어 있는 포트를 읽어서 두 비트를 Mask한 뒤에 그 값이 어떻게 변하는지(2비트이니 총 4가지 밖에 없겠죠) Table로 만들어 두면 방향을 가늠할 수 있을 겁니다. 그리고 펄스의 횟수를 측정하여 각도의 변화를 추적하면 됩니다.

익명 사용자의 이미지

AVR 책은 윤덕용 교수님의 책이 가장 바이블 형태죠.. 따라하기 형태의 책도 많이 있을테구요. 말씀하시것 처럼 "당근이 AVR 가지고 놀기" 괜찮을 듯 하네요..
아님 여기에 생각하신 H/W 회로도와 샘플 Source를 올리면 코멘트가 달리지 않을까요?. ㅎㅎ

whitelazy의 이미지

음.. 페러럴 포트 사용하는 isp 회로 꾸미시는게 간단할껍니다 74244랑 저항하나 다이오드하나 .. 들어갈껍니다
http://actionprog.tistory.com/entry/AVR-ISP-Cable-%EB%8F%84%EB%A9%B4
캐페시터도 하나 들어가네요...
windows 환경이라면 다운로더는 ponyprog 사용하시면 되구요.
디코더는 음.. mega16은 써보질 않아서 생각안나는데
조이스틱용으로 인코더를 쓰려면 정렬을 해주어야 할꺼 같습니다만.. 상관없을것도 같군요
인코더 일반적으로 나오는건 A /A B /B 상 나올껍니다...
이게.. 인코더 써본지 한 3년되서 기억은 안나는데

         --------------             --------------
         |            |             |            |
--------             --------------             --------------
                --------------             --------------
                |            |             |            |
        --------             --------------             --------------

대충 위가 A상 아래가 B상입니다.. 오른쪽(->)으로 회전할때 A가 1되고 B가 1되고 A가 0되고 B가 0되는 파형이 나온다고하면
왼쪽으로 회전하면 반대 파형이 나옵니다. B상이 먼저 1이됬다가 A상이 1되고 B상이 0되고 A상이 0됩니다.

10
11
01
00
식으로 뜨면 위 기준으로 오른쪽
01
11
10
00으로 뜨면왼쪽이겠죠..
이거로 방향을 알수있습니다. 위에 예를 들은 방향은 임의로 정한 방향입니다.
인코더의 해상도.. 슬릿이 100개면 A번 기준으로 100번 파형뜨면 1바퀴일껍니다.. 한번뜨면 3.6도입니다.. 1000개면 1000번뜨면1바퀴 한번뜨면 0.36도겠네요.. 200개면 또 200번에 1바퀴 1바퀴에 1.8도겠죠.. 위 파형과 이거가지고 여차저차하면 가속도와 속도도 알수있습니다. 안나오면뭐.. 여차저차해서 해결하시길 ... 그냥 나올꺼 같아요 ㅋㅋㅋ
이거가지고 디코더 소스보면서 분석하시던가 직접 짜시면 될껍니다... /A /B는 역상입니다.. 그리기 귀찮으니 ㅋㅋㅋ
제 기억에는 A /A B /B 나오던걸로 기억하는데 잘은 모르겠습니다 ㅋㅋㅋ 일반적으로는 남들 쓰는거랑 비슷하게 만들어야 팔리겠지만.. 만드는 회사맘이겠죠...
귀찮으면 대충 외부 카운터에 A B상 입력하고 어느게 먼저뜨는지 확인하면서 카운팅하시면됩니다..

윈도우 기준이면 winavr이 아닌 iar for avr 상용 컴파일러 기준이 많습니다. avr datasheet의 예제가 다 어셈과 iar 컴파일러용이기때문입니다.
대충 비슷하고 인터럽트 루틴이나 그런것만 좀 다릅니다. 개인적으론 상용 비상용을 떠나 winavr을 선호합니다... 제가짠 코드랑 iar이랑 잘 안맞아서 포기하고 winavr로 전향했습니다.

p.s. avr-gcc <-> iar for avr 사이의 코드는 포팅이 필요합니다... 헤더파일이 다르고 헤더파일에서 레지스터명 정의한것이 다르고 인터럽트 서비스루틴 선언하는방법이 다릅니다. 이부분만 주의하시면서 내부의 인터럽트나 기타등등의 세팅방법이나 순서, 알고리즘 정도만 참고하시면 될꺼같습니다.

whitelazy의 이미지

Quote:
추신3. 지금 가지고 있는 hex파일을 c 쏘스처럼 만드는건 불가능 하겠죠?(옛날의 소프트아이스 처럼) 그것을 가지고 핀 3개를 희생시키고 쿼드리쳐 인코더 입력의 A, B, Z 시그널 인풋으로 만들려고 하는데, 제 생각에 거의 불가능 하다고 생각합니다. 그면 쿼드리쳐 디코더는 또 다른 마이콤으로
추가로 만들어야 한다고 생각 하는데 맞습니까?

A/B로 속도뽑고 A/B상으로 방향뽑아서 Z상을 만들어 Z를 넣어주는것 같습니다만.. 정확히는 모르겠습니다. 코드도 안보고 회로도 없이 단지 예전에 사용했던 칩의 디코더가 그리 했기에 그렇지 않을까 추측하는겁니다. 전혀 다를수도있음을 알려드립니다.
그렇다면 마이컴으로 만들수도있고 논리회로로 구현할 수도 있을겁니다.

조이스틱으로 동작하게하는데에 대한 질문은 안받습니다. 하드웨어는 만들수 있는데 OS에서 조이스틱을 인식시킬 능력은 안됩니다. OS에 붙여서 쓸일이 없어서 아는바가 없습니다 ㅋㅋㅋㅋ
간단하게 하시려면 그옛날 시리얼 포트 사용한 조이스틱이 있을테니 그거 프로토콜 분석하셔서 시리얼 조이스틱으로 인식하게만드실 수도 있을껍니다...

doodoo의 이미지

답변 감사합니다

제 예기를 조금 드리면
http://www.flightsim.com/cgi/kds?$=main/howto/mind.htm
여기에 일단 제가 시작한 회로와(이것은 ATmega8 입니다.) hex 파일을 처음 본 곳 입니다.
여기서 시작 했지요.

다음은 입력으로 두가지가 있는데 하나는 lvdt 이고 또 하나 고려한것이 쿼드리쳐 인코더였습
니다. 그 사이 잠깐 참조 한 곳이 엡솔루트(Absolute Optical Encoder)였구요.
인코더 관련 사이트는
http://zone.ni.com/devzone/cda/ph/p/id/132

lvdt 관련으로는
http://www.mikesflightdeck.com/lvdts.htm , 이 사이트에는 사인파 신호를 주입하는 부분과
이차측의 신호를 가지고 DC를 뽑아내는 회로도를 보니,
DC 0 ~ 5 volt 까지 뽑을수 있을것 같더군요

또 디코더를 구현하기 위해서 할수 있는 FPGA 같은곳은
http://www.rocket.pe.kr/category/FPGA , http://www.fpga4fun.com/QuadratureDecoder.html

하지만 이곳은 또 다른 영역이라서 혹시 avr 으로 될수 있을까해서 찿아본곳이 바로
http://helicron.net/avr/quadrature/ 여기 , 하지만 여기는 어셈으로 되어 있구요 ㅠㅠ
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=58337&highlight=rotary

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=53317&highlight=encoder
이 포럼을 보면 디코더를 직접 짜는것 같더군요...그래서 이곳저곳을 더 찿다가
http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/docs/html/encoderconf_8h-source.html
에 보면 avrlib 에 쿼드리쳐 인코더에 대한 디코더 드라이버가 있습니다.

그래서 이제 이 모든 것을 조합할려구 질문을 올리는 중입니다.

근데 한번 hex 파일을 타겟보드에 업로딩하고 나면 다시는 재 업로드는 불가능한가보죠?
그리고 타겟보드와 패러럴포트는 문제가 조금 있어요..제 피씨가 패러럴이없더군요..
그래서 본곳이 http://www.rocket.pe.kr/entry/AVR%EC%9A%A9-Serial-ISP-%EC%9E%90%EC%9E%91%EA%B8%B0-2
입니다. 거기에 윤교수님이란 분이 주었다는 회로가 있더군요 이것을 한번 써 볼려고
하는데 usip 나 avrdude 와 호환이 되는지 걱정이군요.

제일 처음의 디코더 관련 질문을 할때 출력을 DC 0 ~ 5 volt 를 뽑아야 하는데
중간에 있을때 2.5볼트, 우측으로 약 50도 정도 꺽으면 5볼트 좌측으로 약 50도 정도 꺽으면
0 볼트 출력을 얻어야 합니다 아니면 맨위의 Mjoy 마이콤 안에 아예 디코더를 내장해야
하구요, 그것이 이 디코더로 힘들것 같으면 그냥 lvdt 회로를 꾸밀려고 합니다.
근데..이것도 문제가..ㅠㅜ... 에나멜 코일 판매처를 못 구했어요...여기에 들어갈려면
비교적 가는 코일이 필요할것 같은데..구로에 가서 물어보니 파는곳이 없더군요
인터넷에도 학습용을 굵은 에나멜 코일 밖에는 못봤습니다.

whitelazy의 이미지

Serial ISP도 회로가 간단하군요 그냥 찾으신거 쓰면 됩니다.
리눅스용 툴은 써본적이 없어서 답은 못드립니다. 호환되는것일테니 적당히 바꿔보면서 되는거 찾으시면 될껍니다. STK500이나 아님 다른걸로요...
avr mega 시리즈 자체는 내부롬이 플래쉬롬이어서 쓰고지울수 있습니다만.. 데이터시트 스펙상 1000회가 최대입니다.. 아는 선배말로는 내부에카운터가 있다는것 같습니다 ㅎㅎ 다른녀석들중엔 1만이나 100만도있는거봐선요.. 아님 내구성이 짧은녀석이거나.. ㅡ.ㅡ;

음.. 테클거는것 처럼 보일수도있겠습니다만...
LVDT는 이름그대로 Linear variable differential transformers 입니다. 선형적인 움직임에만 대응합니다.. 뭐 회전운동을 선형운동으로 변환해줄수있겠지만.. 기구적으로 구현하셔야하기때문에 부피가..
인코더는.. 가격이 어찌될지 모르겠습니다. 조이스틱으로 쓰려면 절대위치를 갖는 타입이 나을꺼 같습니다만.. absolute encoder말이죠.. 마우스는 무조건 시작점부터 상대적으로 움직입니다만 조이스틱은 좀 무리죠.. 절대값을 가져야하기때문에 할때마다 위치 새로잡아주던가 절대값을 같는 absolute encoder를 사용하셔야할껍니다.
디코더 자체는 어렵지 않습니다.. 아니면 avrlib 링크에 있는 설정파일보니 그 설정파일만 맞춰서 구현한다음에 Mjoy 마이콤 코드가 공개되어있다면 가변저항으로 하는부분을 대체해주시면됩니다.

에나멜 코일 판매처는.. 구로에 있을꺼같은데...전 예전에 청계천 상가에서 샀었는데 요즘 얼마나 남아있을지 모르겠습니다. 구로 전자부품상가에 없다면 청계천이나 용산쪽 뒤져보셔야 할껍니다. 에나멜선을 안판다면 적당한 가늘면서 코일로 쓸만한 선을 물어보시면 됩니다.. 물론 비싸도 책임은 못집니다!! ㅎㅎ

...............................................................
mjoy 코드를 보니 어셈이군요.... 어셈으로 usb hid 조이스틱 스펙을 구현하셨네요 ... 가변저항 사용을 추천드리는 ㅠㅠ 수정하시려면 어셈블러로 구현하셔야 할꺼 같습니다.
adc로 가변저항을통해 동작하는부분은 별로 부하가 안되겠지만.. 인코더 값을 넣는 부분을 만들어야하는데 러더까지 생각하시고 하면 기본 X-Y 축에 두세개 이상은 더 축이 필요한데
usb 통신을 유지하면서 디코딩이 될지 모르겠습니다. 반응 속도문제도 있구요.. 디코더 구현해서 부하를 계산해보던가 아니면 직접해봐야 알수있는부분이니..
12Mhz를 쓰는거봐선 USB1.1 타이밍에 맞추려고 선택한것 같습니다....
그렇다면 해법은 디코더 역할을 해줄 녀석을 외부에 달고... 여기서 가져온 위치값들을 어찌어찌 부하 적게 mjoy 코드가 심어진 녀석으로 보내서 adc값 대신에 실어서 보내면 해결됩니다..
spi지원하니 이런거로 보내면 되겠네요.. 아님 uart나... 어차피 adc도 최대 10bit니 한채널당 최대 2바이트 최소 1바이트 할당하면 됩니다.

개인적으로는 전자회로쪽보다는 조이스틱 모양 어떻게 만드실지가 더 궁금합니다 ㅎㅎㅎ 이게 그 뭐랄까 적당한 탄성이 맛인데 ㅡ0ㅡ;;;;

doodoo의 이미지

감사합니다.
absolute encoder 는 그 해상도에 문제가 조금 있는것 같아요.
인크리멘털 식 보다 더 해상도가 낮고 그것을 높일려면 고밀도 코드휠이 필요하겠지요
그리고 햇갈리지 않게끔 그래이 코드로도 넣어야 할것 같구요..아마 DIY 쪽으로는 구현이
힘들것 같네요..

반응속도 예기는 잘 알아들었습니다. 듣고 보니 이것저것 다 구겨넣으면 쬐끄만 cpu 한개에
너무 무리를 줄것 같기도 하군요 ^^;

조이스틱은 스프링 아니면 최악의 경우엔 고무줄도 생각하고 있어요(텐션이 적당할까는
아무래도 시행착오를 거쳐야 겠지요..)

12Mhz를 쓰는거봐선 USB1.1 타이밍에 맞추려고 선택한것 같습니다....

그면 usb 2.0 에 맞출려면 이것보다는 더 높은 클럭을 주입해야 할것 같다는 예기 같군요
그렇죠?
bus710의 이미지

12Mhz로 usb하려면 c로는 무리가 약간 있고, 어셈블리어로 짜야할 걸로 보이는데요^^
다른 작업도 하려면 차라리 232/USB 칩을 쓰는게 나을 것 같습니다.

저도 한동안 리눅스에서 avr 개발환경 구축하려고 고민을 했는데,
잘 안되더라구요^^;;

그냥 윈도우즈상에서 (atmel에서 나온)USB다운로더를 쓰는게 맘편하더군요.
그런거라면 virtualbox에서도 충분히 잘되니까요.

필요할 때마다 isp, jtag 만들어서 썼는데, 프린터 포트에 물리는 것도 은근히 귀찮아서요;

avrmall.com 추천 드립니다.

akudoku.net bob marley - so much trouble in the world

life is only one time

doodoo의 이미지

감사합니다. 일단 usb 2.0 은 생각할 겨를이 없고.

우분투에서 avr이 되는지 확인하는게 급선무 이겠군요

이제 이사만 끝나면 브래드보드에 연결을 해서 테스트 해 봐야 겠군요
성공할지는 .... 해보면 알겠죠...

혹시 기판 1-4장정도 싸게 떠 주는곳 아시는분 계세요?

bus710의 이미지

avr로 usb2.0에 접속하는건 전용 칩을 쓰지 않으시면 불가능 합니다.
usb1.1은 어떻게든 가능하구요...

기판... 2단에 1T 정도를 기준으로 해서 샘플PCB 전문으로 하는 곳이 여러곳이 있는데요.
그중에서도 한샘디지텍을 추천 드립니다. 온라인으로 견적내기도 좋구요.

hsdgt.co.kr 일 겁니다.
단가는 대략 7만원 정도로 보시면 됩니다. PCB뜬지 3년 정도 지났으니 지금은 어떨지 모르겠네요^^;

akudoku.net bob marley - so much trouble in the world

life is only one time

xfree의 이미지

전 페도라 사용자 입니다만 같은 리눅스니까 될겁니다.
제가 주로 프로그래밍을 리눅스에서 하는데
avr-binutils
avr-gcc
avr-libc
avrdude
패키지 설치하고 잘 사용하고 있습니다.

doodoo의 이미지

ㅎㅎ 다름이 아니고 akudoku.net 에 가 보시면
akudoku 님이 딴데선 다 되는데 유독 우분투에서 안된다고 언급이 되어 있어서
제가 먼저 확인할려구요..