โปรแกรมแรก ATtiny24 กับ Arduino IDE
การจะทำให้ ไมโครคอนโทรลเลอร์ ATtiny24 ใช้งานกับ Arduino IDE ได้นั้น จำเป็นที่จะต้องมี Bootloader ก่อน ซึ่งเจ้า Bootloader นี่มันคือ firmware ที่ทำหน้าที่ช่วยในการ upload sketch ที่เราเขียนผ่านทางสาย USB โดยไม่ต้องมีเครื่องโปรแกรมนั่นเอง
โดยบทความนี้จะแสดงวิธีการ ขั้นตอนการเบิร์น Bootloader ลงบน ATtiny24 ด้วยการโปรแกรมแบบ ISP (In System Programming) จาก บอร์ด Arduino UNO รวมทั้ง การ upload sketch เข้าไปยังไมโครคอนโทรลเลอร์ ATtiny24

การส่งข้อมูลแบบ บัส SPI (Serial Peripheral Interface Bus)

http://arduinole.blogspot.com/
SPI Bus (Serial Peripheral Interface Bus) เป็นรูปแบบหนึ่งของการสื่อสารข้อมูลระหว่างอุปกรณ์แบบดิจิทัลที่พบเห็นได้บ่อย และใช้กับอุปกรณ์ได้มากกว่าสองขึ้นไปและนำมาต่อกันเป็นบัส (Bus) บัส SPI ส่งและรับข้อมูลทีละบิต (Bit Serial) และใช้สัญญาณ Clock เป็นตัวกำหนดจังหวะการทำงาน (ดังนั้นจึงเรียกว่า Synchronous, Bit-Serial Data Communication) มีการกำหนดบทบาทในการทำงานของอุปกรณ์ในระบบบัส แบ่งเป็น SPI Masterและ SPI Slave โดยที่ SPI Master เป็นฝ่ายเริ่มการสื่อสารข้อมูล และสร้างสัญญาณ Clock (มักใช้ชื่อสัญญาณว่า SCK) มากำหนดจังหวะการส่งและรับข้อมูล และด้าน SPI Slave จะเป็นฝ่ายคอยตอบสนอง และในระบบบัส SPI อาจมีอุปกรณ์ที่เป็น SPI Slaveได้มากกว่าหนึ่ง (Single-Master, Multi-Slave)
การใช้งาน ISP (In System Programming)
- MOSI == Master Out Slave In: data input
- MISO == Master In Slave out : data output
- SCK == Serial ClocK : clock input
- RST == RESET: used to activate the serial Programming
จากข้างบนจะเห็นว่า ขาที่เป็น MOSI นั้น จะเป็นขาส่งข้อมูลออก ( Output ) ของตัวแม่ ( Master )
MISO นั้น เป็นขาที่รับข้อมูล (Input ) ที่ส่งมาจากลูก ( Slave )
SCK นั้น เป็นตัวนาฬิกาคอยให้จังหวะการส่งข้อมูล
ขาสุดท้ายก็คือ RST นั้น คือตัวที่เริ่มให้มีการเขียนโปรแกรมลง Chip
ขั้นตอนการทำงาน ISP (In System Programming) ผ่าน บัส SPI

ขั้นตอนการเขียนโปรแกรม ( Code ) ลงบน Chip นั้นจะส่งข้อมูลเป็นแบบ Serial หรือ ISP จะเริ่มต้นทำงานด้วยขณะที่ขา RST ถูกปรับให้มีค่า Logic High ( ระดับสัญญาณ เท่ากับ VCC )
สำหรับขา RST นั้น ปกติ ใช้สำหรับ Reset โปรแกรม กล่าวคือสัญญาณ Reset จะหยุดโปรแกรมและเริ่มต้นการทำงานใหม่ โดยเราทำให้ขา RST มีระดับสัญญาณต่ำ ( Logic Low )
เมื่อขา RST ถูกตั้งให้เป็น High คำสั่งพิเศษที่เรียกว่า Programming Enable Instruction จะทำงานก่อน
สำหรับการรับส่งข้อมูลแบบ Serial คือการส่งข้อมูลจาก Arduino ด้วยช่องสัญญาณเพียงช่องเดียว หรือ ขาสัญญาณขาเดียว ในที่นี้คือขาสัญญาณ MISO และ MOSI
โดยข้อมูลจะส่งผ่าน MOSI ทีละ bit โดยแต่ละ bit สัญญาณจาก SCK จะเป็นตัวควบคุมจังหวะของการรับส่ง และทางขา MISO ใช้สำหรับรับข้อมูลจากลูกส่งกลับไปยังต้วแม่
โดยเริ่มจากข้อมูลใน Chip จะถูกลบหมด (Chip Erase) การลบข้อมูลใน Flash Memory และจะตามด้วยการเขียนค่า เลขฐานสิบหก (Hexadecimal Number) ลงไปในแต่ละตำแหน่งใน Flash หรือ Ram Memory ของ Chip
ความเร็วของสัญญาณนาฬิกา ของ ISP จะถูกกำหนดโดยสัญญาณนาฬิกาอ้างอิงจาก External Clock หรือ Crystal โดยมีข้อกำหนดว่า ความเร็วของขา SCK นั้นจะเร็วไม่เกิน 1/16 ของ ความเร็วของ Crystal ไม่ได้
โปรแกรมแรกของ การใช้งานไมโครคอนโทรลเลอร์มักจะเป็น Blink ไฟกะพริบ ซึ่งเป็นหนึ่งในโปรแกรมที่ง่ายที่สุดเท่าที่จะเป็นไปได้ในการเขียนภาษาโปรแกรมต่างๆ เพราะฉะนั้นโดยธรรมเนียมปฏิบัติแล้ว มักจะใช้ในการตรวจสอบว่าเขียนภาษาโปรแกรมได้ถูกต้องหรือระบบมีการประมวลผลที่ถูกต้อง และมักถูกใช้เป็นตัวอย่างที่ง่ายที่สุดในการแสดงผลลัพธ์ของการเขียนโปรแกรม
โปรแกรมแรก ATtiny24 กับ Arduino IDE
รายการอุปกรณ์
- 1. Arduino UNO R3
- 2. ATtiny24 ATTINY24A-PU 8-bit AVR
- 3. Jumper (M2M) cable 20cm Male to Male
- 4. Breadboard 700 Points SYB-120
- 5. หลอดไฟ LED 5mm สีแดง
- 6. รีซิสเตอร์ 220 OHM 1/4W 5%
ขั้นตอนการทํางาน
1 : ทำให้ Arduino IDE เป็นเครื่องเขียนโปรแกรม และการเพิ่มบอร์ด ATtiny24
อัพโหลดโค้ด ให้ Arduino UNO เป็น เครื่องเขียนโปรแกรม และ การเพิ่มบอร์ด ATtiny24 ให้กับ Arduino IDE ตามขั้นตอนลิงค์ด้านล่าง
2 : ต่อวงจร Arduino UNO กับ ATtiny24 เพื่อ เบิร์น Bootloader
มาเริ่มด้วยชิป ATtiny24 กัน นี่คือไมโครคอนโทรลเลอร์ 8 บิตและบางครั้งก็เรียกว่า Arduino ขนาดเล็ก ในการเขียนโปรแกรมชิปนี้เราจำเป็นต้องมีการสื่อสาร SPI โดยเราจะสร้าง Shield สำหรับ ATtiny24 ที่สามารถเชื่อมต่อกับ Arduino UNO ตามแผนผังด้านล่าง

