ไมโครคอนโทรลเลอร์
 เข้าสู่ระบบ - สมัครสมาชิก  

แบบของเดิมจากต้นแบบครับ

สวิตซ์เปิด-ปิด 4 ช่องควบคุมผ่าน
พอร์ตอนุกรม

ขอบเขต

  •  1 มีโปรแกรมสั่งงานบนวินโดว์ควบคุมการ เปิด-ปิดเครื่องใช้ไฟฟ้าได้ 4 ช่องอย่างอิสระ
  •  2 มีสวิตช์กดเพื่อควบคุมการ เปิด-ปิด ไฟฟ้าบนบอร์ดได้
  •  3 ควบคุมการ เปิด-ปิด โดยใช้โซลิสเตทรีเลย์ 4 ช่องได้อย่างอิสระ
  •  4 มีชุดจ่ายไฟบนบอร์ดทำให้สะดวกในการใช้งาน
  •  5 นำไปดัดแปลงใช้งานอื่นๆได้หลากหลาย

วงจรและผังงาน

ในส่วนของโปรแกรมได้แบ่งหน้าที่การทำงานเป็น 2 ส่วนด้วยกันคือ ส่วนควบคุมจากสวิตช์บนบอร์ด และส่วนของการควบคุม ผ่านพอร์ต RS-232 จากการทำงานของโปรแกรมเริ่มต้นเราจะทำการตรวจสอบค่าของสวิตซ์ BIT P3.4 ว่าเป็นลอจิก "0" หรือลอจิก "1" หากเป็นลอจิก "0" จะให้โปรแกรมกระโดดไปทำที่ตำแหน่ง KEY_BOARD หรือควบคุมที่บอร์ด หากเป็นลอจิก "1" จะเลือกทำที่ PC โดยควบคุมผ่านพอร์ต RS-232ตำแหน่ง KEY_BOARD เมื่อสวิตซ์ที่เลือกการควบคุมเป็นลอจิก "0" จะทำให้โปรแกรมจะตรวจสอบการกดสวิตช์ SW1-SW4
ว่าเป็นสวิตช์ตัวใด และจะทำการหน่วงเวลา แล้วตรวจสอบการกดคีย์ให้แน่ใจอีกครั้ง หลังจากนั้นจะตรวจสอบหาก เกิดการกดสวิตช์ หลายตัวพร้อมกัน โดยหากมีการกดสวิตช์พร้อมกันจะโปรแกรมจะกำหนดให้ไปตรวจสอบการกดใหม่ ถ้าถูกต้องแล้ว จะให้ทำการ กลับค่าที่แอดเดรสตำแหน่งบิต 04H-07H ของหน่วยความจำที่แอดเดรส 20H และหลังจากนั้นจะทำการเรียกโปรแกรมย่อยในการ สร้างสัญญาณกระพริบ 1 ครั้ง (Strobe) เพื่อให้ทราบว่ามีการกดคีย์แล้ว หากไม่มีการกดคียใดๆ เลยก็จะทำการตรวจสอบ การในเลือกการควบคุมอีก โดยตรวจสอบที่ P3.4 เหมือนเดิมหากเป็นลอจิก "1" จะกระโดดไปที่ลาเบล START ใหม่หากเป็นลอจิก "0" ก็จะวนกลับไปทำที่ตำแหน่ง KEY_BOARD ใหม่ส่วนของการการควบคุมผ่านพอร์ต RS-232 หากตรวจสอบที่ P3.4 เป็นลอจิก "1" ก็จะเรียกโปรแกรมส่วนของการติดต่อกับพอร์ตอนุกรมโดยกำหนดบอดเรดไว้ที่ 9600 bit/sec หลังจากนั้นจะทำการส่งข้อมูลจาก ส่วนของ หน่วยความจำโปรแกรมโดยใช้วิธีการแบบ Look up table และใช้การจบการส่งโดยตรวจสอบการส่งข้อมูลปิดท้ายด้วยค่า

