블로그 검색
AVR 명령어 검색
전자부품 검색

별거는 아니지만 ATTiny26으로 장난감을 만들어봤습니다.
애들 신발에 붙이려고 만들었으나......^^;;;

만능기판에 대충 땜질했습니다...그래봐야 led와 저항이 대부분이고 
나머지는 기울기 스위치하나 3v 동전전지 케이스가 전부네요. 전지 케이스를 너무 큰걸 샀네요.

브레드보드에서 테스트했을때는 잘 되서 무작정 만능기판에 납땜했는데
납땜이 끝나고 전지로 하니 동작을 안하지 멉니까...OTL

원인을 몰라 아두이노 카페분들에게 도움을 얻은 결과 led를 싱크로 연결해보라는 조언을 듣고 그렇게  하니 동작이 잘 됩니다.

led를 전부 거꾸로 다시 연결하느라 배선이 난장판이 됐습니다.
머...첨에도 그리 깨끗하진 않았습니다만...^^;

포멕스로 나름 깔끔하게 케이스를 만들어보려고 했으나....좌절...
깨끗하게 안잘라 지더구요...어떻게 잘라야 깨끗하게 자르는지 아시는분 조언좀 해주세요



(핸드폰 동영상이라서 화일이 않좋습니다. 이해해 주세요 ^^)
기울기 스위치가 민감해서 약간의 충격만으로도 스위치가 동작합니다.


일단 이렇게 완성은 했으나....
와이프가 보더니..."이렇게 큰걸 어떻게 신발에 달아!!"
여기서 한번더 좌절 OTL
무심코 던진돌에 개구리가 맞아 죽는다는....

그래서 운동화에 다는건 포기했습니다. ㅠㅠ
시간 될때 작게 다시 만들어봐야겠습니다. smd를 써야 하나....

추가 : 요청으로 회로도를 그려봤습니다.
죄송합니다. 아직 회로도 프로그램을 못다루는 관계로 발로 그렸습니다. 그래도 도움이 되셨으면 합니다. ㅠㅠ



$regfile = "attiny26.dat"
$crystal = 8000000

Dim I As Byte
Dim J As Byte
Dim Sw As Bit
Sw = 0
Dim Swold As Bit
Swold = 0
Dim Interval As Integer
Interval = 4

Config Porta = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Pinb.6 = Input

Set Porta
Set Portb.0
Set Portb.1
Set Portb.2
Set Portb.3

Do
   If Pinb.6 = 1 Then
      Set Sw
   Else
      Reset Sw
   End If

   If Sw <> Swold Then
      For J = 0 To 3
         For I = 0 To 3
           Reset Porta.i
           Waitms Interval
           Set Porta.i
           Waitms Interval
         Next I
         For I = 3 To 0 Step -1
           Reset Portb.i
           Waitms Interval
           Set Portb.i
           Waitms Interval
         Next I

         For I = 3 To 0 Step -1
           Reset Porta.i
           Waitms Interval
           Set Porta.i
           Waitms Interval
         Next I
         For I = 0 To 3
           Reset Portb.i
           Waitms Interval
           Set Portb.i
           Waitms Interval
         Next I
      Next J
      Swold = Sw
   End If
Loop
Posted by pepsiman
comments powered by Disqus
tiny은 가격도 싸고 칩 단독으로 회로구성이 가능해서 꼭 한번 해보고 싶었는데
ISP를 구입하게 되서 프로그래을 해봤습니다.

간단히 LED 8개가 순차적으로 왔다 갔다 하는 예제 입니다.
tiny와 isp를 연결한 모습입니다.
tiny의 1, 2, 3, 5, 6, 10 번핀을 ISP에 각 핀에 연결합니다.
VTG가 VCC 입니다.
저는 매번 결선하기 귀찮아서 핀헤더로 연결했습니다.



led는 11 ~ 20번 즉 PA0 ~ PA7번에 저항과 같이 연결했습니다.
sw는 PB6에 풀다운저항으로 연결하였습니다.
핀헤더와 isp를 제거하고 칩과 led만 남아있는 모습입니다.
전원은 충전지 4개 4.8v를 연결했습니다.
ATTiny26L-8PI는 2.7-5.5V의 전압을 허용하므로 활용도가 높습니다. 
스위치를 누르면 led가 왔다 갔다 합니다.

bascom-avr 소스

Posted by pepsiman
comments powered by Disqus

컴파일러

WinAVR 20090313 Download

- 개발툴 설치전에 컴파일러를 먼저 설치해야 합니다.

