Arduino Serial PORT

รูปภาพ
Arduino Serial PORT       ใน Arduino นั้นจะสามารถติดต่อสื่อสารกับ Computer ผ่าน Serial ที่หลายคนก็รู้เช่ยเดียวกัน ในครั้งนี้ห็จะมาดูกันว่าจะสามารถทำอะไรกลับ Serial ได้บ่าง   คำสั่งแรกที่ต้องใช้ในการเริ่มต้นสือสารคือ การกำหนดความเร็วในการสือสาร ด้วยคำสั่งด้านล่าง จะใส่ไว้ใน Founction setup()  Serial.begin(9600);         นอกจากนี้ถ้าเป็นบอร์ดที่มีหลาย Serial (Arduino Maga2560) ก็จะใช้ การตั้งค่าเป็นดังนี้ Serial1.begin(9600); Serial2.begin(9600);        ก่อนที่จะเริ่มไปส่งค่าหรือรับค่ามาใช้งาน มาดูรายละเอียดของ  Baud Rate กันก่อน  เพื่อดูระยะเวลาในการรับ/ส่งข้อมูลกันก่อนเพราะบางที่ก็จะมีผลต่อโปรแกรมที่เราเขียนขึ้นจาก สูตร         ถ้าใช้ Baud Rate เท่ากลับ 9600 bit/s จะได้ว่า t = 1/9600 t= 0.104 mS         สรุปได้ว่า 1 bit = 0.104 mS ถ้า 1 char จะได้ว่า 0.104 ms*11 bit = 1.144 ms นั้นหมายความว่า ถ้าเราส่งข้อมูลหลายตัวอักษรก็จะใช้เวลาที่นาน   ...

pic32mx460f512l การกำหนด Crystal Oscillator

pic32mx460f512l การกำหนด Crystal Oscillator 
การเริ่มต้นใช้งาน    pic32 เราจำเป็นจะต้องตั้งค่าของสัญญาณนาฬิกา การตั้งค่าสัญญาณนาฬิกาสามารถตั้งค่าได้ 2 รูปแบบดังนี้
ตั้งค่าสัญญาณนาฬิกาจากภายนอก
ในการตั้งค่าแบบนี้เราจำเป็นจะต้องต่อคริสตัลจากภายนอกเข้ามาที่ขาของตัวอุปกรณ์ไมโครคอนโทรลเลอร์จากนั้นเขียนโค้ดตามด้านล่างนี้
// *****************************************************************************
// *****************************************************************************
// Section: Configuration bits
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
// *****************************************************************************
// *****************************************************************************
// Configuration Bit settings
#ifndef OVERRIDE_CONFIG_BITS


   #pragma config UPLLEN   = ON // USB PLL Enabled
   #pragma config FPLLMUL  = MUL_20 // PLL Multiplier
   #pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider
   #pragma config FPLLIDIV = DIV_2         // PLL Input Divider
   #pragma config FPLLODIV = DIV_1         // PLL Output Divider
   #pragma config FPBDIV   = DIV_1 // Peripheral Clock divisor
   #pragma config FWDTEN   = OFF // Watchdog Timer
   #pragma config WDTPS    = PS1 // Watchdog Timer Postscale
   #pragma config FCKSM    = CSDCMD // Clock Switching & Fail Safe Clock Monitor
   #pragma config OSCIOFNC = OFF           // CLKO Enable
   #pragma config POSCMOD  = HS // Primary Oscillator
   #pragma config IESO     = OFF // Internal/External Switch-over
   #pragma config FSOSCEN  = OFF // Secondary Oscillator Enable (KLO was off)
   #pragma config FNOSC    = PRIPLL // Oscillator Selection
   #pragma config CP       = OFF // Code Protect
   #pragma config BWP      = OFF // Boot Flash Write Protect
   #pragma config PWP      = OFF // Program Flash Write Protect
   #pragma config ICESEL   = ICS_PGx2 // ICE/ICD Comm Channel Select


   #pragma config DEBUG    = ON // Background Debugger Enable
   
#endif // OVERRIDE_CONFIG_BITS
/*
อธิบาย
การทำงานขอโค้ดตัวนี้คือการตั้งค่า config bit เริ่มต้นโดยใน code จะมีการ์ดรับสัญญาณนาฬิกาจาก crystal
เข้ามาและทำการเปิด   PPL เพื่อทำการทวีคูณสัญญาณ crystal ให้มีความถี่สูงขึ้นจากใน code จะใช้ความถี่ที่ 80 MHz
และมีการปิด config bit อื่นๆเพิ่มเติมสามารถหาอ่านได้จากใน datasheet


ตั้งค่าสัญญาณนาฬิกาจากภายใน
ในการตั้งค่าสัญญาณนาฬิกาจากภายในในตัวไมโครคอนโทรลเลอร์จะมีออกซิเลชั่นภายในอยู่แล้ว
เราสามารถนำมาใช้ได้เพียงแต่ว่าค่าความผิดพลาดจะสูงมากประมาณ 1 เปอร์เซ็นต์แต่ก็สามารถใช้ในงาน
ที่ไม่ต้องการความละเอียดสูงได้การตั้งค่าสัญญาณนาฬิกาจากภายในเขียนโค้ดตามนี้


// *****************************************************************************
// *****************************************************************************
// Section: Configuration bits
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
// *****************************************************************************
// *****************************************************************************
// Configuration Bit settings
#ifndef OVERRIDE_CONFIG_BITS


   #pragma config UPLLEN   = ON // USB PLL Enabled
   #pragma config FPLLMUL  = MUL_20 // PLL Multiplier
   #pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider
   #pragma config FPLLIDIV = DIV_2         // PLL Input Divider
   #pragma config FPLLODIV = DIV_1         // PLL Output Divider
   #pragma config FPBDIV   = DIV_1 // Peripheral Clock divisor
   #pragma config FWDTEN   = OFF // Watchdog Timer
   #pragma config WDTPS    = PS1 // Watchdog Timer Postscale
   #pragma config FCKSM    = CSDCMD // Clock Switching & Fail Safe Clock Monitor
   #pragma config OSCIOFNC = OFF           // CLKO Enable
   #pragma config POSCMOD  = HS // Primary Oscillator
   #pragma config IESO     = OFF // Internal/External Switch-over
   #pragma config FSOSCEN  = OFF // Secondary Oscillator Enable (KLO was off)
   #pragma config FNOSC    =FRCPLL // Internal Fast RC oscillator (8 MHz) w/ PLL
   #pragma config CP       = OFF // Code Protect
   #pragma config BWP      = OFF // Boot Flash Write Protect
   #pragma config PWP      = OFF // Program Flash Write Protect
   #pragma config ICESEL   = ICS_PGx2 // ICE/ICD Comm Channel Select
   #pragma config DEBUG    = ON // Background Debugger Enable
   
#endif // OVERRIDE_CONFIG_BITS
/*
อธิบาย
จากใน code เราจะเห็นว่ามีการเน้นคำตัวหนังสือสีแดงไว้นั่นหมายถึง
ตั้งค่าให้เป็นการเชื่อมต่อสัญญาณนาฬิกาจากภายในใช้ความถี่ที่ 8 MHz ส่วนตัวอื่นๆไม่ได้มีการเปลี่ยนแปลงอะไร

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การวัดแรงดันไฟฟ้าด้วย ADC ใน Arduino

การโปรแกรม Bootloader ATMEGA2560-16AU (เรื่องวุ้น)

การวัดแรงดันไฟฟ้า AC220V ด้วยหม้อแปลง12VAC / 200 mA