"00H"
หลังจากนั้นโปรแกรมจะคอยรับข้อมูลแบบอนุกรมจากคอมพิวเตอร์ในส่วนของพอร์ต RS-232 หากมีการส่งข้อมูล จากคอมพิวเตอร์ ผ่านพอร์ต RS-232 ส่วนของโปรแกรมที่ไมโครคอนโทรลเลอร์จะทำการตรวจสอบว่าเป็นรหัสแอสกี้ค่าใด เพื่อจะทำการ เปรียบเทียบค่า ข้อมูลที่รับได้กับข้อมูลที่กำหนดไว้ก่อนหน้าแล้ว หากมีค่าตรงกับค่าใดๆ ก็จะทำการกลับค่าในตำแหน่งบิตแอดเดรส ให้ตรงกับทีกำหนดไว้ และในขณะที่มีการรอรับสัญญาณจากพอร์ตอนุกรมก็จะคอยตรวจสอบลอจิกที่บิต P3.4 ว่าเลือกการควบคุมที่ใด หากเป็นการ ควบคุมที่บอร์ดก็จะออกจากส่วนของโปรแกรมส่วนที่ 2 ไปส่วนที่ 1 ใหม่ 

อธิบายส่วนต่างๆของโปรแกรม 

LOAD1 BIT 07H ; กำหนดให้ LOAD1 เป็นชื่อของตำแหน่งหน่วยความจำที่ 20H.7
LOAD2 BIT 06H ; กำหนดให้ LOAD2 เป็นชื่อของตำแหน่งหน่วยความจำที่ 20H.6
LOAD3 BIT 05H ; กำหนดให้ LOAD3 เป็นชื่อของตำแหน่งหน่วยความจำที่ 20H.5
LOAD4 BIT 04H ; กำหนดให้ LOAD4 เป็นชื่อของตำแหน่งหน่วยความจำที่ 20H.4
STROBE BIT P3.7 ; กำหนดให้ สัญญาณ SIG_STROBE เป็นชื่อของตำแหน่งขาที่ต่อกับ PORT3.7
SW_CONT1 BIT P1.3 ; กำหนดให้ SW_CONT1 เป็นชื่อของตำแหน่งขาที่ต่อกับ PORT P1.3
SW_CONT2 BIT P1.2 ; กำหนดให้ SW_CONT2 เป็นชื่อของตำแหน่งขาที่ต่อกับ PORT P1.2
SW_CONT3 BIT P1.1 ;กำหนดให้ SW_CONT3 เป็นชื่อของตำแหน่งขาที่ต่อกับ PORT P1.1
SW_CONT4 BIT P1.0 ; กำหนดให้ SW_CONT4 เป็นชื่อของตำแหน่งขาที่ต่อกับ PORT P1.0
BOARD_PC BIT P3.4 ; กำหนดให้ BOARD_PC เป็นชื่อของตำแหน่งขาที่เลือกการควบคุมที่บอร์ดหรือที่ PCCR EQU 0DH ;Carriage return 

เป็นไดเร็กทีพที่ใช้กำหนดค่าแอดเดรสของตำแหน่งหน่วยความจำที่เข้าแบบบิต ให้กับสัญญาลักษณ์ ในกรณีที่มีค่าอยู่ที่หน่วยความจำตำแหน่งแอดเดรส 20H - 2FH (20H.0 - 2FH.7 หรือตำแหน่งของบิตที่ 00-FFH)

 

    การทำงานของTimer/Counter ในโหมด 2