http://sourceforge.net/project/showfiles.php?group_id=68108 


개발툴

AvrStudio 4.16 Download

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725


AvrStudio 4.16 SP1 Download

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725


CodeVisionAVR Evaluation Download V2.04.2c

http://www.hpinfotech.ro/html/download.htm


Bascom-AVR demo 1.11.9.1 Download

- basic언어를 사용하고 시뮬레이터가 우수합니다. 부트로더도 자체지원하는것 같습니다.

http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54


AVREdit 3.8 Download

http://terabank.co.kr/bbs/zboard.php?id=down


드라이버

CP2102 driver 

usb 가상 시리얼포트 CP2102 칩 드라이버

www.silabs.com


FTDI (VCP) driver

http://www.ftdichip.com/Drivers/VCP.htm



ISP

PonyProg 1.17.h Download

http://www.lancos.com/ppwin95.html


ToastProgUSB 2.1 Download

http://www.toastprog.com/front/php/b/board_list.php?board_no=7



기타 참고자료

    . 컴파일러
       - AVR Studio4.14 컴파일러 : 커뮤니티->개발툴 자료실
       - AVR Studio4/WinAVR 설치 방법(다운로드)
       - CodeVisionAVR 설치 방법(다운로드)
     . 프로젝트 생성
       -
 CodeVisionAVR 프로젝트 생성(다운로드)
       - AVR Studio4 프로젝트 생성(다운로드)
     . ISP 사용법
       -
 PonyProg  I
SP(다운로드)
       - ToastProg  
ISP(다운로드)
       -
 CodeVisionAVR ISP(다운로드)
       -
 AVR Studio4 ISP(다운로드)
     . JTAG 사용법
       - AVR Studio4 
JTAG(다운로드)
 
    . 예제프로그램 TEST 방법
       -
 AVR Studio4 메뉴얼(다운로드1/다운로드2)
       - CodeVisionAVR 메뉴얼(다운로드1/다운로드2)

Posted by pepsiman
comments powered by Disqus
2009/05/19 arduino에 사용가능한 이더넷 모듈에서 소개했던 WIZ811MJ이 도착했습니다.
사실 벌써 도착했는데 만질 시간이 없어서 못하고 있었다는...

보시다 시피 썰렁하게 연결되어 있는데, 간단한 연결(6핀)만으로 아두이노를 인터넷에 연결이 가능합니다.

사진과 같이 연결하였고, 연결은 엉성해도 동작은 잘 되더군요. ^^

필요한 핀에만 소켓을 끼웠습니다.

많은 핀중에 6개만 사용하면 됩니다. 나머지 하나는 리셋핀....

조그만한게 귀엽게 생겼죠? ^^;


WIZ811MJ 모델은 2.54mm 간격의 40핀으로 핀이 구성되어 있습니다. 듀얼핀이라 브레드보드에 직접은 안되네요.
아두이노와 각 핀의 연결은 위의 그림과 같이 D10~D13, 3V3, GND 6개의 핀을 연결합니다.
아두이노 두에밀라노브(데시밀라)에는 3.3v 출력이 있어서 직접 연결이 가능합니다.



WIZ811MJ는 arduino ethernet shield와 같은 칩을 사용하기 때문에 라이브러리도 호환된다는것이 최대 장점이라고 할 수 있습니다. 이미 만들어져 있는 아두이노 이더넷 라이브러리를 가져다 쓰기만 하면 됩니다. 예제까지도....

아두이노 소스는 아두이노 웹서버로  Examples/Library-Ethernet/WebServer 에 있는 예제를 사용해봤습니다.

