วันพฤหัสบดีที่ 7 พฤศจิกายน พ.ศ. 2556

การสร้างอักษรที่ LCD

การสร้างอักษรที่ LCD 
โดย สมชาย เบียนสูงเนิน
               เราสามารถสร้างตัวอักษรหรือรูปแบบเก็บไว้ในโมดูลของ LCD ได้ 8 รูปแบบ  โดยส่งเก็บไว้ที่หน่วยความจำ CGRAM          เรียกแสดงผลผ่าน Address ของ DDRAM ที่ 0x00 ถึง 0x07 การบันทึกรูปแบบลงใน CGRAM จะต้องเริ่มจากการสร้างรหัสของรูปแบบ  โดยที่ 1 รูปแบบ จะต้องใช้ตัวแปรในการเก็บรหัสในแต่ละแถวจำนวน 8 ตัวแปร ส่วนใหญ่ต้องกำหนดเป็นแบบอะเรย์  หากต้องการสร้างตัว ก็จะต้องกำหนดค่าของตัวแปรเป็น  char pattern1[8] ={0x01,0x01,0x1F,0x01,0x1F,0x11,0x19,0x00}  ข้อมูลตัวสุดท้าย 0x00 เป็นแถวของการแสดง Cursor ไม่สามารถสร้างรูปแบบที่แถวนี้ได้จึงกำหนดค่าเป็น 0x00 โดยการกำหนดค่ารูปแบบขึ้นอยู่กับจำนวน Dot ของ LCD ด้วย ในรูปที่ 1 เป็นขนาด 5x7 dot


รูปที่ 1 รหัสสำหรับสร้างรูปแบบเป็นตัว

เมื่อได้รหัสของรูปแบบที่สร้างแล้ว แล้วขั้นต่อไปก็จะทำการบันทึกรหัสไปยังหน่วยความจำของ CGRAM โดยต้องส่งคำสั่งเพื่อระบุตำแหน่งที่จะจัดเก็บรหัสของ CGRAM ว่าต้องการเก็บที่ตำแหน่งใด โดยมีให้เลือก 8 ตำแหน่ง โดยรหัสคำสั่งรวมกับรหัสตำแหน่งของ CGRAM ขนาด 8 bit แสดงได้ดังนี้

