ประเภทของการสื่อสารแบบอนุกรมแบ่งตามลักษณะสัญญาณในการส่งแบ่งได้ 2 แบบ คือ
1.การสื่อสารแบบซิงโครนัส (Synchronous) เป็นการสื่อสารข้อมูลโดยใช้สัญญาณนาฬิกาในการควบคุมจังหวะของการรับส่งสัญญาณ
2.การสื่อสารแบบอะซิงโครนัส (Asynchronous) เป็นการสื่อสารที่ใช้สายข้อมูลเพียงตัวเดียว จะใช้รูปแบบของการส่งข้อมูล(Bit Pattern) เป็นตัวกำหนดว่าส่วนไหนเป็นส่วนเริ่มต้นข้อมูล ส่วนไหนเป็นตัวข้อมูล ส่วนไหนจะเป็นตัวตรวจสอบความถูกต้องของข้อมูล และส่วนไหนเป็นส่วนปิดท้ายของข้อมูล โดยต้องกำหนดให้สัญญาณนาฬิกาเท่ากันทั้งภาคส่งและภาครับ
คอนเน็กเตอร์ที่นิยมใช้จะเป็นชนิด D-Type แบบ 9 ขา และแบบ 25 ขา โดยจะติดตั้งอยู่หลังเครื่องคอมพิวเตอร์ ระดับแรงดันจะมีค่าระหว่าง -3 โวลต์ ถึง-15โวลต์คะ
การเชื่อมต่อ Seria Port ระหว่างไมโครคอนโทรเลอร์กับคอมพิวเตอร์
ในการพัฒนาโปรแกรมไมโครคอนโทรเลอร์ โดยเทคนิคส่วนตัวของเจ้าของบล๊อค เราจำเป็นอย่างยิ่งที่ต้องเห็นการทำงานแต่ละสเตปหรือเป็นการดีบัคโปรแกรมคะ ว่าตอนนี้ไมโครคอนโลรเลอร์ทำงานอยู่ในส่วนไหนตำแหน่งไหนของโค้ด ซึ่งวิธีง่ายสุดคือการสั่ง printf ออกมาทางหน้าจอคอมพิวเตอร์ เช่น
if(x == 1){
printf("Positon 1 >> x=1\n\r");
}else if(x==2){
printf("Positon 2 >> x=2\n\r");
}else{
printf("Positon 3 >> x=other\n\r");
}
การเชื่อมต่อ serial port กับไมโครคอนโทรเลอร์จำเป็นที่จะต้องมีไอซีที่ใช้ในการแปรงระดังสัญญาณระหว่างTTL Level (5 Volt) กับ RS232 Level (+/- 9 Volt) โดยเราจะใช้ไอซี MAX232 ในการเชื่อมต่อ
ในการทดลองนี้ เราจะใช้ PIC เบอร์ PIC18F2550 ซึ่งเป็นไมโครคอนโทรเลอร์ 28 pins คะ ซึ่งตัวเล็กกระทัดลัดแต่ประสิทธิภาพไม่เล็กเหมือนตัวนะคะ โดยคุณสมบัติของไอซีเบอร์ดังกล่างคือ
การต่อวงจรให้ต่อตามรูปข้างล่างคะ โดยสัญญาณ Tx และ Rx ของ UART ในตัวไมโครคอนโทรเลอร์ จะต่ออยู่ที่ขา C6 และ C7 เราจะให้ Crytal ความถี่ 20MHz เป็นสัญญาณนาฬิกาให้กับไมโครคอนโทรเลอร์คะ ส่วน C1 (0.1uF) ที่ต่อระหว่าง VDD กับ VSS ซึ่งต้องต่อไกล้ๆนะค่ะ ตัวนี้ค่อนข้างสำคัญคะ เพราะเจ้าของบล๊อคเองเคยเจอว่า ถ้าเราลืมต่อมัน บางทีมันเวิร์คบ้างไม่เวิร์คบ้าง อาจเป็นเพราะอาจจมี noise จากข้างนอก หรือจาก clock ของตัวมันเองมากวนคะ ซึ่งจะทำให้เราหลงทางได้ ^^
การเขียนโปรแกรมโดยใช้ CCS C ทำงานบน MPLAB IDE
ขึ้นตอนต่อไปเป็นขึ้นตอนที่สำคัญคะ คือการเขียนโปรแกรม ผู้เขียนจะใช้ CCS C คอมไพเลอร์ร่วมกับ MPLAB IDE ซึ่งภายในโค้ดผู้เขียนจะอธิบายโค้ดไปทีละบรรทัดเลยค่าาา ^^
Source code (ไฟล์.hex ดาวน์โหลดได้จากลิ้งนี่คะ)
#include <18f2550.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// *** Device Specification ***
#fuses HS // ใช้ Oscillator mode HS
#fuses NOWDT // ไม่ใช้ Watch dog
#fuses NOLVP // ไม่ใช้การโปรแกรมแบบ Low Voltage
#fuses NOPROTECT // ไม่ต้องทำการป้องกันการอ่านโค้ด
#use delay (clock=20M, crystal)
// ใช้ built-in function: delay_ms() & delay_us() โดยใช้ crytal ความถี่ 20MHz
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC,errors)
// กำหมดการเชื่อมต่อกับ serial port โดยกำหนดคอนฟิคต่างๆ และใช้ stream ชื่อว่า HOSTPC โดยจะใช้เป็นช่องทางการสั่ง fprintf
/*******************************************************************************
* Function prototypes
********************************************************************************/
void headle(void);
/***********************************************************************
* FUNCTION: headle
* DESCRIPTION: Show headle title though rs232
* PARAMETERS: nothing
* RETURNED: nothing
***********************************************************************/
void headle(void){
fprintf(HOSTPC,"\n\r**********************************************************************************\n\r");
fprintf(HOSTPC,"Project : RS232 print out \n\r");
fprintf(HOSTPC,"Purpose : Test serial port \n\r");
fprintf(HOSTPC,"Auther : JUMP start innovation\n\r");
fprintf(HOSTPC,"Email : jumpstartinnovation@gmail.com\n\r");
fprintf(HOSTPC,"Complier : CCS.PCWH.v4.134\n\r");
fprintf(HOSTPC,"Hardware : PIC18F2550\n\r");
fprintf(HOSTPC,"**********************************************************************************\n\r");
}
/***********************************************************************
* FUNCTION: main
* DESCRIPTION: main function
* PARAMETERS: nothing
* RETURNED: nothing
***********************************************************************/
void main(void){
int i; // ประกาศตัวแปล i เป็นชนิด integer
headle(); //แรกฟังก์ชั่น headle เพื่อแสดงข้อความออกทาง serial port
fprintf(HOSTPC,"Hello World\n\r"); //แสดงข้อความ Hello World ออกทางหน้าจอ
// ทำการสั่งพิมพ์ค่า i ออกทางหน้าจอ โดยค่า i จะแสดงค่าตั้งแต่ 0 จนถึง 9 แล้ววนกลับมาใหม่
for(i = 0; i < 10; i++){
fprintf(HOSTPC,"i = %d\n\r",i);
}
}
ทดลอง Simulation โดยใช้ Proteus Software
ต่อวงจรตามรูปข้างล่างเลยคะ โดยกำหนด clock ให้กับไมโครคอนโทรเลอร์เป็นค่า 20MHz แต่ถ้าจำไม่ได้ว่าทำการ config มันยังไงให้กลับไปดูบนความก่อนหน้านี้คะ (link here) ส่วนไฟล์ไบนาลี่ไปเอามาได้จากลิ้งนี้คะ (link here)
เมื่อต่อเสร็จแล้วลองรันดูเลยค่าาาา .... ^^
บทความนี้น่าจะเป็นพื้นฐานที่สำคัญในการพัฒนาไมโครคอนโทรเลอร์นะคะ .... ขอบคุณที่เข้ามาติดตามค่าาาา ^^
ไม่มีความคิดเห็น:
แสดงความคิดเห็น