วันศุกร์ที่ 20 พฤษภาคม พ.ศ. 2559

AVR C - เขียนโปรแกรมแสดงผลทาง LED 7 Segments

LED 7 Segments เป็นอุปกรณ์พื้นฐานอีกชิ้นหนึ่งที่คนเขียนโปรแกรมด้านไมโครคอนโทรลเลอร์ต้องเรียนรู้ เพราะเป็นพื้นฐานของการทำงานระดับบิตที่ชัดเจนตรงไปตรงมาที่สุด เพราะตัว LED มี 7 bit ในการแสดงผล เพื่อให้เป็นตัวเลข และสามารถใช้แสดงผลตัวอักษรได้ แต่ไม่ครบทุกตัว

LED แบบ 7 Segments สังเกตที่ตัวเลขจะมีขีด 7 ขีดเพื่อสร้างตัวเลข หรือตัวอักษร
จากรูปที่แสดงไว้ข้างบน มี 4 หลัก หรือ 4 Digits และระหว่างหลักจะมี จุด และ : รวมถึง จุดที่ใช้แสดงองศา 

AVR C: Bitwise กลับค่า I/O

ในบางครั้งเรามีความจำเป็นต้องกลับค่าใน PORT ใดๆ สักพอร์ตหนึ่ง เราสามารถทำได้หลายแบบ แม้กระทั่งการกลับโดยระบุ 0xFF และ 0x00 โดยตรงก็ได้ เช่น

PORTB = 0xFF; //กำหนดให้ PORTB มีค่าเป็น 1 ทั้งหมด
PORTB = 0x00; //กำหนดให้ PORTB มีค่าเป็น 0 ทั้งหมด

วิธีการนี้ก็ง่ายๆ ตรงไปตรงมาดี แต่บางครั้งการเขียนโปรแกรมเราไม่สนใจว่าขณะนั้น PORTx มีค่าเป็นอะไร แต่เราต้องการสลับค่าภายใน จึงเปลี่ยนไปใช้คำสั่งระดับบิตในการสลับจะง่ายกว่า เช่น

PORTB = ~PORTB

คำสั่งนี้จะสั่งให้โปรแกรมสลับค่าใน PORTB จากเดิมที่เป็นให้เป็นตรงกันข้าม ถ้าเดิมเป็น 1 ให้กลับเป็น 0 ถ้าเดิมเป็น 0 ก็ให้เป็น 1 ซึ่งวิธีนี้จะง่ายและเหมาะสำหรับการกลับค่าที่ไม่เหมือนกันทั้งหมด เช่น

...
PORTB = 0b10101010;
while(1){
  PORTB = ~PORTB;
}
...

คำสั่งสองสามบรรทัดข้างบนนี้จะทำให้ PORTB มีค่าระหว่าง 0b10101010 กับ 0b01010101 นั่นเอง
ตัวอย่างการสลับค่า I/O


วันพฤหัสบดีที่ 19 พฤษภาคม พ.ศ. 2559

จะดูขา LED อย่างไร

นักอิเลกโทรนิกส์ทั้งหลายคงจะเข้าใจวิธีวัดค่าของไดโอดเปล่งแสง หรือ LED เป็นอย่างดี แต่สำหรับมือใหม่ ย่อมต้องเรียนรู้ หาประสบการณ์ต่อไปเรื่อยๆ จนกว่าจะชำนาญ บทความนี้จะมาแนะนำวิธีการหาขา A และ K ของ LED

Anode เป็นขาที่เชื่อมต่อกับไฟบวก และขา Cathode หรือขา K เป็นขาที่เชื่อมต่อกับไฟลบ

ภาพแสดงขา LED จะสังเกตเห็นว่าขายาว่จะรับไฟ + ขาสั้น จะรับไฟ -

AVR C การทำงานระดับบิต

การเขียนโปรแกรมในไมโครคอนโทรลเลอร์หลีกเลี่ยงการใช้งานระดับบิตไม่ได้ และมีความสำคัญเป็นอย่างยิ่งที่ต้องเรียนรู้หลักการให้เข้าใจ

วิธีการเรียนรู้ที่เข้าใจง่าย คือ การลงมือสร้างตัวอย่างขึ้นเพื่อให้เกิดความเข้าใจอย่างถ่องแท้

การเรียนรู้ที่ง่ายที่สุดก็เริ่มจาก LED โดยจะต่อ LED 8 ดวง เข้ากับขา I/O ให้ครบ 8bit คือ ต่อตั้งแต่ PINx0 - PINx7 ในบทความนี้ใช้ LED แบบแพ็ก 10 แต่ใช้เพียง 8 ดวงเท่านั้น และอย่าลืมต่อ R ค่า 220 หรือ 330 โอห์มพ่วงไว้สักนิดจะได้ช่วยปกป้องทั้ง IC และ LED

อุปกรณ์เรียนรู้การทำงานระดับบิต

ATmega16+LCD เริ่มเขียนโปรแกรมติดต่อ LCD

