ในบทความก่อนหน้านี้ได้แนะนำบอร์ดที่ใช้ในแล็บวิชาสถาปัตยกรรมคอมพิวเตอร์และซอฟต์แวร์ที่ใช้ในการฝึกปฎิบัติไปแล้ว ครั้งนี้เป็นเนื้อหาเกี่ยวกับคุณสมบัติและผังการทำงานภายในชิพ PIC18F458 จากเอกสารของบริษัท Microchip เพื่อเป็นพื้นฐานในการเขียนโปรแกรมใช้งานความสามารถของไมโครคอนโทรลเลอร์ต่อไปในบทความถัดไป (ส่วนรายละเอียดของ PIC16F877 สามารถอ่านได้จากบทความนี้ครับ)
คุณสมบัติของไมโครคอนโทรลเลอร์
PIC18F458 เป็นไมโครคอนโทรลเลอร์ในกลุ่มประสิทธิภาพสูงและมีปริมาณหน่วยความจำแฟลชเยอะกว่าชิพตัวอื่นในตระกูล 8 บิต ดังรายละเอียดแต่ละส่วนดังนี้
หน่วยประมวลผลแบบ RISC
- หน่วยความจำเก็บโปรแกรมสามารถมีขนาดสูงสุดได้ที่ 2 MB
- หน่วยความจำเก็บข้อมูลสามารถมีปริมาณสูงสุดได้ 4KB
- ทำงานได้สูงสุดที่ 10 MIPS หรือ 10 ล้านคำสั่งต่อวินาที
- รองรับสัญญาณนาฬิกาได้สูงสุดที่ 40MHz โดยใช้ตัวให้สัญญาณ 4MHz ถึง 10MHz เป็นสัญญาณนำเข้าผ่านตัววงจร PLL (Pulse Lock Loop)
- ชุดคำสั่งมีขนาด 16 บิต และอ้างอิงตำแหน่งข้อมูลได้ 8 บิต
- รองรับการขัดจังหวะ (Interrupt) ได้หลายระดับ แบบสามารถกำหนดลำดับความสำคัญได้
- มีวงจรการคูณข้อมูล 8 บิต คูณกับข้อมูล 8 บิตในวงรอบการทำงานเพียงครั้งเดียว
คุณสมบัติการเชื่อมต่ออุปกรณ์รอบข้าง
- ทำ Current Sink ได้ 25mA
- ทำ Current Source ได้ 25mA
- มีขาสำหรับรองรับการขัดจังหวะจากภายนอกได้ 3 ขา
- โมดูล Timer0 ทำงานเป็นตัวนับหรือตัวตั้งเวลาแบบ 8/16บิต พร้อมทั้งสามารถตั้งค่า prescaler ได้ที่ความละเอียด 8 บิต
- โมดูล Timer1 และ Timer3 ทำงานเป็นตัวนับหรือตัวตั้งเวลาแบบ 16 บิต
- โมดูล Timer2 ทำงานเป็นตัวตั้งเวลาหรือตัวนับแบบ 8 บิตด้วยเรจิสเตอร์ขนาด 8 บิต และใช้เป็นตัวหลักของการทำ PWM (Pulse Width Modulate)
- รองรับการใช้ตัวให้สัญญาณนาฬิกาที่ 2 สำหรับ Timer1 และ Timer3 แยกจากตัวสร้างสัญญาณยาฬิกาหลักที่ส่งให้กับไมโครคอนโทรลเลอร์
- มีโมดูล CCP (Capture/Compare/PWM) สำหรับจับสัญญาณ เปรียบเทียบสัญญาณ และส่งพัลซ์ที่กำหนดความกว้างได้
- การตรวจจับสัญญาณนำเข้าทำงานแบบ 16 บิต โดยใช้เวลา 6.25ns ในการทำงาน
- การเปรียบเทียบสามารถเปรียบเทียบสัญญาณแบบ 16 บิตด้วยความเร็ว 100ns
- การนำออกสัญญาณ PWM กำหนดให้มีค่าของความละเอียดตั้งแต่ 1 ถึง 10 บิต โดยที่ 8 บิตทำงานได้ได้ความถี่ 156kHz และ 10 บิตที่ความถี่ 39kHz โดยประมาณ
- รองรับการควบคุมมอเตอร์ด้วยการนำออกสัญญาณ PWM ในแบบ 1, 2 หรือ 4 ช่องสัญญาณในเวลาเดียวกัน
- กำหนดขั้ว (polarity) ของ PWM ได้
- ตั้งเวลาการสิ้นสุดการทำงานของ PWM ได้
- รองรับ SPI แบบ 3 สายสัญญาณ และ I2C ในโหมด Master และ Slave
- ใช้งาน USART ในแบบการขัดจังหวะได้
การทำงานกับสัญญาณแอนาล็อก
- มีวงจรแปลงสัญญาณแอนาล็อกเป็นดิจิทัลหรือ ADC (Analog-to-Digital) ที่มีความละเอียดของการแปลงค่าเป็น 10 บิต จำนวน 8 ช่องสัญญาณ พร้อมทั้งรองรับการแปลงค่าทั้งที่อยู่ในโหมดประหยัดพลังงาน และใช้พร้อมกันได้ทั้ง 8 ขา
- มีโมดูลเปรียบเทียบค่าแอนาล็อกที่โปรแกรมการทำงานแบบมัลติเพล็กได้
- มีโมดูลกำหนดแรงดันอ้างอิง
- มีโมดูลตรวจสอบแรงดันต่ำ (LVD หรือ Low-Voltage Detection) ในแบบการขัดจังหวะ
- สามารถสั่งให้ทำการรีเซ็ตตัวเองเมื่อเกิด LVD หรือเรียกว่าการทำ Brown-out Reset (BOR)
บัส CAN
คุณสมบัติพิเศษของไมโครคอนโทรลเลอร์
- รองรับการรีเซ็ตตัวเองเมื่อมีแรงดันไฟฟ้ากระแสตรงจ่ายเข้าชิพ หรือ POR (Power-on-Reset)
- รองรับการตั้งเวลาทำงานหลังเกิด POR หรือ BOR ที่เรียกว่าการทำ Power-up Timer (PWRT)
- รองรับการจับเวลาเริ่มต้นของตัวให้สัญญาณนาฬิกาเพื่อทำการรีเซ็ตตัวเองจนกว่าสัญญาณณาฬิกาจะทำงานเสถียรซึ่งเรียกว่าการทำ Oscillator Start-up Timer (OST)
- มี WDT (Watchdog timer) สำหรับเป็นตัวตั้งเวลาสำหรับรีเซ็ตตัวเองถ้าโปรแกรมที่เขียนไม่รายงานการทำงานกลับมาในระยะเวลาที่กำหนด เพื่อป้องกันการเกิดปัญหาเกี่ยวกับโปรแกรมทำงานผิดพลาดหรือแฮงค์ (Hang) อันอาจจะส่งผลไม่ดีต่อการทำงานของระบบ
- สามารถป้องกันโค้ดของโปรแกรมในชิพได้
- มีโหมดประหยัดพลังงาน
- รองรับการทำ PPL
- รองรับการใช้สัญญาณนาฬิกาแหล่งที่ 2 ที่เป็นความถี่ 32 kHz
- สามารถโปรแกรมได้ในตัวเองผ่านทาง ICSP (In-Circuit Serial Programming) ด้วยขา 2 ขา
เทคโนโลยีหน่วยความจำแฟลช
- ใช้หน่วยความจำแฟลชความเร็วสูงแบบประหยัดพลังงาน
- ทำงานที่แรงดัน 2.0-5.5V
- รองรับการทำงานในช่วงอุณหภูมิตามมาตรฐานอุตสาหกรรม
สรุปคุณสมบัติของ PIC18F458 ได้ดังนี้
- หน่วยความจำโปรแกรม (Program Memory)
- Flash : 32KB
- จำนวนคำสั่งที่เก็บได้ : 16384
- หน่วยความจำข้อมูล (Data memory)
- SRAM: 1536 ไบต์
- EEPROM : 256 ไบต์
- จำนวนขา I/O: 33 ขา
- จำนวนขาสัญญาณของ ADC : 8 ขา
- จำนวนขานำเข้าสำหรับทำงานของวงจรเปรียบเทียบสัญญาณ : 2 ขา
- CCP/ECPP (PWM): 1/1
- MSSP
- รองรับ SPI
- รองรับ I2C
- รองรับ USART
- Timer
- 8 บิต จำนวน 1 ตัว
- 16 บิต จำนวน 3 ตัว
การจัดวางขาของตัวถังแบบ PDIP ของไมโครคอนโทรลเลอร์ PIC18F458 ในภาพที่ 1 เป็นดังภาพที่ 2
จากภาพที่ 2 และ 3 จะพบว่าไมโครคอนโทรลเลอร์ PIC18F458 มีขาของตัวถังจำนวน 40 ขา แบ่งเป็นขาสำหรับจ่ายไฟเข้า (VDD/VSS) ขาสัญญาณณาฬิกา (OSC1/OSC2) และขาสำหรับเชื่อมต่อกับพอร์ตซึ่งทำหน้าที่แตกต่างกันไป
การทำงานส่วนต่างๆ
ภายในไมโครคอนโทรลเลอร์มักเป็นการนำการทำงานหลากหลายอย่างมารวมกันภายใต้ชิพเพียงตัวเดียว เช่นเดียวกันกับตัวไมโครคอนโทรลเลอร์ PIC18F458 เองมีส่วนประกอบภายในตามภาพที่ 3
จากภาพที่ 3 จะพบว่าการทำงานภายในของชิพประกอบไปด้วยส่วนของวงจรต่าง ๆ ตามคุณสมบัติที่ได้กบ่าวถึงในช่วงต้นบทความ และเมื่อพิจารณาในรายละเอียดจะเห็นถึงความสัมพันธ์ของแต่ละส่วนว่าเชื่อมต่อกันอย่างไร โดยหัวลูกศรของเส้นต่าง ๆ เป็นตัวระบุทิศทางการรับ/ส่งข้อมูลของแต่ละส่วน จึงขอกล่าวถึงแบบสรุปดังนี้
- Data Bus หรือบัสข้อมูลมีขนาด 8 บิตตามสถาปัยกรรมของชิพเชื่อโยงเข้ากันกับทุกโมดูลภายในชิพที่มีการรับ/ส่งข้อมูลระหว่างกัน
- ขนาดของ Address Bus หรือบัสอ้างอิงตำแหน่งจะมีขนาด 21 บิต
- ข้อมูลที่มีการรับส่งมีทั้งแบบ 8 บิตและ 16 บิต (ดูจาก Data Latch)
- พอร์ตใช้งานมีดังนี้
- PORTA มีขา RA0, RA1, RA2, RA3, RA4, RA5, OSC2
- PORTB มีขา RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7
- PORTC มีขา RC0, RC1, RC2, RC3, RC4, RC5, RC6, RC7
- PORTD มีขา RD0, RD1, RD2, RD3, RD4, RD5, RD6, RD7
- PORTE มีขา RE0, RE1, RE2
- การประมวลผลของหน่วย ALU กระทำแบบ 8 บิต และมีภาคคำนวณข้อมูล 8×8 หรือ 8 บิต คูณ กับ 8 บิตในการทำงานครั้งเดียว
ในภาคของการต่อ OSC หรือสัญญาณนาฬิกาให้กับไมโครคอนโทรลเลอร์จะต้องต่อคริสตัลและตัวเก็บประจุตามวงจรในภาพที่ 4 และตารางในภาพที่ 5 และ 6
IC จะใช้สัญญาณนาฬิกา โดยมองเป็นลักษณะของ วงรอบ (Cycle) ซึ่งระบุเอาไว้ว่า 1 คำสั่งนั้นจะประกอบไปด้วย 1-2 วงรอบ โดยแต่ละวงรอบนั้นจะแบ่งเป็น 4 ส่วน คือ Q1, Q2, Q3 และ Q4 ด้วยเหตุนี้ ความเร็วโดยรวมของ PIC จึงเท่ากับ ค่าความถี่ของสัญญาณนาฬิกา หาร ด้วย 4 แต่ในรุ่น PIC18F458 มีวงจร PLL ทำให้สามารถเร่งความเร็วสัญญาณนาฬิาสูงสุดที่ 4 เท่า ทำให้ใช้คริวตัลความถี่เดียวกับไมโครคอนโทรลเลอร์ PIC รุ่นที่ต่ำกว่าแต่สามารถเร่งการทำงานได้เร็วกว่าได้สูงสุด 4 เท่า หรือในทางกลับกัน หมายความว่า ชิพในตระกูลนี้ทำงาน 1 วงรอบการทำงานภายใน 1 สัญญาณนาฬิกา (ยกเว้นคำสั่งกระโดดและการเปรียบเทียบแล้วกระโดด)
การต่อใช้งานขอใช้ภาพเดิมจาก PIC16F877 ที่เคยใช้งานดังภาพที่ 7 นั่นหมายความว่า ด้วยไมโครคอนโทรลเลอร์ 1 ตัว แหล่งจ่ายไฟ คริสตัล ตัวต้านทาน ตัวเก้บประจุ และสวิตช์ดังภาพที่ 7 ก็ทำให้สามารถใช้งานชิพตัวนี้ได้
สรุป
จากบทความนี้ผู้อ่านได้เรียนรู้เรื่องรายละเอียดของส่วนต่าง ๆ ของไมโครคอนโทรลเลอร์ PIC18F458 แบบละเอียดขึ้น พร้อมทั้งจะพบว่าการทำงานของชิพตระกูลนี้มีความเร็วในระดับ 1 คำสั่งต่อ 1 สัญญาณนาฬิกาซึ่งเป้นความเร็วที่สูง นอกจากนี้ยังมีโมดูล ADC ที่ละเอียดระดับ 10 บิต และ PWM ที่ตั้งค่าให้ทำงานได้พร้อมกันแบบ 2 หรือ 4 ขาทำให้สามารถสั่งในมอเตอร์หมุนทำงานได้พร้อม ๆ กันทั้ง 2 และ 4 ตัวเลยทีเดียวอันทำให้ลดความหน่วงเวลาของการสั่งเปิดสั่งงานทีละขาจึงทำให้การทำงานมีความแม่นยำยิ่งขึ้น และที่สำคัญ พวกเราหวังว่าความเข้าใจต่อส่วนต่าง ๆ หรือการรู้จักส่วนต่าง ๆ ทำหน้าที่อะไรจากบทความนี้จะเป็นพื้นฐานสำหรับการเขียนโปรแกรมสั่งงานในภาคส่วนต่าง ๆ ของไมโครคอนโทรลเลอร์ตัวนี้ต่อไปในบทความถัด ๆ ไป สุดท้าย ขอให้สนุกกับการเขียนโปรแกรมครับ
(C) 2022, โดย อ.อนุชาติ บุญมาก, อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2022-01-24, 2022-02-28