'Pulse With Modulation'에 해당되는 글 2건
- 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 2
- 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 1 2
1. 준비물
ATtiny85 에 구동 program 를 업로드 하기 전에, 구성품 준비가 필요합니다.
관련해서는 다음에 링크된 이전글을 참고해 주세요.
* Hardware | ATtiny85 를 사용해 보자 - 1
- http://chocoball.tistory.com/entry/Hardware-ATtiny85-1
참고로 ATtiny85 의 datasheet 는 다음과 같습니다.
- Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf
2. 참조 사이트
ATtiny85 에 프로그램 업로드를 위해서는 몇가지 방법이 있지만,
저는 다음 사이트를 기준으로 참고하였습니다.
* Breathing life into the DigiSpark clone with ATtiny MCU
- https://makbit.com/web/firmware/breathing-life-into-digispark-clone-with-attiny-mcu/
3. Arduino - ArduinoISP
자, 이제 준비가 완료 되었으니 이제 시작을 해 볼까요?
ATtiny85 에 프로그램을 심으려면,
바로 PC 와 USB를 통해 연결하면 안되고 "PC -- USB -- Arduino -- ATtiny85" 식으로 연결하여 프로그래밍 할 수 있습니다.
중간에 위치한 Arduino 를 브릿지 형식으로 사용하는 것입니다. 이름하야 In-circuit Serial Programmer (ISP) 라는군요.
이를 위해, Arduino 가 ISP 로 동작할 수 있도록 Arduino 에 ISP 프로그램을 업로드 해줍니다.
File > Examples > 11.ArduinoISP > ArduinoISP
이걸로 Arduino 쪽의 준비는 끝났습니다.
4. Arduino IDE - Perferences
다음으로 IDE의 Preferences 메뉴로 이동하여 ATtiny85 보드를 Arduino 에서 인식시킬 수 있도록 관련된 library 를 인스톨 합니다.
이를 위하여, 다음 URL 중 하나를 Preferences 의 Boards Manager URLs 에 다음 중 하나를 선택하여 입력해 줍니다.
* ATtinyCore
- http://drazzy.com/package_drazzy.com_index.json
* Digispark
- http://digistump.com/package_digistump_index.json
File > Preferences > Additional Boards Manager URLs
보통은 Digispark 용을 사용해도 되나,
Spence Konde 라는 사람이 만든 ATTinyCore 는 좀더 정밀하게 설정할 수 있고, 문제 없이 동작한다고 합니다.
* Spence Konde
- https://github.com/SpenceKonde/ATTinyCore
저는 Spence Konde 를 선택했습니다.
5. Arduino IDE - Board Manager
다음으로 ATtinyCore 라이브러리를 Board Manager 를 통해 설치합니다.
Tools > Board > Board Manager > search "ATtinyCore"
위의 과정까지 거치면, 아래처럼 Board 에서 ATtiny85 를 선택할 수 있습니다.
6. Arduino IDE - Programmer
이제 마지막으로 운용할 Programmer 를 선택합니다.
이미 우리는 Arduino 를 ISP 로 사용할 것을 알기에, "Arduino as ISP" 를 선택하면 됩니다.
ATtinyCore 라이브러리가 설치되어 있으므로, "Arduino as ISP (ATtinyCore)" 를 선택해도 됩니다만,
왠지 default 로 제공되는 것을 사용하고 싶어서 "Arduino as ISP" 를 선택했습니다.
어느쪽을 선택해도 문제없을것 같아요.
이제 Arduino IDE 에서의 준비는 끝났습니다.
7. Layout
ATtiny85 의 Pin 배열은 다음과 같습니다.
위의 그림을 참조하여 Arduino 와 ATtiny85 를 다음과 같이 연결합니다.
ATtiny85 | Arduino Nano --------------------------- VCC | 5V GND | GND Reset | D10 Pin 0 | D11 Pin 1 | D12 Pin 2 | D13 ---------------------------
추가로 Arduino 의 GND/RESET 에 10uF 캐패시터를 연결해 줍니다.
이유는 Arduino 가 ATtiny85 에 업로드 할 때, auto reset 을 방지하기 위함이라 합니다.
실제 모양은 다음과 같아요.
그간 고생해서 얻은 "DIP to SOIC converter" 가 빛을 발하는 순간입니다.
이제 물리적인 구성은 완료 되었습니다.
8. sketch
소스는 아래 link 를 참조하였습니다.
깜빡이 간격이 좀 짧은것 같아 increment / decrement 를 5에서 1로 변경했습니다.
* Attiny85 blink fade for loop 3 LED
- https://codebender.cc/sketch:354605
해당 소스는 단순히 LED 를 깜빡이게 하는것 외에도,
PWM (Pulse With Modulation) 기법을 이용하여 LED 점등을 fade 효과를 낸 것입니다.
/* This code will allow you to mix fading and blinking on 3 LEDs Jill Dawson */ int Pin0 = 0; // LED connected to pwm pin 0, which can blink or fade int Pin1 = 1; // LED connected to pwm pin 1, which can blink or fade int Pin2 = 2; // LED connected to digital pin 2, which can only blink void setup() { // nothing happens in setup // declares pins as outputs pinMode (0, OUTPUT); pinMode (1, OUTPUT); pinMode (2, OUTPUT); } //Loop repeats void loop() { // fades pin 0 in from min to max in increments of 5 points for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(Pin0, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fades pin 0 out from max to min in increments of 5 points for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(Pin0, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // blinks LED 1 three times { digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off delay (1000); //waits for 1 second digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off delay (1000); //waits for 1 second digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off } // blinks LED 2 three times { digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second } // fades pin 1 out from max to min in increments of 5 points for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(Pin1, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fades out from max to min in increments of 5 points: for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(Pin1, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } }
Arduino IDE 에서 업로드 합니다.
AVR Part 항목을 보면 ATtiny85 로 정확히 인식합니다.
ATtiny85 에 FLUSH 가 성공하면 위와 같이 문제없이 완료가 됩니다.
9. 결과
짜잔~!
FIN
이제 ATtiny85 에 프로그램을 업로드 하여 standalone 으로 동작하는 것까지 확인할 수 있었습니다.
"ATtiny85 + DIP to SOIC adapter + USB board" 를 USB 에 직접 연결하여,
Arduino ISP 없이도 Digispark 처럼 프로그램을 업로드 할 수 있는게 목표므로, 다음 글에서 구성해 보도록 하겠습니다.
'Hardware' 카테고리의 다른 글
Hardware | Amazon Kindle Paperwhite 구매기 (0) | 2018.05.29 |
---|---|
Hardware | 전자저울 구매하기 (0) | 2018.05.20 |
Hardware | TCS230/TCS3200 color sensor 를 사용해 보자 (0) | 2018.04.03 |
Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자 (0) | 2018.03.29 |
Hardware | Fuji Xerox 의 CP116w 토너 교환기 (0) | 2018.03.28 |
1. 시작
Arduino Nano 를 사용하고 있지만, 실제 프로젝트 구성시 이렇게 많은 핀들이 필요할지 의문이 드는 때가 있습니다.
인터넷을 돌아다니다 보면, Arduino 본체는 아니지만 소스코드는 거의 동일하지만, chip 은 조그마한 것이 사용된 것을 볼 수 있습니다.
그 이름하야 ATtiny85.
Arduino Nano 에 들어가는 chip 이 Atmel 사의 MEGA328P 인데,
이 ATtiny85 의 생산회사도 Atmel 사 입니다.
이 ATtiny85 는 두가지 package 가 존재합니다.
하나는, 아래 보이느 DIP8 형태 (다리가 8개 벌레같은 칩) 의 ATtiny85.
'
다른 하나는, SOIC 형태 (납착한 보드 납땝식) 의 ATtiny85 입니다.
다리는 8개밖에 없는지라, power / ground 빼면 6개 이고, chip control 하는 1번을 빼면,
실제 가용할 수 있는 pin 수는 5개가 되겠군요.
실제 project 상에서 사용되는 Pin 수는 그리 많지 않기때문에,
간단한 sensor 를 이용하여 기능 구현할 때에는 Arduino 보단, 이런 ATtiny85 를 사용하는 것이 훨씬 경제적으로 보입니다.
- 장소 차지가 적다
- Power가 더 적게 먹을 것이다
- 기판 적층시 component 처럼 실장할 수 있다
2. 최종 모양
ATtiny85 에 프로그램을 upload 하기 위해서는, FTDI 나 Arduino ISP 모드를 이용하여 8k 자체 메모리에 업로드 해야 합니다.
위의 방법이 일반적이지만, 아래 그림의 처럼
직접 Arduino IDE 에서 프로그래밍 하여 USB를 통해 upload 할 수 있는, Digispark 모양으로 만들고 싶었습니다.
* Digispark
- http://digistump.com/products/1
클라우드펀딩인 Kickstarter 에서도 큰 방향을 일으킨 제품입니다.
* Digispark - The tiny, Arduino enabled, usb dev board!
- https://www.kickstarter.com/projects/digistump/digispark-the-tiny-arduino-enabled-usb-dev-board
지금까지 내용을 정리하면 최종 모습은 아래와 같은 모양이 됩니다.
- SOIC 형태
- Digispark 처럼 USB 를 통한 개발 보드 형태
알리에서 검색해 보면, DIP 소켓 을 사용하여 Digispark 처럼 사용할 수 있게 해주는 보드가 있습니다.
그럼 위의 DIP 소켓을 SOIC 로 변환해주는 adapter 를 이용하면, 최종적으로 SOIC를 사용할 수 있겠군요.
이제 구상이 끝났으니 AliExpress 에서 구입을 진행해 봅니다.
2. 구입 - ATtiny85
먼저 SOIC 타입의 ATtiny85 를 구매합니다.
* Free Shipping 5PCS Original Integrated circuit parts ATTINY85 ATTINY85-20SU
5개에 1만원 정도이니, 여타 다른 chip 들에 비하면 비싼 편 입니다.
릴 package 를 끊어서 보내줬군요.
확대해서 보면 Atmel 사의 TINY85 라고 쓰여 있습니다.
여기서 잠깐, 구매한 ATtiny85 는 20SU 라는 코드가 달려 있습니다.
제품사양을 보면 20SH 는 좀더 비싸고, 20SU 는 조금 더 쌉니다. 기호의 의미는 다음과 같다고 하네요.
– H: NiPdAu lead finish
– U: matte tin
U는 주석이고, H 는 NiPdAu (Nickel-Palladium-Gold) 로 납땜시, 더 확고하고 쉽게 접합된다고 합니다.
이렇게까지 전문적으로 아직 필요가 없으므로, 무난하게 20SU 버전으로 구입합니다.
3. 구입 - USB board
ATtiny85 chip 을 엊고 USB 를 연결하게 할 수 있는 보드를 구매합니다.
물론 ATtiny85 가 DIP 소켓에 꽂혀 있는 일체형이나 SOIC chip 이 납땜되어 있는 버전도 팔지만,
SOIC 를 바꿔 끼울 수 있도록 adapter 를 사용할 것이기에 깡통 USB 보드를 선택합니다.
* ATtiny13A/ATtiny25 /ATtiny45/ATtiny85 Pluggable Development Programming Bare Board
배송 포함 1천원정도니 부담없습니다.
잘 도착해서 보니, 기판 찌꺼기가 같이 붙어 있네요.
뭐 이 가격이니 이해할 수 있습니다.
뒷면입니다.
기판 찌꺼기는 펜치로 잡고 구부리면 쉽게 제거됩니다.
제거되면 기분이 뭔가 좋아집니다. 이런 즐거움도 선사해 주는군요.
나중에 adapter 가 도착하여 ATtiny85 와 채결할 때, 호기심으로 1번 핀을 거꾸로 채결해 봤더니 연기가 나더군요.
(나중에 안 사실이지만, 이 연기는 솔더링 잘되라고 도포된 약품이 레귤레이터 열로 증발한 것)
USB 연결시에 PC 에서 인식 못하는 문제가, 이 태워먹은 결과라고 잘못 생각하고 바로 2개를 추가로 주문했습니다.
(USB 를 연결하여 Digispark 처럼 사용하려면, 필요한 과정이 더 있슴)
총 3개가 되었군요.
4. 구입 - DIP to SOIC converter
USB 의 DIP 소켓을 SOIC 를 엊을 수 있게 하는 adapter / converter 를 주문합니다.
* SOIC8 SOP8 to DIP8 EZ Socket Converter Module Programmer Output Power Adapter With 150mil Connector SOIC 8 SOP 8 To DIP 8
잘 도착했습니다.
포장도 잘 되어 있네요.
정전기 방지 포장까지 되어 있습니다.
Chip 규격이 다양한 만큼 알아야 할것도 많네요.
AliExpress 의 무료배송 마약때문에, 새로 구입한 converter 가 도착하려면 최소 2주 이상을 또 기다려야 합니다.
이거 하나 하는데 도대체 얼마나 기다려야 하는겨.
가끔 AliExpress 를 통한 놀이는 기다림이 대부분인것 같습니다.
기다리다가 열정이 식어버려, 다시 끌어올리는데 시간이 많이 걸리는 경우가 있어요.
5. 구입 - 또다른 DIP to SOIC converter
이제 정확한 제품 규격을 알게 되었으니 제대로 구입합니다.
제품명에 "Universal" 이라는 문구가 왠지 신뢰갑니다.
* Universal Adapter Sockets SOP8 SOP 8 to DIP8 DIP 8 for all Programmer 200 208 mil
드.디.어! 정확한 converter 가 도착 했습니다.
대충 포장되어 있더라도 상관 없습니다.
아아아아아! 이거 얼마나 걸린거야.
6. 최종 모습
겨우 최종 결과 모습이 되었습니다.
별것도 아닌것 같은데 너무 오래 걸렸네요.
USB 보드 + DIP to SOIC adapter + ATtiny85 구성 입니다.
모두 합체하면 이렇게 되죠.
FIN
여기까지 오는데 너무 힘을 빼서, 실제 Arduino IDE 를 이용한 program uploading 은 다음 편에서 다루도록 하겠습니다.