ในการทำงานของโหมด 2 จะเป็นแบบโหลดค่าข้อมูลใหม่ในการเริ่มนับ หรือตั้งเวลาอัตโนมัติ (Auto reloads mode) แสดงการทำงานของ
Timer/counter ในโหมด 2 ในรูปที่ 2 การใช้งานในโหมดนี้จะแยกรีจิสเตอร์ไทม์เมอร์ออกเป็น 2 ตัว ซึ่งมีขนาดตัวละ 8 บิต การเก็บค่าเริ่มต้นการนับ
จะกำหนดให้อยู่ในข้อมูลของรีจิสเตอร์ THx ค่าของการนับสูงสุดคือ 256 ครั้ง (THx = 00) ในขณะที่ Timer ทำงานรีจิสเตอร์ TLx ก็จะทำหน้าท ี่เป็นตัวนับค่าข้อมูลซึ่งมีขนาด 8 บิต โดยนำค่าเริ่มต้นที่จะนับมาจากค่าข้อมูลในรีจิสเตอร์ THx ดังนั้นค่าข้อมูลที่อยู่ในรีจิสเตอร์ TLx จะถูกเพิ่มขึ้น ทุกแมชชีนไซเคิลจนมีค่าข้อมูลถึง FF เมื่อนับต่ออีก 1 แมชชีนไซเคิล ก็จะวนกลับไป 00 อีกครั้ง ซึ่งคือค่านับเกิน (Over flow) นั้นเองทำให้แฟลก TF0
(หรือTF1 ) ถูกเซตเป็นลอจิก 1 และหลังจากนั้นค่าข้อมูลเดิมที่อยู่ในรีจิสเตอร์ THx ก็จะถูกนำไปกำหนดให้กับข้อมูลใน รีจิสเตอร์ TLx ใหม่อีกครั้ง เพื่อเป็นค่าเริ่มต้นของการนับในรอบต่อไปอีก การทำงานจะเป็นเช่นนี้ตลอดไป (ที่เราเรียกว่า Auto reload ) ส่วนของแฟลก TFx จะถูกเคลียร์โดยอัตโนมัติเมื่อไมโครคอนโทรลเลอร์กระโดดไปทำโปรแกรมตอบสนอง อินเตอร์รัพต์ของ Timer ในแต่ละรอบ

โปรแกรมย่อยหน่วงเวลา

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

การทำงานของแต่ละคำสั่งจะใช้เวลาในการประมวลผลที่แตกต่างกันไปโดยนับหน่วยของรอบการทำงานหรือ
                แมชชีนไซเคิล (Machine Cycle) ซึ่งสามารถหาได้จาก T = MC x 12/f-xtal
                เมื่อ T : คือค่าเวลาที่ใช้ในการประมวลผลคำสั่ง
                MC : คือจำนวนแมชชีนไซเคิล
                f-tal : คือค่าความถี่ของคริสตอลที่ใช้
               12 : คือใน 1 แมชชีนไซเคิล CPU จะใช้ สัญญาณนาฬิกา 12 ลูก

ถ้าใช้คริสตอลค่า 11.0592 MHz ใน1 Machine Cycle ไมโครคอนโทรลเลอร์จะใช้คล็อก 12 ลูก และจะใช้เวลาเท่ากับ 1 x (12/11.0592x10(6) )=1.085 Usecตัวอย่างที่1 ให้หาค่าจำนวนแมชชีนไซเคิล (Machine Cycle) โดยแสดงเป็น Timing Diagram
MAIN: (1) SETB P1.5 จำนวนแมชชีนไซเคิล = 1 MC
             (2) CLR P1.5 จำนวนแมชชีนไซเคิล = 1 MC
             (3) SJMP MAIN จำนวนแมชชีนไซเคิล = 2 MC
                   END
                  โปรแกรมจะทำงานดังนี้
          MC = (1)+(2)+(3)+(1)+(2)+(3)+... เขียนเป็นTimeming Diagram จะได้ดังนี้ (ถ้า P1.5 มีค่าเริ่มต้นที่ LOW)

การหาค่าจำนวนแมชชีนไซเคิล (Machine Cycle) โดยหน่วงเวลาแบบ 2 ลูป

จะคิดจาก LOOP ในคูณ LOOPนอก แสดงได้ดังตัวอย่าง

