สวัสดีครับ
วันนี้กำลังจะเริ่มรันโปรเจ็กบอลลูนอีกครั้งหลังจากที่หยุดไปนานเพราะเจ้างานว่างแล้ว และผมสนใจจะเพิ่ม ATTiny เข้าไปเพื่อลดจำนวน Pin ของ Raspberry Pi ก็เลยลองเอา ATTiny มาลองโปรแกรมเข้าไปดูครับ
ATTiny จริงๆ มันก็คือ chip microcontroller ตัวหนึ่งจาก Atmel นั่นแหละครับ แต่มีขนาดเล็กกว่ากันเยอะ ใช้พื้นที่ไม่มาก แต่ก็ทำงานได้ไม่เยอะสักเท่าไหร่เพราะ memory มันมีน้อยเช่นกัน (ไม่แน่ใจว่า 10 kb หรือเปล่านะครับ) เหมาะสำหรับควบคุมงานง่ายๆ เช่นอ่านค่าจาก sensor ไปเป็น I2C ไว้ส่งค่าเข้า uC ใหญ่อีกที อย่างนี้เป็นต้น
การใช้งาน ในที่นี้ก็ไม่ยุ่งยากมากครับ มีแค่ Arduino ตัวหนึ่งกับสายไฟสี่ห้าเส้นและ cap ตัวหนึ่งก็โปรแกรมได้แล้วครับ
ขั้นตอนหลักๆ ก็ไม่มีอะไรมาก เริ่มต้นก็เปิดคอม เปิดเฟซบุ๊ก สั่ง Arduino แล้วก็เลิกทำ ไม่ใช่ล่ะ
- Download Arduino IDE และติดตั้ง ATTiny board firmware ลงไปครับ (วิธีการ follow ตามลิงคได้เลยครับ)
- Upload Arduino ISP เข้าบอร์ดแม่ที่ใช้เป็นโมเด็มลงไปครับ (ตัวโปรแกรมหาได้ที่ File > Example > Arduino ISP > Arduino ISP ตั้งค่าบอร์ดแม่แล้วิัพได้เลยครับ)
- ต่อสายตามรูปแบบ SPI ไปยัง ATTiny ตามลิงค์ได้เลย บอร์ดแต่ละแบบจะต่อไม่เหมือนกัน แต่ฝั่ง ATTiny จะเป็นตามตารางครับ
SPI pin (Arduino Mega Pin) ATTiny Pin MOSI (51) 5 MISO (50) 6 SCK (52) 7 V+ 8 Ground 4 และก็ต่อขา RESET (ATTiny pin 1) กับขา 10 ครับ (ตายตัวทุกบอร์ด แต่เปลี่ยนได้ตอนอัพโหลด Arduino ISP บรรทัดที่ 73 ตรง
#define RESET
)
อ้อ! ถ้าให้ต่อ Cap 10 µF ระหว่างขา ATTiny 1 กับ ground ด้วย จะลดปัญหาอัพไม่ผ่านได้ครับ - เขียนโปรแกรมเข้า ATTiny โดยตั้งค่าดังนี้ครับ :
Board: ATTiny
Processor: ATTiny85
Clock: 1 MHz (internal) –> ตรงนี้อาจจะแก้เป็น 8 MHz ได้นะครับ ต้องลองดู
Port: เลือกที่ต่อกับ Arduino ครับ
ด้านล่างเป็นตัวอย่างโปรแกรมที่ผมลงไป
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Blink | |
Turns on an LED on for one second, then off for one second, repeatedly. | |
Most Arduinos have an on-board LED you can control. On the Uno and | |
Leonardo, it is attached to digital pin 13. If you're unsure what | |
pin the on-board LED is connected to on your Arduino model, check | |
the documentation at http://www.arduino.cc | |
This example code is in the public domain. | |
modified 8 May 2014 | |
by Scott Fitzgerald | |
*/ | |
/* | |
* 8 7 6 5 | |
* +——-+ | |
* | ATTiny| | |
* |o 85 | | |
* +——-+ | |
* 1 2 3 4 | |
* PIN Mega — PIN ATTiny | |
* 10 1 (RESET) | |
* (No need) 2-3 | |
* GND 4 | |
* 49 5 | |
* 48 6 | |
* 50 7 | |
* +5V 8 | |
* And add 10uF capacitor between ATTiny pin 1 (RESET)and pin 4 (GND) | |
* | |
*/ | |
// the setup function runs once when you press reset or power the board | |
void setup() { | |
// initialize digital pin 13 as an output. | |
pinMode(3, OUTPUT); | |
} | |
// the loop function runs over and over again forever | |
void loop() { | |
digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level) | |
delay(1000); // wait for a second | |
digitalWrite(3, LOW); // turn the LED off by making the voltage LOW | |
delay(1000); // wait for a second | |
} |
ปกติเวลาอัพโหลดจะขึ้น Error บ้าง แต่ส่วนใหญ่เป็น error define ค่าซ้ำกัน ไม่กังวล อัพแล้วไฟกระพริบเป็นอันใช้ได้
เท่านี้กาวก็พร้อมดม เอ้ย! ATTiny ก็พร้อมใช้งานได้แล้วล่ะครับ
ระหว่างรอเรียน (ซึ่งสุดท้ายก็ยกคลาส) เลยเอา ATTiny85 มาลองโปรแกรมดูแหม่ นั่งงมตั้งนานกว่าจะสั่งกระพริบไฟได้
Posted by ราชศักดิ์ รักษ์กำเนิด on Thursday, March 17, 2016