/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 20 };

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("
"); } break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); client.stop(); } }
소스중 위의 mac과 ip 부분은 자신에 맞게 수정해야 합니다.

WIZ811MJ는 DHCP를 지원하지 않는데, 아마도 DHCP기능이 없어서 그냥은 연결이 안되는듯합니다.
소스의 빨간색부분을 공유기의 IP 수동할당에 추가하고, 오른쪽에 추가버튼을 누르면 왼쪽에 추가 됩니다.


브라우저에서 설정한 IP로 아두이노에 접속한 모습입니다. 아날로그 핀의 값을 출력하는 웹서버 프로그램입니다.

이제 아두이노에 달린 날개를 잘 활용하는 일만 남았네요. ^^
Posted by pepsiman
comments powered by Disqus
아두이노(arduino)에서 2색 도트매트릭스를 구동시켜 보았습니다.

부품

아두이노(arduino)
도트매트릭스(DotMatrix 8x8 2색)
74HC595 x2
74HC138


나름 하트를 그려봤는데 생각만큼 이쁘게 나오진 않는군요 ^^;


배선이 좀 많이 들어가네요
핀은 24핀으로 위에 12, 아래 12개 입니다.
핀소켓에 납땜으로 배선을 연결했습니다.
전선이 부드러운줄 알았는데 연결하고 나니 엄청 뻣뻣하네요 ㅜㅜ


1번핀 - [LED1-],   2번핀 - [LED1적+], 3번핀 - [LED1녹+], 4번핀 - [LED2-],   2번핀 - [LED2적+], 3번핀 - [LED2녹+]......
위 사진상으로 보면 모델번호를 위로 놓고 볼때 우상터 1~12, 우하 13~24번 입니다.




가장 왼쪽 브레드보드 대신에 도트매트릭스라고 보고
이 보드의 red에 연결된 흰색 배선 위쪽부터 도트매트릭스의 2,5,8,11,14,17,20,23,
green에 연결된 배선 위쪽부터 도트매트릭스의 3,6,9,12,15 18,21,24 번에 연결합니다.



74HC138 디코더 입니다.
Y0 ~ Y7 은 도트매트릭스의 1,4,7,10,13,16,19,22에 각각 연결합니다.
4, 5번 핀은 GND, 6번핀은 VCC에 연결합니다.
A0~A2는 아두이노의 digital 5~7에 연결합니다,







소스

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte data;
byte data2;
byte dataArray[10];
int val=0;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  // 74HC138N 
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);

  dataArray[0] = 0x24; //00100100
  dataArray[1] = 0x5a; //01011010
  dataArray[2] = 0x81; //10000001
  dataArray[3] = 0x81; //10000001
  dataArray[4] = 0x81; //10000001
  dataArray[5] = 0x42; //01000010
  dataArray[6] = 0x24; //00100100
  dataArray[7] = 0x18; //00011000
}

void loop() {
  for (int j = 0; j < 8; j++) {
    //load the light sequence you want from array
    data = dataArray[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);

    shiftOut(dataPin, clockPin, LSBFIRST, 0); 
    shiftOut(dataPin, clockPin, LSBFIRST, data); 
    digitalWrite(7, j>>2 & 0x1);
    digitalWrite(6, j>>1 & 0x1);
    digitalWrite(5, j & 0x1);

    digitalWrite(latchPin, 1);
    delay(1);
  }
}


선이 뻣뻣해서 매트릭스가 공중에 떠버렸습니다.
깔끔하게 하려면 만능기판으로 옮겨야할듯싶네요. 다시만들어야겠네....ㅜㅜ

원래 2색인데, 2색 모두 구동 됩니다만 데이타 만들기 귀찮아서 단색만 했습니다.
회로는 2색 모두 지원합니다.
저항 연결하니 빛이 어두워서 저항도 연결하지 않았습니다.

Posted by pepsiman
comments powered by Disqus
이 글은 arv을 배우려는 사람보다는 저처럼 비 전공자(피지컬 컴퓨팅, 미디어아트, 인터렉티브 미디어 분야등)가 avr에 관심을 갖고 계신분에게 더 유용할꺼라 생각됩니다.
처음 이쪽 분야를 접하고 arduino나 wiring, atmega128(avr 중하나)을 접하면서 선택의 기로에 서게 됩니다.
이때 이글이 도움이 되길 바랍니다.

1. Arduino
아두이노 데시밀라는 atmega168 칩을 사용합니다
칩만 보면 메모리는 8k이고 가격은 4천원대 입니다.(디바이스마트)

아두이노 두에밀라노브는 328(메모리 32k)을 사용하고 국내 정식(플러그하우스)판매가격은 3.9만원 합니다, ($29.95)

아두이노 데시밀라는 168 사용(메모리 16k)

아두이노 미니는 168을 사용하고 국내 정식판매가격은 4.8만원 합니다 ($33.95)

arduino nano는 별로 특징이 없네요. 미니 usb를 가지고 있어 좋기는한데 너무 큰듯한...

최근에 나온 아두이노 메가는 1280칩(메모리 128k)을 사용하고 


1-1 . Arduino 호환보드


아두이노스토리 카페의 딸기보드는 카페에서 공동 제작 형식으로 판매했던것 같은데 사용자가 많지않아 더이상 생산은 어려울것 같습니다.