- รูปแบบที่ 1 ( แสดงผลเมื่อส่งรหัส 0x00 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x40  
- รูปแบบที่ 2 ( แสดงผลเมื่อส่งรหัส 0x01 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x48  
- รูปแบบที่ 3 ( แสดงผลเมื่อส่งรหัส 0x02 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x50  
- รูปแบบที่ 4 ( แสดงผลเมื่อส่งรหัส 0x03 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x58  
- รูปแบบที่ 5 ( แสดงผลเมื่อส่งรหัส 0x04 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x60  
- รูปแบบที่ 6 ( แสดงผลเมื่อส่งรหัส 0x05 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x68  
- รูปแบบที่ 7 ( แสดงผลเมื่อส่งรหัส 0x06 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x70  
- รูปแบบที่ 8 ( แสดงผลเมื่อส่งรหัส 0x07 ไปที่ DDRAM) กำหนดตำแหน่งเริ่มของ CGRAM ที่ 0x78  

            ถ้าต้องการให้ แสดงเมื่อส่งรหัส 0x02 ก็ต้อง ส่งรหัสคำสั่ง 0x50 ไปให้หน่วยประมวลผลของ LCD ทราบ จากนั้นก็ส่งรหัสข้อมูลของตัว ทั้ง 8 แถวตามไป แสดงการเขียนคำสั่ง โดยอ้างอิงชื่อฟังก์ชันที่ใช้ในการส่งแสดงผลที่ LCD ในตัวอย่างโปรแกรมที่ 1
         char patternSO[8]={0x01,0x01,0x1F,0x01,0x1F,0x11,0x19,0x00};//
         LCD_RS=0;                                // ส่งสัญญาณว่าเป็นคำสั่ง
         lcd_sendbyte(0x50);                     // ส่งคำสั่งเพื่อระบุตำแหน่งที่จะจัดเก็บรหัสของ CGRAM รหัส 0x50  แสดงผลเมื่อส่งรหัส 0x02
         LCD_RS=1; ;                              // ส่งสัญญาณว่าเป็นข้อมูล
         lcd_sendbyte(patternSO[0]);                 // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 1
         lcd_sendbyte(patternSO[1]);                 // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 2
            lcd_sendbyte(patternSO[2]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 3
            lcd_sendbyte(patternSO[3]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 4
            lcd_sendbyte(patternSO[4]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 5
            lcd_sendbyte(patternSO[5]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 6
            lcd_sendbyte(patternSO[6]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 7
            lcd_sendbyte(patternSO[7]);                  // ส่งข้อมูลที่เป็นรหัสรูปแบบแถวที่ 8
   
หรืออาจใช้ for() ช่วย ในการส่งข้อมูลทั้ง 8 แถว เพราะประกาศตัวแปรแบบอะเรย์อยู่แล้ว แสดงได้ดังนี้
                for(i=0;i<8;i++)
                {              lcd_sendbyte(patternSO [i]);   // ส่งข้อมูลที่เป็นรหัสรูปแบบตัวที่ i
                }
               
สุดท้ายการเรียกให้แสดงผลก็ส่งรหัสที่เป็นตัวแทนของรูปแบบไปที่ LCD เช่นเดียวกับอักษรอื่นๆที่ถูกบันทึกใน CGROM เช่น ต้องการให้แสดงอักษร Z ก็ต้องส่งรหัส 0x5C ดังนั้นรหัสที่เป็นตัวแทนรูปแบบตัวอักษร  ก็คือ 0x02 นั้นเอง เช่น lcd_sendbyte(0x02)

ตัวอย่างโปรแกรม ใช้ไมโครคอนโทรลเลอร์ PIC16F887
โจทย์  ต่อวงจรและเขียนโปรแกรมเพื่อให้ LCD ขนาด 16x2 แสดงข้อความ ไฟฟ้า 2555  ที่บรรทัดแรก เริ่มตำแหน่งที่ 2 และ ข้อความ Electrical 2012บรรทัดสอง เริ่มตำแหน่งที่ 1
            ตัวอักษรที่ไม่มีในหน่วยความจำของ LCD คือคำว่า ไฟฟ้า ดังนั้นจะต้องสร้างตัวอักษรเอง 4 รูปแบบ โดยจะเก็บที่ในตำแหน่ง  0x00 ถึง 0x03



รูปที่ 2 การแสดงผลของรูปแบบที่สร้างขึ้นในหน่วยความจำของ LCD


โปรแกรม  แสดงรูปแบบที่สร้างขึ้น 
#include <pic.h>                                          // Include header file for MCU
#include "LCD16F887.h"                            // Include Library for LCD display

#define _XTAL_FREQ       20000000 // Define Frequency 20.0 MHz for __delay_ms
__CONFIG(FOSC_HS & WDTE_OFF & LVP_OFF);   

//----------------------------------------------------------Main Program---------------------------------------------------//
void main(void)
{      char PattI[8]={0x16,0x0A,0x02,0x02,0x02,0x02,0x03,0x00};     //
        char PattPho[8]={0x01,0x01,0x19,0x09,0x11,0x15,0x1B,0x00};            //
        char PattPho2[8]={0x0A,0x05,0x11,0x09,0x11,0x15,0x1B,0x00};             // ฟ้
        char PattR[8] ={0x00,0x00,0x06,0x09,0x01,0x01,0x01,0x00};    //
        int i;

           

        lcd_init();                                                    //Call initial Function of  LCD library
       
        LCD_RS=0;  lcd_sendbyte(0x40);             // Send Conmand Set Pattern Start at 0x00
        LCD_RS=1;                                               // Send Data of Pattern
        for(i=0;i<8;i++)
        {      lcd_sendbyte(PattI[i]);                        //
        }
      // ในกรณีที่บันทึกข้อมูลในตำแหน่งที่ต่อเนื่องกันไม่จำเป็นต้องส่งคำสั่งระบุตำแหน่งใหม่
        // เพราะตำแหน่งในหน่วยความจำของ LCD จะเลื่อนให้ครั้งละ 1 ตำแหน่ง แบบอัตโนมัติ 
        // แต่จำเป็นต้องส่งข้อมูลให้ครบ 8 ครั้ง สำหรับ 1 รูปแบบ
        for(i=0;i<8;i++)
        {      lcd_sendbyte(PattPho[i]);                  //
        }

        for(i=0;i<8;i++)
        {      lcd_sendbyte(PattPho2[i]);                // ฟ้
        }

        for(i=0;i<8;i++)
        {      lcd_sendbyte(PattR [i]);                     //
        }
       
        LCD_RS=0;   lcd_sendbyte(0x81);            // Send Conmand Line 1 Location 2
        LCD_RS=1;                                              // Send Data
        lcd_sendbyte(0x00);                                   //
      // ในกรณีที่แสดงผลในตำแหน่งที่ต่อเนื่องกันไม่จำเป็นต้องส่งคำสั่งระบุตำแหน่งใหม่
        // เพราะตำแหน่งในหน่วยความจำของ LCD จะเลื่อนให้ครั้งละ 1 ตำแหน่ง แบบอัตโนมัติ
        lcd_sendbyte(0x01);                                  //
        lcd_sendbyte(0x02);                                  // ฟ้
        lcd_sendbyte(0x03);                                  //

        lcd_puts (0x85, " 2555");                      //Send text 2555 start address 0x85 (6nd address of Line 1)
        lcd_puts (0xC0, "Electrical 2012");       //Send text Electrical 2012 start address 0xC0 of Line 2
        while(1);

วันอาทิตย์ที่ 23 ตุลาคม พ.ศ. 2554

การวัดค่าแรงดันไฟฟ้ากระแสตรง

โดย สมชาย เบียนสูงเนิน          
              วัตถุประสงค์ของโปรแกรมนี้เพื่อให้เกิดความเข้าใจการทำงานของโมดูล ADC ที่อยู่ในตัวไมโครคอนโทรลเลอร์ เพราะโมดุล ADC ถูกนำไปประยุกต์ใช้ในหลากหลายงาน ขบวนการแปลงแอนะล็อกเป็นดิจิตอลจะเริ่มจากการสุ่มค่าแรงดันมาเก็บที่ส่วนของวงจร S/H จากนั้นนำแรงดันที่ได้ผ่านขบวนการแปลงของส่วนวงจร ADC แล้วจัดเก็บข้อมูลดิจิตอลตามรูปแบบที่กำหนด สรุปการตั้งค่าโมดุล ADC ได้ดังนี้ (รีจีสเตอร์ที่ระบุเป็นของไมโครคอนโทรลเลอร์ dsPIC30Fxxxx)
            1) เลือกขาพอร์ตให้ทำงานเป็นอินพุตแบบแอนะล็อก (ADPCFG)
            2) เลือกรูปแบบผลลัพธ์ (ADCON1bits.FORM)
            3) เลือกแหล่งกระตุ้นการเริ่มแปลงสัญญาณ (ADCON1bits.SSRC)
            4) เลือกรูปแบบการจัดลำดับการสุ่มของวงจร S/H  (ADCON1bits.SIMSAM)
            5) กำหนดเงื่อนไขการเริ่มสุ่มสัญญาณ  (ADCON1bits.ASAM)
            6) กำหนดจำนวนช่องของวงจร S/H (ADCON2bits.CHPS)
            7) กำหนดจำนวนการแปลงข้อมูลต่อการอินเตอร์รัฟ (ADCON2bits.SMPI)
            8) กำหนดเวลาในการแปลงข้อมูล (ADCON3bits.ADCS)
            9) กำหนดจำนวนอินพุตที่ต้องทำงานร่วมกับ S/H (ADPCFG)
            ข้อมูลการแปลงเก็บอยู่ที่ตัวพักข้อมูล ADCBUF มี 16 ตัว คือ ADCBUF0 ถึง ADCBUFF ซึ่งนำมาใช้ประโยชน์ในกรณีที่มีการอ่านค่าแรงดันหลาย ๆ ค่า โดยกำหนดจากการอินเตอร์รัฟ (ข้อ 7) สำหรับย้ายข้อมูลไปที่ตัวแปรสำหรับการคำนวณต่อไป สำหรับตัวอย่างโปรแกรมเป็นการอ่านแรงดัน 2 ช่อง ๆ ละ 5 ค่า โดยแรงดันทั้งสองช่องถูกสุ่มที่เวลาเดียวกันและมีระยะห่างการสุ่มเท่ากันตามรูปที่ 1 จากนั้นนำทั้ง 5 ค่าของแต่ละช่องสัญญาณหาค่าเฉลี่ย แล้วแสดงค่าแรงดันผ่านจอแสดงผล LCD ตามวงจรรูปที่ 2

รูปที่  1 เงื่อนไขการอ่านข้อมูลแรงดัน
รูปที่ 2 วงจรวัดค่าแรงดันไฟฟ้ากระแสตรง
     
            การออกแบบโปรแกรมสำหรับวัดค่าแรงดันไฟฟ้ากระแสตรงจะอ่านค่ามาทั้งหมด 5 ค่า โดยแต่ละค่าให้ห่างกัน 5 ms ดังนั้นต้องคำนวณหาค่า PR ของ Timer3 สำหรับไปกระตุ้นการทำงานของโมดูล ADC โดยทั่วไปโมดูล Timer จะมีความสามารถในการลดความถี่สำหรับ Timer หรือเรียกว่าการปรับอัตราปรีสเกลเลอร์ (Clock Prescale) เมื่อมีการปรับอัตราปรีสเกลเลอร์ สมการสำหรับคำนวณหาค่า PR คือ  
ปรับอัตราปรีสเกลเลอร์ท่ากับ 1 ความถี่หลักของระบบ(Fosc)มีค่า 4 MHz  และ PLL=8 เมื่อต้องการเวลา 0.005 วินาที คำนวณหาค่า PR ได้ดังนี้
รูปที่ 3 การทดสอบวงจรวัดค่าแรงดันไฟฟ้ากระแสตรง 2 ช่อง

วันพุธที่ 2 มีนาคม พ.ศ. 2554

การตรวจสอบลำดับเฟสโดยใช้ Input Capture

สมชาย เบียนสูงเนิน
ภาควิชาวิศวกรรมไฟฟ้า คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเทคโนโลยีราชมงคลธัญบุรี

          วัตถุประสงค์ของบทความนี้เพื่อให้เกิดความเข้าใจการทำงานของโมดูลตรวจจับสัญญาณอินพุต (Input Capture, IC) ซึ่งไมโครคอนโทรลเลอร์สมัยไหม่ต้องมี การใช้งานโมดูลตรวจจับสัญญาณอินพุตจะใช้ร่วมกับโมดูลจับเวลา (Timer) หลักการทำงานคือเมื่อไมโครคอนโทรลเลอร์ตรวจพบขอบขาของสัญญาณตรงตามที่กำหนด จะนำค่าเวลาของ Timer ณ ตำแหน่งที่ตรวจพบขอบขาของสัญญาณเข้าเก็บที่รีจีสเตอร์ของโมดูลตรวจจับสัญญาณอินพุตตัวนั้นๆ รูปที่ 3.27 กำหนดให้ตรวจจับสัญญาณขอบขาขึ้น รีจีสเตอร์ของโมดูล IC0 เก็บค่า 00:00:30 รีจีสเตอร์ของโมดูล IC1 ก็จะเก็บค่า 00:00:10 และรีจีสเตอร์ของโมดูล IC2 ก็จะเก็บค่า 00:00:50 (ในทางปฏิบัติจะเก็บเป็นตัวเลขซึ่งเริ่มนับตั้งแต่ 0, 1, 2 … ไปเรื่อยๆ โดยผู้พัฒนาโปรแกรมต้องนำตัวเลขที่ได้ไปคำนวณค่าเวลาจากความถี่ของสัญญาณนาฬิกาหลักที่ใช้) นอกจากการเก็บค่าเวลาแล้ว โมดูลตรวจจับสัญญาณอินพุตยังสามารถระบุจำนวนครั้งของการตรวจจับเพื่อให้เกิดการอินเตอร์รัพท์ได้ด้วย ถ้านำสัญญาณที่เข้าโมดูล IC ทั้งสามมาเรียงลำดับเฟสก็จะได้เป็น IC1-IC0-IC2









การตราจสอบลำดับโดยใช้โมดูลตรวจจับสัญญาณอินพุตจะเริ่มจากการตรวจจับสัญญาณที่เฟส A (IC1) ให้พบก่อน เมื่อพบแล้วจึงสั่งให้อีกสองโมดูลคือ IC7 และ IC8 เริ่มตรวจจับสัญญาณแล้วเก็บค่าเวลาของทั้งสองโมดูล ถ้าเวลาที่เก็บได้ IC7 น้อยกว่า IC8 แสดงว่าลำดับเฟสเป็น A-B-C แต่ถ้า IC7 มากกว่า IC8 ลำดับเฟสเป็น A-C-B ตั้งค่าโมดูลตรวจจับสัญญาณ(Input Capture) ได้ดังนี้ (รีจีสเตอร์ที่ระบุเป็นของไมโครคอนโทรลเลอร์ dsPIC30Fxxxx)
            1) เลือกรูปแบบการตรวจจับสัญญาณ (ICxCONbits.ICM)
            2) เลือก Timer ที่จะใช้งานร่วมกับโมดุลตรวจจับสัญญาณ (ICxCONbits.ICTMR)
            3) กำหนดจำนวนครั้งการตรวจจับสัญญาณต่อการอินเตอร์รัฟ (ICxCONbits.ICI)
เมื่อเกิดการตรวจจับสัญญาณตามเงื่อนไขที่กำหนด ค่าเวลาของ Timer จะถูกส่งไปเก็บที่ส่วนพักข้อมูลของโมดูลตรวจจับสัญญาณ (ICxBUF)





                                                               รูปการแสดงผลลำดับเฟส








ปฐมบท : ไมโครคอนโทรลเลอร์

สมชาย เบียนสูงเนิน
ภาควิชาวิศวกรรมไฟฟ้า คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเทคโนโลยีราชมงคลธัญบุรี

ไมโครคอนโทรลเลอร์(Microcontroller) หมายถึงอุปกรณ์ควบคุมขนาดเล็ก โดยความหมายนั้นมาจากคำว่าไมโคร (Micro) ที่หมายถึงขนาดเล็ก และคำว่าคอนโทรลเลอร์ (Controller) ที่หมายถึงตัวควบคุมหรืออุปกรณ์ควบคุม โดยในตัวควบคุมขนาดเล็กนี้ ได้บรรจุความสามารถที่คล้ายกับระบบคอมพิวเตอร์ กล่าวคือภายใน ไมโครคอนโทรลเลอร์ ได้รวมเอาหน่วยประมวลผลกลาง หน่วยความจำ และส่วนติดต่อกับอุปกรณ์ภายนอก ซึ่งเป็นส่วนประกอบหลักสำคัญของระบบคอมพิวเตอร์บรรจุเข้าไว้ด้วยกัน ในปัจจุบันหลายคนมีความสับสนระหว่างไมโครคอนโทรลเลอร์กับไมโครโปรเซสเซอรมีความแตกต่างกันอย่างไร โครงสร้างของไมโครโปรเซสเซอรจะประกอบไปด้วย หน่วยประมวลผลกลาง หน่วยคํานวณทางคณิตศาสตร์และลอจิก บัสข้อมูลและบัสตำแหน่งสําหรับติดต่อกับหน่วยความจําภายนอก และวงจรกําเนิดสัญญาณนาฬิกา ในการใชงานไมโครโปรเซสเซอรจะตองเชื่อมต่อกับหน่วยความจําโปรแกรมจากภายนอก ซึ่งหากต้องการติดต่อกับอุปกรณ์ภายนอกไม่ว่าจะเป็นส่วนอินพุตหรือส่วนเอาต์พุต ต้องอาศัยอุปกรณ์ภายนอกมาช่วยขยายจุดต่อใช้งาน ทําใหการสร้างระบบควบคุมใช้อุปกรณ์จํานวนมากส่งผลให้ระบบมีขนาดใหญ่ ในขณะที่โครงสร้างของไมโครคอนโทรลเลอร์จะมีอุปกรณ์พื้นฐานเหมือนกับไมโครโปรเซสเซอร์หากแต่จะบรรจุหน่วยความจําโปรแกรม หน่วยความจําข้อมูลและจุดต่ออินพุตและเอาต์พุตไวภายใน ผูใช้งานจึงเพียงแตเขียนโปรแกรมควบคุมลงบนตัวไมโครคอนโทรลเลอรเท่านั้นก็พอ ดังนั้นไมโครคอนโทรลเลอร์จึงถูกสร้างมาเพื่อรองรับการออกแบบระบบให้มีขนาดเล็กและสามารถป้อนชุดคำสั่งให้สามารถทำงานได้อย่างอัตโนมัติ ด้วยรูปแบบการเขียนโปรแกรมภาษาต่างๆ ตามความถนัด
            ด้วยความก้าวหน้าของเทคโนโลยีด้านการผลิตตัวไมโครคอนโทรลเลอร์ในปัจจุบัน ทำให้ไมโครคอนโทรลเลอร์ถูกบรรจุวงจรการทำงานพิเศษ เช่น วงจรแปลงสัญญาณแอนะล็อกเป็นดิจิตอล วงจรสร้างสัญญาณควบคุมแบบ PWM วงจรส่งข้อมูลแบบอนุกรม เป็นต้น นอกจากนั้นยังมีการเพิ่มขีดความสามารถของหน่วยประมวลผลกลางในด้านการคำนวณทางคณิศาสตร์และเพิ่มความเร็วในการประมวลผล โดยเฉพาะการประมวลผลได้พัฒนาตั้งแต่ 8 บิต 16 บิต และ 32 บิต ทำให้การเรียนรู้และการประยุกต์ใช้งานไมโครคอนโทรลเลอร์ทำได้ง่ายและหลากหลายมากขึ้น

โครงสร้างโดยทั่วไปของไมโครคอนโทรลเลอร์

โครงสร้างทั่วไปของไมโครคอนโทรลเลอร์นั้น สามารถแบ่งออกมาได้เป็นส่วนใหญ่ๆ ดังต่อไปนี้
-หน่วยประมวลผลกลางหรือซีพียู (CPU:Central Processing Unit)   เป็นหน่วยประมวล ผลกลางซึ่งภายในมีหน่วยพื้นฐานต่างๆ อันได้แก่
หน่วยควบคุม(Control Unit) เป็นหน่วยที่ใช้สร้างสัญญาณเพื่อควบคุมการทำงานภายในไมโครคอนโทรลเลอร์ให้ทำงานอย่างมีระเบียบและสัมพันธ์กัน
หน่วยกระทำทางคณิตศาสตร์และลอจิก(Arithmetic Logical Unit : ALU)  ใช้ทำหน้าที่ทางคณิตศาสตร์และลอจิก เช่น การบวก การลบ ลอจิก AND ลอจิก OR ลอจิก EX-OR การเปรียบเทียบ การเลื่อนบิต การเพิ่มค่า การลดค่า การเซตบิต การรีเซตบิต เป็นต้น  โดยมีรีจิสเตอร์หลักที่เรียกว่า แอคคิวมูเลเตอร์ (Accumulator Register)
-หน่วยความจำ ( Memory ) สามารถแบ่งออกเป็น 2 ส่วน คือ หน่วยความจำที่มีไว้สำหรับเก็บโปรแกรมหลัก ( Program Memory) เปรียบเสมือนฮาร์ดดิสก์ของเครื่องคอมพิวเตอร์ คือข้อมูลใดๆ ที่ถูกเก็บไว้ในนี้จะไม่สูญหายแม้ไม่มีไฟเลี้ยง อีกส่วนหนึ่งคือหน่วยความจำข้อมูล ( Data Memory ) ใช้เป็นเหมือนกกระดาษทดในการคำนวณของซีพียู และเป็นที่พักข้อมูลชั่วคราวขณะทำงาน แต่หากไม่มีไฟเลี้ยง ข้อมูลก็จะหายคล้ายกับหน่วยความแรม (RAM) ในเครื่องคอมพิวเตอร์ แต่สำหรับไมโครคอนโทรลเลอร์สมัยใหม่ หน่วยความจำข้อมูลจะมีทั้งที่เป็นหน่วยความจำแรม ซึ่งข้อมูลจะหายไปเมื่อไม่มีไฟเลี้ยง และเป็นอีอีพรอม (EEPROM : Erasable Electrically Read-Only Memory ) ซึ่งสามารถเก็บข้อมูลได้แม้ไม่มีไฟเลี้ยง
-ส่วนติดต่อกับอุปกรณ์ภายนอกหรือพอร์ต (Port) มี 2 ลักษณะคือ พอร์ตอินพุต (Input Port) และพอร์ตส่งสัญญาณหรือพอร์ตเอาต์พุต (Output Port) ส่วนนี้จะใช้ในการเชื่อมต่อกับอุปกรณ์ภายนอก ถือว่าเป็นส่วนที่สำคัญมาก โดยที่พอร์ตอินพุตจะใช้เพื่อรับสัญญาณ อาจจะด้วยการกดสวิตช์ เพื่อนำไปประมวลผลและส่งไปพอร์ตเอาต์พุต เพื่อแสดงผลเช่น การติดสว่างของหลอดไฟ เป็นต้น
-ช่องทางเดินของสัญญาณหรือบัส (BUS) คือเส้นทางการแลกเปลี่ยนสัญญาณข้อมูลระหว่าง ซีพียู หน่วยความจำและพอร์ต เป็นลักษณะของสายสัญญาณ จำนวนมากอยู่ภายในตัวไมโครคอนโทรลเลอร์ โดยแบ่งเป็นบัสข้อมูล (Data Bus) บัสแอดเดรส (Address Bus) และบัสควบคุม (Control Bus)
บัสข้อมูล เป็นสายสัญญาณที่บรรจุข้อมูล เพื่อการประมวลผลทั้งหมด ขนาดของบัสจะขึ้นอยู่กับความสามารถการประมวลผลของซีพียู สำหรับในงานทั่วๆ ไป ขนาดของบัสข้อมูลจะเป็น 8 บิต และในปัจจุบันได้มีการพัฒนาขึ้นมาจนถึง 16, 32 และ 64 บิต
บัสแอดเดรส เป็นสายสัญญาณที่บรรจุค่าตำแหน่งของหน่วยความจำ โดยการติดต่อกับหน่วยความจำนั้น ซีพียู ต้องกำหนดตำแหน่งที่ต้องการอ่านหรือเขียนก่อน ดังนั้นจำนวนสายสัญญาณของแอดเดรสจึงต้องมีจำนวนมาก ยิ่งมากเท่าไหร่ ก็จะเป็นการแสดง ขนาดของหน่วยความจำที่ไมโครคอนโทรลเลอร์สามารถติดต่อได้
บัสควบคุม เป็นกลุ่มของสายสัญญาณควบคุมการติดต่อทั้งหมดของซีพียูกับหน่วยความจำและพอร์ต
-วงจรควบคุมสัญญาณนาฬิกา นับเป็นส่วนประกอบที่สำคัญมากอีกส่วนหนึ่ง เนื่องจากการทำงานที่เกิดขึ้นในตัวไมโครคอนโทรลเลอร์ จะขึ้นอยู่กับการกำหนดจังหวะ หากสัญญาณนาฬิกามีความถี่สูง จังหวะการทำงานก็จะสามารถทำได้ถี่ขึ้นส่งผลให้ไมโครคอนโทรลเลอร์ตัวนั้น มีความเร็วในการประมวลผลสูงตามไปด้วย
         -โมดูลสำหรับงานพิเศษ ไมโครคอนโทรลเลอร์จะถูกบรรจุวงจรการทำงานพิเศษ เช่น วงจรแปลงสัญญาณแอนะล็อกเป็นดิจิตอล วงจรสร้างสัญญาณควบคุมแบบ PWM วงจรส่งข้อมูลแบบอนุกรม วงจรตรวจจับสัญญาณอินพุต เป็นต้น ทำให้การประยุกต์ใช้งานไมโครคอนโทรลเลอร์ทำได้ง่ายขึ้น

บทความต่อๆ ไป จะเป็นการประยุกต์ใช้งาน คอยติดตามนะครับ