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

ใช้งาน GPIO STM32F10x

สำหรับการใช้งาน GPIO ของ STM32F1 โดยใช้เป็น Digital out put มีขั้นตอนดังนี้
  • ประกาศ GPIO_InitTypeDef ซึ่งจะใช้เก็บค่าในการกำหนด GPIO 
  • เปิดใช้งาน clock ของ GPIO
  • กำหนดค่า Port




สำหรับ GPIO สามารถเลื่อกโหมดได้ดังนี้
  • GPIO_Mode_AIN กำหนดให้เป็นอนาล็อกอินพุต
  • GPIO_Mode_IN_FLOATING กำหนดให้เป็นขาดิจิตอลอินพุตแบบลอยขา
  • GPIO_Mode_IPD กำหนดให้เป็นดิจิตอลอินพุตแบบพูลดาวน์
  • GPIO_Mode_IPU กำหนดให้เป็นดิจิตอลอินพุตแบบพูลอัพ
  • GPIO_Mode_Out_OD กำหนดให้เป็นดิจิตอลเอาท์พุตแบบ open-drain
  • GPIO_Mode_Out_PP กำหนดให้เป็นดิจิตอลเอาท์พุตแบบ push-pull
  • GPIO_Mode_AF_OD กำหนดให้เป็นขาฟังก์ชันพิเศษแบบ open-drain
  • GPIO_Mode_AF_PP กำหนดให้เป็นขาฟังก์ชันพิเศษแบบ push-pull
และตัวแปรอื่นสามารถกำหนดได้ตามภาพข้างล่าง





วันอังคารที่ 9 เมษายน พ.ศ. 2556

STM32F3xx GPIO

สวัสดีครับบทความนี้จะเป์นการใช้งาน GPIO ของ stm32f3xx

  • 1.ประกาศ structure GPIO ชื่อ GPIO_InitStructure ดังนี้
     GPIO_InitTypeDef       GPIO_InitStructure;
  • 2.เปิดใช้งาน clock ของ GPIO port E โดยใช้คำสั่ง RCC_AHBPeriphClockCmd ดั้งนี้
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);

  • 3.กำหนดค่าการทำงานของ GPIO ตัวอย่างจะใช้ pin 0 กับ 1 ดังนี้
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // เลือก pin
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;           // เลือก mode เป็น digital out put
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           // เลือกวงจรขับแบบ Push-pull
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;    // ไม่ต่อ R pull up และ pull down
      GPIO_Init(GPIOE, &GPIO_InitStructure);                               // กำหนดค่าลง port E

ตอนนี้ port E pin 0 กับ pin 1 จะเป็น digital out put และมีคำสั่งในการควบคุมต่างๆ ดังต่อไปนี้

GPIO_SetBits( GPIOz, GPIO_Pin_x);
GPIO_ResetBits(GPIOz, GPIO_Pin_x);
GPIO_WriteBit(GPIOz, GPIO_Pin_x, BITVALUE);
GPIO_Write(GPIOz, PORTVALUE);

*z แทนชื่อ port
*x แทนชื่อ pin





วันพุธที่ 11 เมษายน พ.ศ. 2555

เริ่มต้น 32 bit กับ STM32

STM32 เป็นไมโครคอนโทรลเลอร์ 32 บิต ซึ่งหน่วยประมวลผลกลางเป็น ARM Cortex-M3 สำหรับความสามารถและความเร็วของไมโครคอนโทรลเลอร์ 32 บิต นั้นดีกว่า 8 บิต พอสมควรแต่ต้องแลกกับความยากในการเขียนโปรแกรม เนื่องจากว่าโครงสร้างภายในมีความซับซ้อนมากว่าจึงทำให้การกำหนดค่ารีจิสเตอร์ต่างจะมากกว่า แต่สำหรับไมโครคอนโทรลเลอร์ STM32 นั้น มีชุดความสั่งในการกำหนดรีจิสเตอร์ไว้ให้ ชุดคำสั่งนี้เรียกชื่อเต็มว่า STM32F10x Standard Peripherals Library สามารถดาวน์โหลดได้ฟรีที่ เวปของ ST (www.st.com) หรือ ที่นี้

วันอาทิตย์ที่ 29 มกราคม พ.ศ. 2555

เปิดโปรแกรมด้วย RUN

ในเวลาที่เราลงโปรแกรมไปเยอะสิ่งหนึ่งที่เจอะคือเวลาจะเปิดโปรแกรมจาก start menu เราต้องเสียเวลาในการหา แต่มีตัวช่วยที่จะทำให้เราเปิดโปรแกรมที่ต้องการได้เร็วขึ้น คือ RUN โดยการเรียกใช้ RUN นั้นจะไปที่ start -> RUN หรือกดปุ๋ม windown+R แต่อีกปัญหาคือเราจะรู้ได้อย่างว่าโปรแกรมที่ต้องการจะเปิดต้องพิมพ์ว่าอย่างไร วิธีแรกเราก็พิมพ์มันไปทั้ง path ที่โปรแกรมนั้นอยู่ เช่น C:\Program Files\Atmel\AVR Studio 5.0\avrstudio5.exe แล้ว AVR Studio 5 ก็จะเปิดขึ้นมา แ่ต่ถ้าเราขี้เกียจพิมพ์ยาวขนาดนั้นก็พิมพ์แค่ avrstudio5 ก็พอ แต่ใช่ว่าทุกโปรแกรมจะเป็นเหมือนกันบางโปรแกรมที่ลงไว้อาจจะยังไม่ได้เซ็ืต path ไว้จึงเรียกใช้ไม่ได้แต่เราสามารถเซ็ตเองได้ โดยการเข้าไปแก้ที่ regedit ดังนี้
1. start > RUN พิมพ์ regedit 
2. ไปที่ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windowns\CurrentVersion\App Path 
แล้วทำการแก้ตรงนี้ ตามวิดีโอ(เดี๋ยวอัพให้)

วันศุกร์ที่ 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 ขึ้นมาเลยครับจะเจอหน้าแรกแบบนี้




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