AVRTOOLS에서 아두이노 데시밀라(168) 호환보드를 팔고 있고, 아두이노 미니 호환 보드도 팔고 있는데 가격도 저렴하고 크기도 작아 상당히 매력이 있네요.

2. Wiring

와이어링에서 사용하는 atmega128 칩은 128k 메모리에 6~7천원 합니다.(디바이스마트)
Wiring-IO (atmega128)를 샘플전자에서 17.6만원에 팔고 있네요ㅡㅡ; (이런 날...)

Wiring mini 샘플전자에서 12.1만원에 팔고 있습니다

2-2. Wiring 호환보
샘플전자에서 와이어링 미니 호환보드를 2.9만원에 판매하고 있습니다.


3. AVR

AVR은 ATmel사의 mcu로 메모리와 속도등에 따라 상당히 많은 종류가 있습니다.
그중에 가장 가격대비 성능이 좋은 atmega128이 많이 쓰이는것 같습니다.(6~7천원대)
외국에서는 attiny2313 칩도 많이 쓰더군요(2000원정도)

이러한 128보드는 1만원대 부터 다양하게 있는데 가장 싼것들은 mcu에 핀만 연결해놓은것으로 다용도로 쓸수 있고 가격도 쌉니다. arduino나  wiring도 이런 기본 보드에 속합니다.
비싼보드는 여러가지 센서나 스위치, LCD등을 붙여 놓아 별도로 구입하는 번거로움을 없에기는 했으나 가격이 꽤 비쌉니다. 
이런 교육용보드중에 유명한것으로는 네이버의 당근이의 AVR갖고 놀기 카페의 당근보드(atmega32)와 아두이노스토리 카의 체리보드(atmega128)가 있고 이들을 이용하면 카페에서 지속적인 도움을 받을수 있어 편리합니다.
당근보드 메인4만원 + 디스플레이보드 4만원

체리보드 5.5만원(2009.06.08 현재 공구중 - 아두이노 스토리카페)



4. avr을 arduino로 만들기

atmega168 보드들은 아르두이노 부트로더를 올리면 아르두이노로 쓸수 있습니다.
atmega128 보드들은 와이어링 부트로더를 올리면 와이어링으로 쓸수 있습니다.(32.768K의 크리스탈을 달아야만 합니다)

이방법이 가장 저렴하긴한데 좀 번거롭습니다.
그리고 초기에는 그다지 저렴하지도 않고요. (이것 저것 준비할게 많습니다. ISP, usb2uart)

작은태양님께서 atmega168(AVRMall) 보드에 arduino 부트로더를 올려 아르두이노로 만드는 과정을 포스팅해 놓으셨습니다. http://tinysun.net/8

동작시켜보기 위한 과정을 간단히 요약해보면
부트로더 심기
1) 아르두이노 부트로더 다운로드
2) atmega168에 ISP를 연결하여 부트로더 업로드
사용하기
3) usb2uart 연결하기
4) IDE 에서 프로그램 작성 및 컴파일
5) arduino(atmega168)에 프로그램 업로드
6) 동작

1),2) 만 하면 아르두이노가 만들어 진겁니다.
하지만 avr(atmega168)이나 아르두이노 미니 같은경우 USB 포트가 없기 때문에 usb2uart 모듈을 이용하여 프로그램을 업로드 해야 합니다.
저근 이부분이 이해가 안돼서 처음에 무지 고생했지요.

직접 만들어보는것도 좋지만 호환보드들도 워낙 저렴하니 호환보드를 구입해서 쓰는것도 추천할만한 방법입니다.
Posted by pepsiman
comments powered by Disqus
아르두이노에 필이 꽃힌지 2~3주 되었나....

국내 아르두이노 총판인 플러그 하우스가 회사 근처에 있어 충동 구매를 해버렸다.

처음에는 값싼 AVR보드를 사서 arduino부트로더를 올려볼까 생각했는데 (보드는 싼데 isp케이블과 통신 케이블까지 구입하면)거의 비슷한 돈이 들어가고 호환성은 떨어지기 때문에 정품을 구입했다.

충동구매라곤 하지만 예전부터 해보고 싶다고 생각하던것이 아르두이노로 구현 가능하다는걸 알았기 때문에,
구매에 큰 망설임은 없었다.

Duemilanove는 Diecimila의 다음 버전으로 2009라는 뜻이란다.
개선된점
USB전원과 외부전원의 자동인식 및 전환
Auto-Reset 해제가능
과전류 입력으로부터 보호