หลังจากที่ทดสอบบอร์ด ATmega16 ได้แล้ว ก็เริ่มศึกษาการใช้งาน เริ่มต้นก็ทำให้ LED กระพริบ และรับค่าทาง input ที่เป็นสวิทช์กดติดปล่อยดับได้แล้ว แต่ก็ยังไม่ค่อยเข้าใจหลักการที่แท้จริง เลยลองต่อ LCD เพื่อแสดงผล โดยปกติในเว็บต่างๆ มักเป็นตัวอย่างการเชื่อมต่อ และเขียนโปรแกรมโดยใช้ lcd.h

แต่ก็ยังไม่เป็นที่พอใจเพราะตัวอย่างยังไม่ทราบหลักการพื้นฐานการติดต่อ และการส่งคำสั่งไปยังอุปกรณ์ (LCD) ดังนั้นจึงค้นหาไปเรื่อยๆ เพื่อหาตัวอย่างง่ายๆ สั้นๆ แต่ครอบคลุมพื้นฐานโดยไม่ต้องใช้ไลบรารีภายนอก

ATmega16+LCD

มีตัวอย่างอยู่ในเว็บแห่ง electronics hub มีตัวอย่างการใช้งาน 16x2 LCD กับ ATmega16 อยู่ด้วย แต่วงจรที่ให้มากับโปรแกรมไม่ตรงกันจึงต้องแก้ไขนิดหน่อย

สำหรับเว็บเรียนรู้เกี่ยวกับเขียนโปรแกรมติดต่อกับ LCD ผ่าน Arduino IDE ก็ลองอ่านจากเว็บของ thaieasyelec นะครับ

และเว็บ www.kanda.com จะมีเรื่อง AVR keypad LCD in WinAVR C จะมีตัวอย่างคำสั่งให้ศึกษาอีกเว็บหนึ่ง

วันอังคารที่ 17 พฤษภาคม พ.ศ. 2559

เพิ่ม ATmega16 เข้าไปใน boards.txt

การเริ่มเรียนรู้ วิธีการเขียนโปรแกรมด้วย AVR Studio 7 บางครั้งก็สับสนไม่แน่ใจว่าโปรแกรมผิดหรือว่าอุปกรณ์ใช้ไม่ได้ ดังนั้นควรมีหลักในการยึดเพื่อเปรียบเทียบบ้างก็จะดี ทำให้หาสาเหตุได้ง่าย โดยผู้เขียนมักจะใช้ Arduino IDE เป็นหลักในการยัด โดยจะทดสอบกับ Arduino IDE แล้วสามารถใช้งานได้ ก็ถือว่าบอร์ดนั้นใช้ได้ จะได้หาสาเหตุที่โปรแกรมต่อไป

โดยปกติแล้ว ATmega16 ไม่ได้อยู่ในรายการบอร์ดของ Arduino IDE เพราะเท่าที่เห็นแล้วบอร์ด Arduino ไม่ได้ใช้ Chip 40 ขา ซึ่งจะมี I/O มากกว่า โดยมี Port A, B, C และ D สามารถเลือกใช้งานขา I/O ได้ถึง 32 ขา ดังนั้นหากต้องการควบคุมอุปกรณ์เป็นจำนวนมากแล้วย่อมต้องเลือก ATmega16 แต่ถ้าอุปกรณ์เพียงไม่กี่ชิ้นก็ไม่เหมาะเพราะไอซี 40 ขาตัวนี้ค่อนข้างใหญ่เทอะทะพอสมควร

ดังนั้นหากต้องการใช้บน Arduino IDE ก็ต้องเข้าไปเพิ่มอุปกรณ์ในไฟล์ boards.txt และอื่นๆ อีกเล็กน้อย โดยเริ่มแรกหาจากอินเตอร์เน็ต ซึ่งทำตามแล้วยังใช้ไม่ได้ เพราะ IDE คนละเวอร์ชัน สภาพแวดล้อมเปลี่ยนจากเดิม แต่ก็ไม่เหนือบ่ากว่าแรง หากพยายามและมีหลักการการค้นหาปัญหา

ATmega16 ที่เพิ่มเข้าไปใน Arduino IDE จะแยกเป็นฮาร์ดแวร์อีกกลุ่มหนึ่ง

วันอังคารที่ 10 พฤษภาคม พ.ศ. 2559

AVR Loader วิธีง่ายๆ เพื่อใช้สัญญานนาฬิกาภายในไอซี

หลังจากที่พยายามให้ไอซี Atmega8 และ 16 ใช้ Internal Clock เพื่อลดการใช้ X-TAL โดยเบิร์น Bootloader เข้าไปก็ไม่ได้ผลเท่าที่ควร เพราะยุ่งยาก แต่ก็มีวิธีง่ายๆ สำหรับการกำหนดค่า โดยใช้โปรแกรม AVR Loader

การกำหนดค่า FUse จะเป็นการบอกว่าจะใช้สัญญานนาฬิกาจากไหน โดยโปรแกรม AVR Loader สามารถดาวน์โหลดได้จากอินเตอร์เน็ต

โปรแกรม AVR Loader สำหรับแก้ไข อัพโหลดไฟล์ .hex สำหรับ ATmega

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...