โปรแกรมแรก ATtiny13 กับ Arduino IDE
การจะทำให้ ไมโครคอนโทรลเลอร์ ATtiny13 ใช้งานกับ Arduino IDE ได้นั้น จำเป็นที่จะต้องมี Bootloader ก่อน ซึ่งเจ้า Bootloader นี่มันคือ firmware ที่ทำหน้าที่ช่วยในการ upload sketch ที่เราเขียนผ่านทางสาย USB โดยไม่ต้องมีเครื่องโปรแกรมนั่นเอง
โดยบทความนี้จะแสดงวิธีการ ขั้นตอนการเบิร์น Bootloader ลงบน ATtiny13 ด้วยการโปรแกรมแบบ ISP (In System Programming) จาก บอร์ด Arduino UNO รวมทั้ง การ upload sketch เข้าไปยังไมโครคอนโทรลเลอร์ ATtiny13
การส่งข้อมูลแบบ บัส 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 ไฟกะพริบ ซึ่งเป็นหนึ่งในโปรแกรมที่ง่ายที่สุดเท่าที่จะเป็นไปได้ในการเขียนภาษาโปรแกรมต่างๆ เพราะฉะนั้นโดยธรรมเนียมปฏิบัติแล้ว มักจะใช้ในการตรวจสอบว่าเขียนภาษาโปรแกรมได้ถูกต้องหรือระบบมีการประมวลผลที่ถูกต้อง และมักถูกใช้เป็นตัวอย่างที่ง่ายที่สุดในการแสดงผลลัพธ์ของการเขียนโปรแกรม
โปรแกรมแรก ATtiny13 กับ Arduino IDE
รายการอุปกรณ์
- 1. Arduino UNO R3
- 2. ATtiny13 ATTINY13A-PU 8-bit AVR
- 3. Jumper (M2M) cable 20cm Male to Male
- 4. Breadboard 830 Point MB-102
- 5. หลอดไฟ LED 5mm สีแดง
- 6. รีซิสเตอร์ 220 OHM 1/4W 5%
ขั้นตอนการทํางาน
1 : ทำให้ Arduino IDE เป็นเครื่องเขียนโปรแกรม และการเพิ่มบอร์ด ATtiny13
อัพโหลดโค้ด ให้ Arduino UNO เป็น เครื่องเขียนโปรแกรม และ การเพิ่มบอร์ด ATtiny13 ให้กับ Arduino IDE ตามขั้นตอนลิงค์ด้านล่าง
2 : ต่อวงจร Arduino UNO กับ ATtiny13 เพื่อ เบิร์น Bootloader
มาเริ่มด้วยชิป ATtiny13 กัน นี่คือไมโครคอนโทรลเลอร์ 8 บิตและบางครั้งก็เรียกว่า Arduino ขนาดเล็ก ในการเขียนโปรแกรมชิปนี้เราจำเป็นต้องมีการสื่อสาร SPI โดยใช้ฟังก์ชั่น “micro” เราจะสร้าง Shield สำหรับ ATtiny13 ที่สามารถเชื่อมต่อกับ Arduino UNO ตามแผนผังด้านล่าง
VCC – เชื่อมต่อ Arduino ขา 5V กับ ATtiny13 ขา VCC
GND – เชื่อมต่อ Arduino ขา GND กับ ATtiny13 ขา GND
SCK – เชื่อมต่อ Arduino ขา 13 กับ ATtiny13 ขา PB2
MISO – เชื่อมต่อ Arduino ขา 12 กับ ATtiny13 ขา PB1
MOSI – เชื่อมต่อ Arduino ขา 11 กับ ATtiny13 ขา PB0
RTS – เชื่อมต่อ Arduino ขา 10 กับ ATtiny13 ขา PB5
3 : เบิร์น Bootloader ให้กับ ATtiny13
สำหรับการเบิร์น Bootloader ให้กับ ATtiny13 ให้ทำเพียงแค่ครั้งแรกครั้งเดียว ในการอัพโหลดโค้ดครั้งต่อๆไปไม่จำเป็นต้อง เบิร์น Bootloader อีก
เปิดโปรแกรม Arduino IDE ไปที่ File -> Examples -> 11.ArduinoISP -> ArduinoISP
ไปที่ Tools -> Board -> DIY ATtiny แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ ATtiny13 ให้เลือกบอร์ดเป็น ATtiny13
เลือก Port โดยไปที่ Tools -> Port -> COM3 (Arduino Uno)
(โดย COM3 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
ไปที่ Tools -> Programmer -> DIY ATtiny: Arduino as ISP
ไปที่ Tools -> Burn Bootloader
รอจนกระทั่งขึ้น Done burning bootloader. ที่แถบด้านล่าง แสดงว่าการเขียน Bootloader ให้ ATtiny13 สำเร็จแล้ว
4 : โปรแกรมแรก กับ ATtiny13
ในตัวอย่างนี้ เราจะมาทดลองสั่งงาน เปิด/ปิด หลอดไฟ LED โดยโปรแกรม Blink หรือ ไฟกระพริบ ATtiny13
โดยเซ็ตขา PB4 ของ ATtiny13 ให้เป็นโหมดเอาท์พุท ด้วยคำสั่ง pinMode(4, OUTPUT);
คำสั่ง digitalWrite(4, HIGH); ใช้ในการควบคุม LED โดย HIGH = ไฟติด , LOW = ไฟดับ
คำสั่งหน่วงเวลา delay(500); โดย 500 คือ 500 มิลลิวินาที หรือ 0.5 วินาที และ 1000 คือ 1000 มิลลิวินาที หรือ 1 วินาที
เปิดโปรแกรม Arduino IDE เขียนโปรแกรม ตามโค้ดด้านล่างนี้
void setup()
{
pinMode(4, OUTPUT); //Set the LED pins to OUTPUT
}
void loop()
{
digitalWrite(4, HIGH); //Set the LED pins to HIGH.
delay(500); // Wait for a half a second
digitalWrite(4, LOW); // Set the LED pins to LOW.
delay(1000); // Wait for a half second
}
ตั้งค่าโปรแกรม เหมือนกับ การ เบิร์น Bootloader
แต่ ขั้นตอนนี้ให้คลิกที่ Upload
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ด ATtiny13 ได้สำเร็จแล้ว
5 : ต่อวงจร LED เพื่อทดสอบการทำงาน
ทดสอบการใช้งาน ขา OUTPUT ของ ATtiny13 แบบ Digital โดยสั่งให้ ATtiny13 เปิด/ปิด ไฟ LED