arduino와 테스트용 몇가지 부품들을 같이 구입했다.
메인 MCU가 ATmega168에서 ATmega328로 변경되었다.

뒷면 모습
정면 모습
같이 구입한 브레드보드, 저항과 LED, 1줄 문자 LCD, 외부 전원용 잭과 9V 아답터



마직막으로 vega와 연결해보았다.

2009/04/03 - [Arduino] - 마이크로 컨트롤러 용어 및 개념 정리
2009/04/06 - [Arduino] - Arduino와 Wiring
Posted by pepsiman
comments powered by Disqus
MCU (Micro Control Unit) : 
 마이크로 컨트롤러, 일종의 느린 CPU, 대부분 플래쉬 메모리를 내장하고 있슴. 단독으로 동작가능.
 디지털 입력에는 0V 또는 5V 가, 아날로그 입력에는 0V ~ 5V의 전압이 1024단계로 읽힘. 디지털 출력, PWM출력(256단계).
 Atmel이라는 회사의 AVR시리즈 - Atmega168 : 20MHz, 4,400원 정도.


ISP (In System Programer) : 마이크로 컨트롤러를 프로그램 하는 장치, 프린터포트, 시리얼 포트, USB 포트용이 있다.
 임베디드 프로그래밍.

AVR-ISP 포트는 6핀, 또는 10핀( 모양만 다르고 10핀중 4핀은 GND)




P-AVRISP : ISP 다운로드용 프린터 포트 커넥터
 AVR STUDIO에서는 P-AVRISP를 지원하지 않습니다.(쓰기안됨)
AVR STUDIO에서 헥사파일만 만들고 ponyprog2000에서 라이팅한다.

JTAG(Joint Test Action Group): 임베디드 시스템 개발시 디버깅하기 위한 포트이다. 10핀
임베디드 시스템을 개발하기 위해 통합한 회로로 사용되는 IEEE 1149.1의 일반적인 이름이지만, 보통 디버거를 가리킨다.

MCU에 (arduino 같은)부트로더를 올릴려면 프로그래밍 포트(ISP)를 쓴다. 일단 arduino 부트로더가 올라가면 그 다음 부터는 통신 포트(TTL, UART)를 통해 프로그램을 다운로드 할수 있다. 

PWM (Pulse Width Modulation) : 신호를 주기적으로 출력하는 방식, 디지털을 아날로그 처럼 출력하기 위한방법.
출력의 주기가 빠르면 전압이 높고, 주기가  길어지면 전압이 떨어지는 효과가 있다.


AVR : ATMEL사의 MCU 제품군을 말하나 MCU와 같은 의미로 널리 쓰이는것 같다.


arduino 프로그래밍 언어로는 arduino 개발환경과, atmel사의 AVR Stufdio 등이 있다.


sketch : arduino용 프로그램


※ ATmega128
ATmega128은 8비트 RISC(Reduced Instruction Set Computer)구조의  AVR Core를 가지  
는 마이크로컨트롤러로써 대부분의 명령어를 Single Cycle에서 수행하고 I/O구조는 외부에
추가되는소자를최소화할수있도록설계된마이크로컨트롤러입니다 칩내부에는 발진회
로타이머 UART(Universal Asynchronous Receiver and Transmitter)와 SPI(Serial
Peripheral Interface) 및 풀업 저항과 PWM(pulse Width Modulation), ADC(Analog to
Digital Converter), Analog비교기 Watch-doc 타이머를 가지고 있는 칩 입니다.

ATmega128은 내부에 ISP(In-System Programmable) Flash 메모리와 EEPROM 및 SRAM
을 가지고 있어서 편리한 개발 환경을 제공합니다 그래서 실행할 코드와 동작 중 필요한 .
데이터를 저장할 SRAM 및 EEPROM 등을 추가하지 않아도 되므로 다른 마이크로컨트롤러
에 비하여 경제적이고 회로를 간단하게 설계할 수 있습니다.


일반 ATmega 칩을 사용한 AVR을 이용해서 arduino를 만들수 있다.
일반 AVR은 ISP를 이용하여 프로그래밍을 해야 하는데,  arduino는 ISP없이 시리얼 포트로 통신한다.
하지만 최초에 AVR을 arduino로 만들기 위해 한번은 ISP를 이용해 arduino 부트로더를 다운로드 해야한다.
이후에는 ISP없이 시리얼포트로 arduino용 프로그램인 스케치를 다운로드 할 수 있다.
Posted by pepsiman
comments powered by Disqus

티스토리 툴바