DELAY: MOV R0, #02 ;จำนวนแมชชีนไซเคิล = 1
DELAY1: MOV R1, #03 ;จำนวนแมชชีนไซเคิล = 1 x R0
DJNZ R1, $ ;จำนวนแมชชีนไซเคิล = 2 x R1 x R0
DJNZ R0, DELAY1 ;จำนวนแมชชีนไซเคิล = 2 x R0
RET ;จำนวนแมชชีนไซเคิล = 2

MC = 1 + R0 + 2R0R1 + 2R0 + 2
MC = 3+ R0 +2R1R0 +2R0
MC = 3+R0+2R1R0
MC = 3+R0 ( 3 + 2R1 )
แทนค่า R0 ด้วย N1 และ R1 ด้วย N2 สามารถสรุปสูตรได้เป็น

MC = 3+N1 ( 3 + 2N2 )

 

 

 

 

จากการทำงานของวงจรตามรูปที่ 1 เมื่อป้อนไฟแรงดัน 220 VAC เข้าที่หม้อแปลง แล้วเลือกใช้งานขดทางออกขนาดแรงดัน 6 VAC โดยผ่านไดโอดบริจด์ เรกติไฟเออร์ DB1 และต่อเข้ากับ IC1 เบอร์ LM7805 จะทำให้มีแรงดันเอาต์พุตที่คงที่ค่า 5 โวลท์เพื่อป้อนเป็นไฟเลี้ยงให้กับวงจรโดยมี LED1 เป็นตัวแสดง สถานะการทำงาน คอนเดนเซอร์ C1,C2,C3 และ C4 ทำหน้าที่กรองกระแสให้เรียบ IC3 เป็นไอซีเบอร์ MAX 232 ซึ่งทำหน้าที่ปรับระดับสัญญาณ ให้เหมาะสม กับมาตฐาน ของ RS-232 ให้รับและส่งข้อมูลแบบอนุกรมโดยต่อร่วมกับ C8,C9,C10,C11 ใช้ในการเชื่อมต่อกับคอมพิวเตอร์ จะเชื่อมต่อที่ขา RxD และ TxDของพอร์ต COM1 หรือ COM2 ไอซี 2 เป็นไอซีไมโครคอนโทรลเลอร์เบอร์ AT89C1051 ของ ATMEL ได้มีการโปรแกรมข้อมูลที่เป็นขั้นตอน การทำงาน ไว้ภายในแล้ว ถ้าหากตัวไอซีไม่มีข้อมูลที่โปรแกรมไว้จะไม่สามารถทำงานได้
      C5, R7 และ SW5 จะเป็นส่วนของการรีเซต และ C6, C7, X1 เป็นการสร้างสัญญาณนาฬิกา ให้กับไอซี ซึ่งส่วนของIC2เอง ก็จะทำหน้าที่ควบคุม และสั่งงานในส่วนของโปรแกรมทั้งหมด โดยเริ่มจากการทำการตรวจสอบการเลือกส่วนของการ ควบคุมที่ได้จากบิตที่ P3.4โดยเลือกที่จัมเปอร์ JP1 ส่วน SW1,SW2 ,SW3,SW4 จะทำหน้าที่เลือกการ เปิด- ปิด ในขณะเลือกการควบคุม แต่ละช่องจากบอร์ด และที่ขา P3.7 จะต่อกับ LED2 โดยมี R6 เป็นตัวจำกัดกระแส เป็นการสร้างสัญญาณ Strobe เพื่อให้รู้ว่ามีการ กดสวิตช์ หรือส่งสัญญาณจากพอร์ตอนุกรม ในแต่ละครั้ง วงจรในส่วนของการตัดต่อกับ อุปกรณ์ไฟฟ้าภายนอกได้ทำเป็นโซลิสเตทรีเลย์ 4 ช่องโดยต่อ LED3 - LED6 จะเป็นส่วนของการแสดงสถานะและ ได้ต่ออนุกรมไว้กับ LED