VCC – เชื่อมต่อ Arduino ขา 5V กับ ATtiny24 ขา VCC
GND – เชื่อมต่อ Arduino ขา GND กับ ATtiny24 ขา GND
SCK – เชื่อมต่อ Arduino ขา 13 กับ ATtiny24 ขา PA4
MISO – เชื่อมต่อ Arduino ขา 12 กับ ATtiny24 ขา PA5
MOSI – เชื่อมต่อ Arduino ขา 11 กับ ATtiny24 ขา PA6
RTS – เชื่อมต่อ Arduino ขา 10 กับ ATtiny24 ขา PB3


3 : เบิร์น Bootloader ให้กับ ATtiny24
สำหรับการเบิร์น Bootloader ให้กับ ATtiny24 ให้ทำเพียงแค่ครั้งแรกครั้งเดียว ในการอัพโหลดโค้ดครั้งต่อๆไปไม่จำเป็นต้อง เบิร์น Bootloader อีก
เปิดโปรแกรม Arduino IDE ไปที่ File -> Examples -> 11.ArduinoISP -> ArduinoISP

ไปที่ Tools -> Board -> DIY ATtiny แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ ATtiny24 ให้เลือกบอร์ดเป็น ATtiny24

เลือก Port โดยไปที่ Tools -> Port -> COM3 (Arduino Uno)
(โดย COM3 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)

ไปที่ Tools -> Programmer -> DIY ATtiny: Arduino as ISP

ไปที่ Tools -> Burn Bootloader

รอจนกระทั่งขึ้น Done burning bootloader. ที่แถบด้านล่าง แสดงว่าการเขียน Bootloader ให้ ATtiny24 สำเร็จแล้ว

4 : โปรแกรมแรก กับ ATtiny24
ต่อวงจร LED เพิ่ม เพื่อทดสอบการทำงาน ให้ ATtiny24 เปิด/ปิด ไฟ LED โดยให้ขา Pin 8 เป็น OUTPUT แบบ Digital


ในตัวอย่างนี้ เราจะมาทดลองสั่งงาน เปิด/ปิด หลอดไฟ LED โดยโปรแกรม Blink หรือ ไฟกระพริบ ATtiny24
โดยเซ็ตขา Pin 8 ของ ATtiny24 ให้เป็นโหมดเอาท์พุท ด้วยคำสั่ง pinMode(8, OUTPUT);
คำสั่ง digitalWrite(8, HIGH); ใช้ในการควบคุม LED โดย HIGH = ไฟติด , LOW = ไฟดับ
คำสั่งหน่วงเวลา delay(500); โดย 500 คือ 500 มิลลิวินาที หรือ 0.5 วินาที และ 1000 คือ 1000 มิลลิวินาที หรือ 1 วินาที
เปิดโปรแกรม Arduino IDE เขียนโปรแกรม ตามโค้ดด้านล่างนี้
void setup()
{
pinMode(8, OUTPUT); //Set the LED pins to OUTPUT
}
void loop()
{
digitalWrite(8, HIGH); //Set the LED pins to HIGH.
delay(500); // Wait for a half a second
digitalWrite(8, LOW); // Set the LED pins to LOW.
delay(1000); // Wait for a second
}
ตั้งค่าโปรแกรม เหมือนกับ การ เบิร์น Bootloader

แต่ ขั้นตอนนี้ให้ไปที่ Sketch -> Upload Using Programmer


รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ด ATtiny24 ได้สำเร็จแล้ว

5 : ทดสอบการทำงาน
ผลลัพธ์การทำงานคือ ไฟ LED สีแดง ที่ขา Pin 8 กระพริบ แสดงว่า การอัพโหลดโค้ด โปรแกรมแรกของคุณ กับ ATtiny24 สำเร็จแล้ว
