วันศุกร์ที่ 9 ธันวาคม พ.ศ. 2554

ต่อจอ lcd 16x2

   ไมโครคอนโทรลเลอร์ก็เหมือนกับเคสคอมพิวเตอร์ย่อขนาดมาใส่ไว้ในชิบ ในบทความนี้จะพาต่อจอแสดงผลออกมาครับ ซึ่งจอแสดงผลที่เป็นพื้นฐานที่นำมาต่อกับไมโครคอนโทรลเลอร์คือจอ LCD Character แต่จอแสดงผลแบบนี้จะมี IC คอนโทรลอีกที่ IC ตัวนั้นคือ IC เบอร์ hd44780 ซึ่งตอนแรกผมตั้งใจจะเขียน library ติดด่อกับ hd44780 แต่พอได้ไปดู library ที่เขาเขียนไว้แล้วเอาของเขาดีกว่า เขียนดีกว่าเราเยอะ lib ที่เอามานี้ผมเอามาจาก avrfreaks.net สาวก avr ควรไปสมัครเป็นสมาชิกไว้ เพราะจะโหลด lib เขาต้องเป็นสมาชิกก่อนถึงจะโหลดได้


วันอังคารที่ 6 ธันวาคม พ.ศ. 2554

รีจิสเตอร์ คืออะไร


  registers คือวงจรภายในที่ทำหน้าที่ควบคุมการทำงานของไมโครคอนโทรลเลอร์ เราสามารถติดต่อกับรีจิสเตอร์ผ่าน RAM โดยมีการแบ่งได้หลายแบบ ถ้าแบ่งตามลักษณะการทำงานจะแบ่งได้ 3 ชนิด


  1. control register ทำหน้าที่ควบคุมการทำงาน
  2. data register   ทำหน้าที่รับส่งข้อมูล
  3. status register  ทำหน้าที่บอกสถานะ
ยกตัวอย่าง register ที่เกี่ยวกับ I/O ของ atmega8 มีอยู่ 3 ตัว คือ DDR ,PORT และ PIN DDR เป็น control register PORT และ PIN เป็น data register มาดูโปรแกรมกัน

  1. #include <avr/io.h>

  2. int main()
  3. {
  4. DDRB = 0xFF ;
  5. DDRC = 0x00 ;
  6. while(1)
  7. {
  8. PORTB = PINC ;
  9. }
  10. }
จากโปรแกรมผมเซ็ต port B ให้เป็น output เซ็ต port C ให้เป็น input แล้วนำข้อมูลจาก port C มาออกที่ port B ข้อมูลของregister สามารถหาอ่านได้ ใน use manual ของ mcu เบอร์นั้นๆ นะครับ

วันจันทร์ที่ 5 ธันวาคม พ.ศ. 2554

เริ่มต้นเขียนโปรแกรม Microcontroller

     ในการเริ่มต้นเขียนโปรแกรมไมโครคอนโทรลเลอร์นั้นจริงๆ จะต้องศึกษาสถาปัตยกรรมภายในของไมโครคอนโทรลเลอร์ของเบอร์ที่เราจเขียน แต่ถ้าเขียนด้วยภาษาซีแล้วอาจจะไม่ต้องไปทำความเข้าใจถึงขนาดนั้นเอาแค่ทำความเข้าใจเรื่องรีจิสเตอร์ ในตอนแรกนี้จะมีรีจิสเตอร์ที่เกี่ยวข้องอยู่สองตัวคือ DDR (รีจิสเคอร์ควบคุมกำหนดทิศทางของข้อมูล) กับ PORT (เป็นรีจิสเตอร์ข้อมูลที่ใช้เก็บข้อมูลที่เช้า ออก ผ่าน port)

     สำหรับภาษาซีที่เขียนในคอนโทรลเลอร์นั้นหลักๆ จะแยกออกสองส่วนที่อยู่ในฟังก์ชั่นหลัก ( main )


  1.           int main()
  2.          {
  3.                ประกาศตัวแปร เซ็ตรีจิสเตอร์(ส่วนที่1)

  4.                       while loop 
  5.                       {
  6.                         งานที่จะทำ   (ส่วนที่2)
  7.                        }
  8.           }


วันพฤหัสบดีที่ 9 มิถุนายน พ.ศ. 2554

USART Transmit

USART ย่อมาจาก The Universal Synchronous and Asynchronous serial Receiver and Transmitter เป็นการรับส่งข้อมูลแบบ serial ในบทความนี้ผมได้ให้ ATmega16 ส่งตัวอักษรไปยัง com port ในโปรแกรม proteus สำหรับ code ก็เอามาจากใน datasheet ของ ATmega16 เลย ซึ่ง datasheet เป็นสิ่งที่จำเป็นที่จะต้องรู้อย่างมากในการเขียนโปรแกรม microcontroller


วันเสาร์ที่ 21 พฤษภาคม พ.ศ. 2554

Interrupt in avr studio 5

      ถ้าแบ่งการเขียนโปรแกรม mcu ออก 2 แบบคือ แบบใช้ interrupt กับแบบไม่ใช้ interrupt(เรียกอีกอย่างว่า polling )
     Polling คือการเขียนโปรแกรมแบบวนลูป  interrupt คือการเขียนโปรแกรมขัดจังหวะ  เป็นอย่างไรมาดูกัน สมมติ mcu เรามีร้านขาย ic มีงานอยู่สองอย่าง คือ ดูหน้าร้านกับเขียนโปรแกรมหลังร้าน ถ้าทำแบบ polling จะวนลูปทำสองอย่างเช่น เขียนโปรแกรมได้ หนึ่งบรรทัดแล้วออกมาดูหน้าร้านว่ามีคมมารึเปล่า แต่ interrupt จะไม่ต้องทำอย่างนั้น interrupt จะ เขียนโปรแกรมไปเรื่อยจนกว่าจะมีคนมาจึงออกไปขายของหน้าร้านไม่ต้องออกมาเช็คบ่อย
     ครั้งนี้ผมจะมาแสดงการก็อป source code แล้วแก้ไขจะเห็นว่าง่ายมาก แต่ต้องอ่าน datasheet มาก่อนว่า register ตัวนี้มีีไว้ทำไม


สงสัยตรงไหนโพสถามได้ครับ


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

ทำความรู้จัก AVR studio 5

ams     AVR studio 5 เป็น IDE ( integrated development environment ) ทำหน้าที่เป็นพื้นที่ในการเขียนโปรแกรม ( text editor ) และ แปลงภาษาซีให้เป็นภาษาเครื่อง ( compiler ) โดยจะเริ่มจากเราเขียนโปรแกรมภาษาซี ( source code ) จากนั้น compiler จะ compile เป็น object file( .o) แล้วเรียกใช้ linker แปลง ให้เป็น hex file ( .hex ) ซึ่ง .hex จะเป็น file ที่จะเอาไปใส่ใน MCU


     เราจะต้องรู้การทำงานของ IDE เพื่อที่จะได้เซตค่าให้ถูก และแก้ปัญหาในบ้างครั้ง เอาแค่นี้ก่อนมาเริ่มลองกะของจริงเลยดีกว่า เปิด AVR studio 5 ขึ้นมาเลยครับจะเจอหน้าแรกแบบนี้




      จากนั้นก็เริ่มเขียนโค๊ดตามภาพด้านล่างชึ่งเป็นโปรแกรไฟกระพิบแบบบ้านๆ สำหรับผู้ที่ยังไม่เข้าใจภาษาซีแนะนำให้ไปร้านหนังสือแถวบ้านหาหนังสือภาษาซีมาอ่าน