จากการทำงานของวงจรตามรูปที่ 1 เมื่อป้อนไฟแรงดัน 220 VAC เข้าที่หม้อแปลง แล้วเลือกใช้งานขดทางออกขนาดแรงดัน 6 VAC โดยผ่านไดโอดบริจด์ เรกติไฟเออร์ DB1 และต่อเข้ากับ IC1 เบอร์ LM7805 จะทำให้มีแรงดันเอาต์พุตที่คงที่ค่า 5 โวลท์เพื่อป้อนเป็นไฟเลี้ยงให้กับวงจรโดยมี LED1 เป็นตัวแสดง สถานะการทำงาน คอนเดนเซอร์ C1,C2,C3 และ C4 ทำหน้าที่กรองกระแสให้เรียบ IC3 เป็นไอซีเบอร์ MAX 232 ซึ่งทำหน้าที่ปรับระดับสัญญาณ ให้เหมาะสม กับมาตฐาน ของ RS-232 ให้รับและส่งข้อมูลแบบอนุกรมโดยต่อร่วมกับ C8,C9,C10,C11 ใช้ในการเชื่อมต่อกับคอมพิวเตอร์ จะเชื่อมต่อที่ขา RxD และ TxDของพอร์ต COM1 หรือ COM2 ไอซี 2 เป็นไอซีไมโครคอนโทรลเลอร์เบอร์ AT89C1051 ของ ATMEL ได้มีการโปรแกรมข้อมูลที่เป็นขั้นตอน การทำงาน ไว้ภายในแล้ว ถ้าหากตัวไอซีไม่มีข้อมูลที่โปรแกรมไว้จะไม่สามารถทำงานได้
      C5, R7 และ SW5 จะเป็นส่วนของการรีเซต และ C6, C7, X1 เป็นการสร้างสัญญาณนาฬิกา ให้กับไอซี ซึ่งส่วนของIC2เอง ก็จะทำหน้าที่ควบคุม และสั่งงานในส่วนของโปรแกรมทั้งหมด โดยเริ่มจากการทำการตรวจสอบการเลือกส่วนของการ ควบคุมที่ได้จากบิตที่ P3.4โดยเลือกที่จัมเปอร์ JP1 ส่วน SW1,SW2 ,SW3,SW4 จะทำหน้าที่เลือกการ เปิด- ปิด ในขณะเลือกการควบคุม แต่ละช่องจากบอร์ด และที่ขา P3.7 จะต่อกับ LED2 โดยมี R6 เป็นตัวจำกัดกระแส เป็นการสร้างสัญญาณ Strobe เพื่อให้รู้ว่ามีการ กดสวิตช์ หรือส่งสัญญาณจากพอร์ตอนุกรม ในแต่ละครั้ง วงจรในส่วนของการตัดต่อกับ อุปกรณ์ไฟฟ้าภายนอกได้ทำเป็นโซลิสเตทรีเลย์ 4 ช่องโดยต่อ LED3 - LED6 จะเป็นส่วนของการแสดงสถานะและ ได้ต่ออนุกรมไว้กับ LED ภายในของIC4 - IC7 ซึ่งเป็นออปโตไอโซเลเตอร์แบบไดแอค เพื่อที่จะนำไปทริกให้ขาเกทของไตรแอค TR1-TR4 แล้วนำไปควบคุม อุปกรณ์ไฟฟ้าที่จุด L1-L4ได้ตามต้องการ

http://www.mediafire.com/?0f3vtmpuc5gkhkz  ลายปริ้นวงจรครับhttp://www.mediafire.com/download.php?3wdi3iq7g3tr122

โครงงานตัวใหม่กำลังมาเร็วๆนี้

Advertising Zone    Close

Online: 1 Visits: 35,873 Today: 11 PageView/Month: 1

ด้วยความปราถนาดีจาก "สยามทูเว็บดอทคอม" และเพื่อป้องกันการเปิดเว็บไซต์เพื่อหลอกลวงขายของ โปรดตรวจสอบร้านค้าให้แน่ใจก่อนตัดสินใจซื้อของทุกครั้งนะคะ    อ่านเพิ่มเติม ...