วันอาทิตย์ที่ 26 กุมภาพันธ์ พ.ศ. 2560

ตารางสรุปการเชื่อมต่อแบบ Serial communication


1-Wire I2C SMBus SPI MicroWire/PLUS? M-Bus (EN1434) CAN (ISO11898) LIN Bus
Network Concept single master, multiple slaves multiple masters, multiple slaves multiple masters, multiple slaves single master, multiple slaves single master, multiple slaves single master, multiple slaves multiple masters, multiple slaves single master, multiple slaves
Number of Signal Lines 1 (IO) 2, (SCL, SDA) 2, (SMBCLK, SMBDAT) 4, (active-low CS, SI, SO, SCK) 4, (active-low CS, DI, DO, SK) 2 (lines can be swapped) 2 (CAN_H, CAN_L, terminated) 1 (LIN)
Optional signals N/A N/A SMBSUS#, SMBALERT# N/A N/A N/A 2nd GND, Power, Shield N/A
Network Size Up to 300 m (with suitable master circuit) Limited by max. 400pF bus capacitance requirement Limited by max. 400pF bus capacitance requirement N/A (circuit board level) N/A (circuit board level) Max. 350m per segment of max. 250 slaves; max. 180nF 40m @1M bps1000m @ 50k bps (example) Up to 40m, max. 10nF total load
Network Interface open drain, resistive or active master pull-up open drain, resistive or active master pull-up open drain, resistive or active master pull-up Push-pull with tristate Push-pull with tristate M to S: voltage drive
S to M: current load
Differential open drain/source or open coll./emitter open drain, resistive master pull-up
Network Voltage From 2.8 to 6.0 V, device specific From 1.8 to 5.5V, device specific 2.7V to 5.5V From 1.8V to 5.5V, device specific From 1.8V to 5.5V, device specific ~40V VDD-VD (diode drop); ~4.5V max. 8 to 18V
Logic Thresholds Vary with network voltage Fixed level: >1.5V, >3.0 V VDD-related level: <30%, >70% of VDD <0.8V, >2.1V VDD-related level: <20% (30%), >70% of VDD (inconsistent) Fixed level: <0.8V, >2.0V; VDD-related level: <20% (30%), >70% (80%) of VDD (inconsistent) Master to slave: 24V, 36V nominalSlave to master: <1.5mA, >11mA Differential: <50mV (recessive), >1.5V (dominant); driver specification VDD-related level: <20%, >80% of VDD (driver spec.)<40%, >60% of VDD (receiver spec.)
Transmission LS bit first, half-duplex MS bit first plus Acknowledge bit, half-duplex MS bit first plus Acknowledge bit, half-duplex MS bit first, full-duplex MS bit first, full-duplex LS bit first, half-duplex, acknowledge response MS bit first, half-duplex LS bit first, half-duplex
Address Format 56 bits 7 bits, (10 bits defined but not implemented) 7 bits, (10 bits defined but not implemented) N/A N/A 8 bits (primary address), 64 bits (secondary address) Message identifier 11 bits (standard format), 29 bits (extended format) Message identifier 8 bits, including 2 parity bits
Network Inventory Automatic, supports dynamic topology change N/A; slave addresses hard-coded in firmware ARP, Address Resolution Protocol (Rev. 2.0 only) N/A; slave select (active-low CS) hard-coded in firmware N/A; slave select (active-low CS) hard-coded in firmware Automatic N/A; message-based protocol, not address based N/A; message-based protocol, not address based
Gross Data Rate Standard: ~0 to 16.3k bps Overdrive: ~0 to 142k bps) Standard: ~0 to 100k bps; Fast: ~0 to 400k bps; High-Speed: ~0 to 3.4M bps 10k to 100k bps ~0 to ~10 M bps (device specific) ~0 to ~5 M bps (device specific) 300, 2400, 9600 bps ~0 to 1M bps ~1k to ~20k bps
Access Time Standard: ~ 5.4ms Overdrive: ~0.6ms (at maximum speed) Standard: ~95?sFast: ~23?s(at maximum speed) ~95?s @ 100k bps N/A N/A Primary address, 2400 bps: 13.75ms (short frame), 27.5ms (long frame) At 1M bps 19?s (standard) or 39?s (extended) from start of frame to 1st data bit At 20k bps 1.7ms from start of frame to 1st data bit
Data Protection 8-bit and 16-bit CRC N/A PEC Packet Error Code (Rev.1.1, 2.0) N/A N/A Even parity, check sum, frames 15-bit CRC, frames, frame acknowledge Check sum, frames
Collision Detection Yes, through non-matching CRC Yes (multi-master operation only) Yes (Rev. 2.0 only) N/A N/A Yes ("medium" and "strong" collisions) Yes: CSMA/CD Yes, through check sum
Slave supply Parasitic (typical), VDD (exception) VDD only VDD only VDD only VDD only Parasitic and/or local supply VDD only, local or remote source Parasitic only

LCD

LCD controller คือไอซีควบคุม ที่ใช้ในการควบคุมจอแสดงผลแบบ dot matrix liquid crystal display หรือที่เรานิยมเรียกสั้นๆ ว่า LCD โดยเจ้าไอซี HD44780 ถูกพัฒนาโดยบริษัท Hitachi เพื่อใช้ในการแสดงผลตัวอักษรบนจอ LCD โดยเฉพาะ ซึ่งต่อมากลายเป็นที่นิยม และเป็นมาตรฐานในการเชื่อมต่อกับจอ LCD ที่ใช้ชิพ HD44780 นี้เป็นตัวควบคุม

จอ LCD นี้ จะแสดงผลเป็นตัวหนังสือ แบบสีเดียว โดยมักถูกนำไปใช้กับเครื่องต่างๆ ไม่ว่าจะเป็นเครื่องถ่ายเอกสาร แฟกซ์ เครื่องรับโทรศัพท์ หรือ เครื่องปริ้นท์เตอร์ต่างๆ หรือตามเครื่องมืออุตสาหกรรมต่างๆ มีหลายขนาดให้เลือก เช่น แบบ 8x1  หมายถึงแสดงผลได้สูงสุด 8 อักษร จำนวน 1 บรรทัด  หรือแบบ 16x2 , 20x2 และแบบ 20x4 เป็นต้น ขนาดใหญ่สุดอาจจะมากถึง 40 ถึง 80 ตัวอักษรต่อบรรทัดเลยก็ได้ 
คลิกที่รูปเพื่อดูภาพใหญ่
ตำแหน่งขา ของ LCD ชนิดไม่เกิน 80 ตัวอักษร 
ขาที่ 1 Vss ต่อกับกราวด์
ขาที่ 2 Vccต่อกับไฟเลี้ยง 2.7V ถึง 5.5V
ขาที่ 3 Vo ต่อกับตัวต้านทานปรับค่าได้ 10k โอห์ม
ขาที่ 4 RS Register Select
ขาที่ 5 R/W Read/Write
ขาที่ 6 E Enable ใช้สัญญาณ Pulse ขอบขาลงในการทริก
ขาที่ 7 ข้อมูลตำแหน่งบิต 0 (ถ้าส่งข้อมูลแบบ 4 บิต ไม่ต้องต่อขานี้) 
ขาที่ 8 ข้อมูลตำแหน่งบิต 1 (ถ้าส่งข้อมูลแบบ 4 บิต ไม่ต้องต่อขานี้) 
ขาที่ 9 ข้อมูลตำแหน่งบิต 2 (ถ้าส่งข้อมูลแบบ 4 บิต ไม่ต้องต่อขานี้) 
ขาที่ 10 ข้อมูลตำแหน่งบิต 3 (ถ้าส่งข้อมูลแบบ 4 บิต ไม่ต้องต่อขานี้)   
ขาที่ 11 ข้อมูลตำแหน่งบิต 4
ขาที่ 12 ข้อมูลตำแหน่งบิต 5
ขาที่ 13 ข้อมูลตำแหน่งบิต 6
ขาที่ 14 ข้อมูลตำแหน่งบิต 7 / busy flag
ขาที่ 15   ขั้วหลอด LED ขา Anode ต่อกับแรงดันบวกไม่เกินแรงดันคร่อมหลอด LED
ขาที่ 16   ขั้วหลอด LED ขา Cathod ต่อกับกราวด์

ขาที่ 1 Vss ต่อกับ Ground ,ขาที่ 2 Vcc ต่อกับ ไฟเลี้ยงกระแสตรงไม่เกิน 5.5V 

ขาที่ 3 Vo
 ทำ หน้าที่ปรับความสว่างของตัวหนังสือที่ปรากฏบนจอ LCD โดยจะใช้แรงดันที่ได้จากการแบ่งแรงดัน (Voltage divider) จากความต้านทาน R10k ในการปรับความสว่างของตัวหนังสือ 

ขาที่ 4 RS Register Select
  ทำหน้าที่บอก LCD controller ว่าข้อมูลที่จะส่งไป เป็นข้อมูลประเภทคำสั่ง หรือข้อมูลที่เป็นดาต้า 

ขาที่ 5 Read/Write (เขียนข้อมูล R/W = 0 , อ่านข้อมูล R/W = 1)
  ทำหน้าที่ในกำหนดว่าจะอ่าน หรือจะเขียนข้อมูลลงไปบน LCD หรือจะอ่านข้อมูลที่อยู่ใน LCD ออกมา โดยทั่วไปแล้ว เรามักจะเขียนข้อมูลลงไปแสดงผล มากกว่าที่จะอ่านข้อมูลจากจอ LCD กลับมา ดังนั้นแล้ว เราสามารถที่จะต่อขาที่ 5 กับกราวด์ได้ เพื่อประหยัดขาไมโครคอนโทรลเลอร์ที่จะต่อกับจอ LCD 

ขาที่ 6  Enable (EN)
  ขานี้ทำหน้าที่ในการสั่งให้ LCD อ่านข้อมูลจากขา RS และขาที่ 7 ถึงขาที่ 14 เข้าไปประมวลผลใน LCD controller โดยจะใช้ขอบสัญญาณขาลง ของ Pulse ในการทริกที่ขาที่ 6 Enable (EN)

ตั้งแต่ขาที่ 7 ถึงขาที่ 14 เป็นช่องทางการรับส่งข้อมูล โดยเราสามารถเลือกที่จะส่งข้อมูลคราวละ 8 บิต โดยใช้ทั้งหมด 8 ขา ใน การส่งแต่ละครั้ง หรือจะเลือกส่งแบบคราวละ 4 บิต แต่ต้องส่งสองครั้งต่อข้อมูลก็ได้ ซึ่งข้อดีของการส่งคราวละ 4 บิต คือประหยัดขาไมโคร

คอนโทรลเลอร์ที่จะต่อกับ LCD 
โดยในการส่งคราวละ 4 บิต เราจะใช้ขาตั้งแต่ ขา 11 ถึงขาที่ 14 ส่วนขาที่ 7 ถึงขาที่ 10 เราจะปล่อยลอยไว้หรือต่อลงกราวด์ก็ได้ 

ส่วนขาที่ 15, 16 สำหรับต่อไฟเลี้ยงให้หลอด LED Backlight ที่ทำให้จอสว่างขึ้น เพื่อการมองเห็นในที่มืด 

คุณสมบัติของมาตรฐานต่าง ๆ

RS-232, RS-423, RS-422 and RS-485
Table ข้างล่างนี้เป็นการสรุปคุณสมบัติของมาตรฐานต่าง ๆ ที่นิยมใช้กันทั่วไป
Specification
RS-232
RS-423
RS-422
RS-485
Mode of operation
Single-ended
Single-ended
Differential
Differential
Total number of drivers and receivers on one line
1Tx
1Rx
1Tx
10Rx
1Tx
10Rx
1Tx
32Rx
Maximum cable length
50Ft
4,000Ft
4,000Ft
4,000Ft
Maximum data rate
20Kbps
100Kbps
10Mbps
10Mbps
Maximum driver output voltage
+/-25V
+/-6V
-0.25V to +6V
-7V to +12V
Driver output signal level (loaded min.) Loaded
+/-5V to +/-15V
+/-3.6V
+/-2V
+/-1.5V
Driver output signal level (loaded max.) Unloaded
+/-25V
+/-6V
+/-6V
+/-6V
Driver load impedance (ohms)
3K to 7K
>=450
100
54
Max. Driver current in high Z state Power on
N/A
N/A
N/A
+/-100uA
Max. Driver current in high Z state Power off
+/-6mA @ +/-2V
+/-100uA
+/-100uA
+/-100uA
Slew rate (max.)
30V/uS
Adjustable
N/A
N/A
Receiver input voltage range
+/-15V
+/-12V
-10V to +10V
-7V to +12V
Receiver input sensitivity
+/-3V
+/-200mV
+/-200mV
+/-200mV
Receiver input resistance (ohms)
3K to 7K
4K min.
4K min.
>=12K

SPI

SPI หรือ Serial Peripheral Interface
          เป็นวิธีการสื่อสารอนุกรมแบบ Synchronous อีกรูปแบบหนึ่ง ซึ่งทำงานในรูปแบบที่ให้อุปกรณ์ตัวหนึ่งทำหน้าที่เป็น Master ในขณะที่อีกตัวหนึ่งทำหน้าที่เป็น Slave และสามารถส่งข้อมูลในโหมด Full-duplex นั่นหมายความว่า สัญญาณสามารถส่งหากันได้ระหว่าง Master และ Slave ได้อย่างต่อเนื่อง รูปแบบข้อมูลการสื่อสารหรือ Protocol ของแบบ SPI นี้ ไม่ได้มาตรฐานกำหนดตายตัว ว่าข้อมูลที่ส่งหากันต้องอยู่ในรูปแบบหรือ Format แบบไหน เป็นการคิด Protocol การสื่อสารกันเอาเอง หรือดูจาก Datasheet ของอุปกรณ์
        ยกตัวอย่างอุปกรณ์ที่ใช้การสื่อสารแบบ SPI ได้แก่ โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล และโมดูลแปลงสัญญาณดิจิตอลเป็นอนาล็อก การติดต่อกับหน่วยความจำ EEPROM และ FLASHโมดูลนาฬิกาดิจิตอล หรือ Real Time Clock : RTC เซ็นเซอร์วัดอุณหภูมิ และความดัน อุปกรณ์อื่น ๆ เช่น signal mixer , Potentiometer , LCD controller , USART , CAN controller , USB controller , Amplifier



             รูป 1-1 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave

รูป 1‑1 แสดงการเชือมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave โดยมีสายสัญญาณ สี่เส้น หรือ Four Wire ประกอบด้วย SCLK (Serial Clock) ใช้ส่งสัญญาณนาฬิกาจากอุปกรณ์ Master ไปยังอุปกรณ์ Slave เพื่อกำหนดจังหวะการรับส่งข้อมูลMOSI (Master Out Slave In) ใช้ส่งข้อมูลจากอุปกรณ์ Master ไปยังอุปกรณ์ SlaveMISO (Master In Slave Out) ใช้รับข้อมูลจากอุปกรณ์ Slave
\SS (Slave Select) หรือ ขา CS (Chip Select) ใช้ส่งสัญญาณ Low ไปยังอุปกรณ์ Slave ที่ต้องการรับส่งข้อมูล

      อุปกรณ์ Master ทำหน้าที่เป็นตัวควบคุมการสื่อสารทั้งหมด โดยควบคุมการสื่อสารตามสัญญาณนาฬิกา และสายสัญญาณ SS ตัวมาสเตอร์จะเป็นตัวที่ตัดสินใจเลือก รับ หรือ ส่งข้อมูลไปยังอุปกรณ์ Slave สัญญาณเส้น SS หรือ Slave select ในกรณี ที่มีตัว Slave มากกว่า 1 ตัว โดยการทำให้เส้น SS มีระดับสัญญาณเป็น Low เมื่อต้องการติดต่อกับ Slave ตัวใด จากรูป 1‑2 หากต้องการติดต่อสื่อสารกับอุปกรณ์ Slave ตัวใด ก็เพียงทำให้สัญญาณ SS ของ Slave ตัวนั้น มีระดับสัญญาณเป็น Low

        รูป 1-2 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave หลายตัว

      เมื่อเปรียบเทียบระหว่างการสื่อสาร SPI กับ I2C เป็นการสื่อสารอนุกรมแบบ Synchronous เหมาะสำหรับการสื่อสารข้อมูลความเร็วต่ำ เช่น หน่วยความจำ EEPROM หรือโมดูลนาฬิกาดิจิตอล

         ข้อดีของการสื่อสารแบบ SPI คือ สามารถสื่อสารแบบ Full Duplex กล่าวคือสามารถรับและส่งข้อมูลได้พร้อมๆ กัน เพราะมีสายสัญญาณรับและส่งข้อมูลโดยเฉพาะ รูปแบบการสื่อสารของ SPI ไม่ต้องกำหนด Address เพื่อระบุอุปกรณ์ที่ต้องการสื่อสารเหมือน I2C เนื่องจากใช้สายสัญญาณ SS เป็นตัวควบคุม จึงมีอัตราการรับส่งข้อมูลสูงกว่า I2C และเหมาะสำหรับการรับส่งข้อมูลแบบต่อเนื่อง หรือ Streaming อย่างไรก็ตาม หากมีอุปกรณ์ Slave หลายตัวดังรูป การสื่อสารแบบ SPI ต้องใช้สายสัญญาณมากกว่า I2C

    รูปแบบสัญญาณใน SPI BUS
รูปแบบสัญญาณ SPI มี 4 รูปแบบ แตกต่างกันที่ขอบสัญญาณนาฬิกา (Clock Polarity) และเฟส (Phase)

 - เมื่อ CPHA=0 และ CPOL=0 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น Low และจะรับ-ส่งข้อมูลที่ขอบขาขึ้นของสัญญาณนาฬิกา (Rising Edge Clock)
- เมื่อ CPHA=0 และ CPOL=1 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น High และจะรับ-ส่งข้อมูลที่ขอบขาลงของสัญญาณนาฬิกา (Falling Edge Clock)
- เมื่อ CPHA=1 และ CPOL=0 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น Low และจะรับ-ส่งข้อมูลที่ขอบขาลงของสัญญาณนาฬิกา (Falling Edge Clock)
- เมื่อ CPHA=1 และ CPOL=1 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น High และจะรับ-ส่งข้อมูลที่ขอบขาขึ้นของสัญญาณนาฬิกา (Rising Edge Clock)

ดังนั้น จึงกำหนดเป็น Mode การทำงานได้ 4 โหมด คือ

o Mode 0 = CPOL=0 และ CPHA=0
o Mode 1 = CPOL=0 และ CPHA=1
o Mode 2 = CPOL=1 และ CPHA=0
o Mode 3 = CPOL=1 และ CPHA=1

ตัวอย่างการใช้งาน DAC ผ่านการสื่อสาร SPI

ในบทนี้แสดงวิธีการใช้งานการสื่อสารแบบ SPI เพื่อควบคุมอุปกรณ์ต่างๆ โดยตัวอย่างนี้ใช้ไอซี LTC1661  ของบริษัท Linear Technology โมดูลแปลงสัญญาณดิจิตอลขนาด 10 บิตเป็นสัญญาณอนาล็อก 2 ช่องสัญญาณ แม้ว่า STM32F4Discovery มี DAC ให้ใช้งานได้ 2 ช่องสัญญาณ ผู้ใช้งานสามารถใช้อุปกรณ์นี้ได้ หากต้องการเพิ่มจำนวนช่องจ่ายแรงดันอนาล็อกได้

รูป 2-1 แสดงขาของไอซี LTC1661 [2]
รูป 2‑2 แสดงการรับข้อมูลของ LTC1661 ผ่าน SPI จาก Microcontroller เพื่อต้องการปรับแรงดันไฟฟ้า เมื่อสังเกตลักษณะสัญญาณนาฬิกา เมื่ออยู่ในสถานะ Idle ค่าของสัญญาณมีสถานะ Low และอ่านบิตข้อมูลที่อยู่บน MOSI เมื่อพบขอบขาขึ้น (1st Edge Capture) ข้อมูลหนึ่งชุดมีขนาดจำนวน 16 บิต ซึ่งประกอบด้วยค่าดิจิตอล 10 บิต ที่ต้องการแปลงเป็นค่าแรงดันไฟฟ้า และ Control Code จำนวน 4 บิตสำหรับควบคุมการทำงานไอซี LTC1661ดังรูป 2‑3 สำหรับความถี่ของสัญญาณนาฬิกาสูงสุดที่ไอซี LTC1661 สามารถทำงานได้คือ 16.7 MHz

รูป 2-2 รูปแบบการสื่อสารแบบ SPI ของไอซี LTC1661

รูป 2-3 ตารางแสดงคำอธิบายของ Control Code ของไอซี LTC1661

Raspberry Pi ปิดสกีนเซฟเวอร์



How to Disable the Blank Screen on Raspberry Pi (Raspbian)


Here are two techniques to disable the blank screen on the Raspberry Pi. By default the screen is blanked after around 10/15 minutes if no user input (mouse or keyboard) is detected.
I successfully tested both methods with a Raspberry Pi 2 + latest Raspbian Jessie (v4.1) + 7-inch touchscreen display.

1 – Disabling the blank screen once

You can disable the blank screen once with the following command line instructions:
$ sudo xset s off
$ sudo xset -dpms
$ sudo xset s noblank

xset s off disable the screen saver, xset -dpms disables the DPMS (Display Power Management Signaling) and xset s noblank tells to X server to not blank the video device.

2 – Disabling the blank screen forever

If you want to disable the blank screen at every startup, just update the /etc/lightdm/lightdm.conf file and add in the [SeatDefaults] section the following command:
[SeatDefaults]
xserver-command=X -s 0 -dpms

You need root rights to update the lightdm.conf file. You can use the nano editor:
$ sudo nano /etc/lightdm/lightdm.conf

การตั้งค่า Raspbian ปรับ Resolution ให้พอดีกับขนาดจอภาพ


หลังจากเราติดตั้งระบบปฏิบัติการ Raspbian แล้วหากไม่มีการปรับการตั้งค่า หน้าจอที่แสดงผลจะไม่พอดีกับจอภาพ (Monitor)


ในการปรับแต่งค่าให้หน้าจอสามารถแสดงผลได้เต็มหน้าจอต้องแก้ไขไฟล์ /boot/config.txt โดยเพิ่มหรือแก้ไขบรรทัด disable_overscan=1 ดังรูป


หลังจากปรับค่า config.txt แล้วสั่ง reboot เมื่อเข้าสู่ GUI Mode ก็จะได้ขนาดหน้าจอที่พอดีกับจอภาพ


สำหรับ Raspberry Pi ที่ติดตั้ง Raspbian โดยใช้ NOOBS ซึ่งเป็นระบบปฏิบัติการที่สามารถทำ Multi Boot การปรับแก้ในส่วนของ config ไฟล์ ต้องแก้เพิ่มอีก 1 จุด ในหัวข้อ NOOBS Auto-generated Setting: โดยจะอยู่ด้านล่างๆ ของไฟล์ config.txt (หากติดตั้ง Raspbian แบบ Clean จะไม่มีหัวข้อดังกล่าว) ให้แก้ไข บรรทัด disable_overscan=1 ดังรูป



สำหรับระบบปฏิบัติการ Raspbian ที่ติดตั้งผ่าน NOOBS เมื่อแก้ไขค่าทั้งสองที่แล้วอาจจะแสดงผลได้ไม่ดีเท่า Raspbian ที่ติดตั้งแบบ clean เนื่องจากจะเหลือขอบจอให้เห็นอยู่เล็กน้อย

ตารางเปรียบเทียบการสื่อสารต่างๆ



I2C

  I2C ย่อมาจาก Inter IC Communication คิดค้นโดย  Philip semiconductor  หรือ  NXP  semiconductorจุดประสงค์เพื่อรับส่งข้อมูลความเร็วต่ำระหว่างอุปกรณ์ ต่างๆ เช่นเครื่องบันทึกเสียง โทรศัพท์มือถือ  รวมถึงหน่วยความจำอย่าง EEPROM เป็นต้น การสื่อสารแบบ I2C มีจุดเด่นคือ การเชื่อมต่อกันเป็นระบบบัสและรับส่งข้อมูลระหว่างอุปกรณ์ได้เป็นจำนวนมาก โดยใช้สายสัญญาณเพียงสองเส้นดังรูป  1-1  ซึ่งสามารถลดจำนวนสายสัญญาณและขนาดของอุปกรณ์ จึงเป็นที่นิยมในระบบสมองกลฝังตัวขนาดเล็ก

รูป 1-1 การเชื่อมต่ออุปกรณ์ แบบ I2C บัส [2, p.1]

 เป็นการสื่อสารแบบอนุกรมแบบ Synchronous ด้วยสายสัญญาณเพียง 2 เส้น คือ สายสัญญาณข้อมูล SDA (Serial Data Line) และสายสัญญาณนาฬิกา SCL (Serial Clock Line) โดย I2C แบ่งการทำงานออกเป็น 4 โหมดตามความเร็วในการรับส่งข้อมูลดังนี้
        1. Normal Mode: 100Kbps
        2. Fast Mode: 400Kbps
        3. Fast Mode Plus: 1Mbps
        4. High Speed Mode: 3.4 Mbps


ตัวอย่างการต่อใช้งาน I2C
        จากภาพแสดงให้เห็นว่าในการใช้งาน I2C สามารถต่อใช้งานกับอุปกรณ์ได้มากกว่าหนึ่งตัวบนสายสัญญาณ 1 ชุด (2 เส้น) โดยเลือกติดต่อกับอุปกรณ์ใดได้ด้วยการกำหนดแอดเดรสทางฮาร์ดแวร์ให้กับ อุปกรณ์ตัวนั้นและต้องมีการ Pull-Up ให้กับสายสัญญาณทั้ง 2 เส้น
 ภาวะที่เกิดขึ้นบนบัส I2C 



มีด้วยกัน 5 สภาวะดังนี้
1. บัสว่าง เป็นสภาวะที่มาสเตอร์ทำให้ SDA และ SCL เป็น“1” ทั้งคู่ เพื่อที่จะเริ่มต้นการสื่อสาร
2. สภาวะเริ่มต้น Start เกิดขึ้นเมื่อมาสเตอร์ทำให้ SDA เปลี่ยนจาก“1” เป็น “0” ก่อน แล้วจึงเปลี่ยน SCL จาก “1” เป็น“0”
3. สภาวะบิตข้อมูล  เกิดขึ้นโดยตัวส่งทำให้ SDA เป็นบิตข้อมูล “0” หรือ “1” ก่อน แล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL ตัวรับจึงรับข้อมูลในช่วงดังกล่าว
4. สภาวะบิตรับรู้ ้ ACK หรือ Acknowledge เกิดขึ้นโดยตัวส่งทำให้ SDA เป็น “1” ก่อนแล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL เมื่อตัวรับรับรู้แล้วก็จะทำให้ SDA เป็น “0”
5. สภาวะหยุด  Stop เกิดขึ้นเมื่อมาสเตอร์ทำให้ SCL เปลี่ยนจาก“0” เป็น “1” ก่อน แล้วจึงเปลี่ยน SDA จาก “0” เป็น
“1”


รูปแบบสถานะในการรับ-ส่งข้อมูล

095
       Start เป็นสถานะที่บอกเริ่มต้นการรับ-ส่งข้อมูล โดยการเปลี่ยนสัญญาณของ SDA จาก High ไปเป็น Low โดยที่ SCL ยังคงเป็น High อยู่
       Control Byte ประกอบไปด้วย 3 ส่วน คือ
       - ID ของอุปกรณ์จำนวน 4 บิต ซึ่งถูกกำหนดมาโดยผู้ผลิต IC หรืออุปกรณ์ I2C
       - Device Address ขนาด 3 บิต สามารถกำหนดได้เองจากการจ่าย Logic หรือต่อขาให้กับ IC
       - Mode ขนาด 1 บิต ใช้กำหนดว่าเป็นการ Read หรือ Write Data กับอุปกรณ์ IC
       ACK หรือ Acknowledge เป็นบิตที่ใช้บอกว่า IC มีการตอบสนองต่อคำสั่งที่ได้รับมาแล้ว
       DATA คือ ข้อมูลที่ต้องการเขียนหรืออ่านออกมาจาก IC ขึ้นกับ Mode ที่เราได้ตั้งค่าเอาไว้
       STOP เป็นสถานะที่บอกให้อุปกรณ์รู้ว่าสิ้นสุดการรับส่งข้อมูลแล้ว โดย SDA จะเปลี่ยนจาก Low เป็น High ในขณะที่ SCL ยังเป็น High อยู่
096


การสื่อสารแบบ I2C มีรูปแบบดังรูป 1-2 และมีขั้นตอนการรับส่งข้อมูลเป็นลำดับ ดังนี้
  1. เพื่อเริ่มต้นสถานะการสื่อสารแบบ  I2C  อุปกรณ์  Master เริ่มจะส่งคำสั่ง  START  ซึ่งจะทำให้อุปกรณ์Slave ทุกตัวที่อยู่ใน Bus เตรียมพร้อมรับข้อมูลจากสายส่งข้อมูล (SDA)
  2. อุปกรณ์  Master  ส่ง  Address  ขนาด  7  บิตและตามด้วยคำสั่งอ่านหรือเขียน (Read/Write)  อีก  1บิต
  3. อุปกรณ์  Slave  ทุกตัวใน  Bus  จะตรวจสอบ  Address  ในสายส่งข้อมูลว่าตรงกับ  Address  ของตนหรือไม่หากตรงกัน  จะส่งสัญญาณ  ACK  ขนาด  1  บิต  กลับไปยังอุปกรณ์  Master เพื่อเตรียมพร้อมด่าเนินการต่อไป
  4. การรับส่งข้อมูลระหว่าง  Master และ Slave ที่ระบุ Address จะด่าเนินการอย่างต่อเนื่อง  ในกรณีที่Master  ส่งคำสั่ง  Read  อุปกรณ์  Slave  จะส่งข้อมูลเป็นชุดๆ ชุดละ  8  บิต (1  ไบต์)  เมื่ออุปกรณ์Master จะส่งสัญญาณ ACK เมื่อได้รับทุกๆ ไบต์
  5. อุปกรณ์  Master จะส่งคำสั่ง STOP เพื่อสิ้นสุดสถานะการสื่อสารแบบ I2C

 รูป 1-2 รูปแบบการสื่อสารแบบ I2C

การเข้าถึงแบบ 7 บิต(7-bit addressing)






      ข้อมูลไบต์แรกที่เกิดขึ้นหลังจากสภาวะเริ่มต้นคือ ข้อมูลที่ใช้อ้างอุปกรณ์ที่ต้องการติดต่อโดยมีรูปแบบแสดงในรูป
      ใน 7 บิตบนรวมทั้งบิต LSB ด้วยจะเป็นข้อมูลแอดเดรสของอุปกรณ์สเลฟที่ต้องการติดต่อ โดยแบ่งเป็น บิตกำหนดแอดเดรสคงที่(fix address bit) จำนวน 4 บิต ซึ่งข้อมูลนี้อุปกรณ์แต่ละตัวจะถูกกำหนดมาจากผู้ผลิต ไม่สามารถเปลี่ยนแปลงแก้ไขได้ ถัดมาอีก 3 บิตเป็นบิตกำหนดแอดเดรสที่สามารถโปรแกรมได้(programmable address bit) โดยผู้ใช้งานต้องกำหนดสถานะลอจิกให้แก่ขา A0-A2 ของอุปกรณ์ที่มีการเชื่อมต่อแบบบัส I2C ส่วนในบิต LSB ที่ใช้กำหนดการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวนั้น ๆ หากบิต LSB เป็น "0" หมายถึงต้องการเขียนข้อมูลไปยังอุปกรณ์นั้น ถ้าเป็น "1" จะเป็นการอ่านข้อมูลจากอุปกรณ์สเลฟ
      ข้อมูลในไบท์ต่อมาคือ ข้อมูลควบคุม(control byte) ในอุปกรณ์แต่ละตัวจะมีการกำหนดข้อมูลควบคุมที่แตกต่างกันไป ยกตัวอย่างเช่น ไอซีเมมโมรีของทีวีตระกูล 24Cxx จะต้องส่งข้อมูลแอดเดรสของหน่วยความจำก่อนที่จะทำการส่งข้อมูลไป
      ข้อมูลในไบท์ต่อมาคือ ข้อมูลที่ทำการถ่ายทอดจริง(data)
หลังจากการถ่ายทอดข้อมูลในแต่ละไบท์ อุปกรณ์สเลฟที่ได้รับการติดต่อต้องส่งสัญญาณรับรู้ตอบกลับมาด้วยทุกครั้ง
การเข้าถึงแบบ 10 บิต(10-bit addressing)



      จะมีข้อมูลเพิ่มเติิมขึ้นมาเล็กน้อย โดยในไบท์แรกหลักจากสภาวะเริ่มต้น ต้องกำหนดให้ 5 บิตบนมีข้อมูลเป็น 11110 ส่วนอีก 2 บิตถัดมาเป็นบิตแอดเดรสของอุปกรณ์ที่ต้องการติดต่อ ในบิต LSB ของข้อมูลไบท์แรกยังคงเป็นการกำหนดว่า ต้องการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวที่ต้องการติดต่อด้วย ข้อมูลไบท์ต่อมาเป็นข้อมูลแอดเดรสในไบท์ที่ 2 ของอุปกรณ์ที่ต้องการติดต่อด้วย ข้อมูลไบท์ถัดไปจึงเป็นข้อมูลควบคุม ข้อมูลหลังจากนี้ก็จะเป็นข้อมูลจริงที่ใช้ในการติดต่อ
เช่นเดียวกัน กับการเข้าถึงแบบ 7 บิตหลังจากถ่ายทอดข้อมูลครบทุกไบท์ ต้องมีสภาวะรับรู้เกิดขึ้น เพื่อให้ขบวนการถ่ายทอดข้อมูลสามารถดำเนินต่อไปได้

  ลำดับการทำงาน (Timing Diagram) ก็จะเริ่มต้นด้งนี้ครับ

   1. ในสภาวะที่ยังไม่เริ่มทำงาน  อุปกรณ์ทุกตัวจะมีแรงดันระดับสูง (H) 

   2. เมื่อเริ่มจะส่งข้อมูล  SDA จะลดลงไปที่ระดับแรงดันศูนย์  (L)  ในขณะที่ SCL ยังอยู่ที่ ็H  จะเห็นในช่องที่แรงเงาสีเหลืองซ้ายสุด  โดย SCL จะค้างที่ H นาน 0.6 ไมโครวินาที (tHDSTA: Hold Time to Start Condition)  ผ่านช่วงเวลานี้ไปเป็นอันรู้กันว่า Master จะเริ่มสั่งการ  (แต่ตอนนี้ยังไม่รู้นะครับว่าจะสั่ง Slave ตัวไหน เพราะอาจมีหลายตัวต่ออยู่บนบัส)

   3. ตอนนี้ SCL จะลงไปที่ L  จาก นั้น ระหว่างที่รอสัญญาณขาขึ้นของ Clock แรกอีก 1.3 ไมโครวินาที SDA จะเริ่มกำหนดค่า Bit แรก  โดย Master จะส่งค่าบิตแรกไปพร้อมกับสัญญาณ Clock  และไอซีที่เป็น Slave บนบัสจะเริ่มอ่านค่าในจังหวะที่ SCL เป็น H

   4. จากนั้นก็จะเป็นอย่างนี้ไปอีกเพื่อส่งค่า Address ของไอซีที่ต้องการจะติดต่อด้วยไปรวมทั้งสิ้น 7 บิตและตามด้วยบิตที่ 8 ซึ่งจะระบุว่าจะสั่งให้ Slave รอคำสั่ง (Write ระบุโดย SDA เป็น H) หรือจะรออ่านค่าที่ส่งมาจาก Slave (Read ระบุค่าโดย SDA เป็น L)

  5. บิตที่ 9 จะเป็นการตอบรับจาก Slave ที่มี Address ตรงกับที่ Master ส่งไป  ถ้ามี Slave ตอบรับ (Acknoledge) โดยการดึงสัญญาณ SDA ลง L  ก็แปลได้ว่ามี Slave พร้อมจะสื่อสารด้วย  แต่ถ้าไม่มี คือ SDA ค้างที่ H แปลว่า (Not Acknowledge)  Master ไม่มีใครคุยด้วย 

 6. หลังจาก Acknowledge กันเรียบร้อย (สมมุติว่ามีสัญญาณตอบรับ) จะเป็นช่วงเวลาที่ SCL ถูกดึงลง L เป็นเวลาสั้นๆ และ SDA จะถูกปล่อยว่าง  ก่อนที่ Slave ที่ติดต่อด้วยจะเริ่มส่งค่า Bit แรกมาที่ SDA

 7. จากนั้นสัญญาณ SCL จาก Master จะปล่อยออกมาเพื่ออ่านค่าสัญญาณบนสาย SDA ในจังหวะที่ SCL เป็น H และรับค่าเช่นนี้ไปเรื่อยๆ จน Data ครบ 8 บิตแรก ตามจังหวะสัญญาณ SCL

 8. เมื่อ Data ครบ 8 บิตแรกแล้ว Master จะให้สัญญาณ Acknowledge โดยดึงสัญญาณเป็น L เพื่อแสดงให้ Slave รู้ว่า Master จะรอ Data อีก 8 บิตต่อไป  (ในกรณีที่ข้อมูลที่ Slave ต้องการส่งเป็นแบบ 16 บิต)

 9. จะกลับเข้าการทำงานในข้อ 6 และอ่านข้อมูลไปจนครบบิตที่ 9 - 16

10. จากนั้นเมื่อถึงจังหวะการ Acknowledge ในบิตที่ 9  คราวนี้ Slave ไม่ต้องการส่งข้อมูลต่อแล้ว เพราะครบ 16 บิตแล้ว  Slave จะ ไม่ตอบสนองแล้ว สาย SDA จะถูกปล่อยให้เป็น H 

11. จากนั้น Master จะรู้แล้วว่าข้อมูลมาครบถ้วน 16 บิต Master ก็จะสั่งหยุดโดยการส่งสัญญาณ ขาขึ้นในสาย SDA พร้อมๆกับ SCL เป็น H  ก็เป็นอันรู้กันว่าคือ Stop bit หมายถึงส่งข้อมูลครบ Byte แรก ซึ่งเป็น Address ของ Slave ตัวที่ Master ต้องการคุยด้วย  


 มันก็เข้าใจยากอยู่ครับ ลองอ่านดูช้าๆ และดูรูป timing diagram ด้านบนประกอบนะครับ
 ทีนี้ถ้าต้องการอ่านคู่มือจริง ต้นตำหรับจาก NXP Semiconductor ก็ไปที่นี่เลยครับ
สังเกตอีกนิดจะเห็นว่า สัญญาณ Start และ Stop จะส่งโดย Master เท่านั้น  โดย Start คือ ให้ SDA เปลี่ยนจาก H เป็น L ในจังหวะที่ SCL เป็น H  ส่วนการ Stop ก็คิอให้ SDA เปลี่ยนจาก L เป็น H ในจังหวะที่ SCL เป็น H    และที่ว่ามาทั้งหมด Master จะเป็นตัวปล่อยสัญญาณ SCL ครับ
 อ่านแล้วคงจะรู้สึกยาก  ก็ไม่ต้องกังวลครับ เพราะเราไม่ต้องเขียนโปรแกรมที่คุมสัญญาณแต่ละเส้นเอง  Arduino เขาทำ Library ที่ชื่อว่า Wire มาให้แล้ว  สบายครับ เราแค่เลือก Address ของอุปกรณ์ให้ถูก แล้วปล่อยให้ Wire.h จัดการส่ง รับค่าให้เราครับ   
  Library ที่ชื่อ wire.h ก็ไม่ต้องไปหา download ให้ยุ่งครับ มันมีอยู่แล้วใน Arduino IDE  เรียกใช้กันได้เลย เพียงแค่ Add ชื่อไว้ตอนเริ่มต้น Sketch ที่จะใช้ก็เท่านั้น  รายละเอียดวิธีใช้งาน Library wire.h ก็ดดูได้ที่นี่ครับ
  Functions ต่างๆ ของ wire.h ก็ดูตามนี้เลยครับ
ทีนี้ I2C หรือ TWI บนบอร์ด Arduino นั้น ก็ต้องเรียกให้ถูกขาที่เขากำหนดนะครับ (ไม่สามารถ Assign เป็นขาอื่นๆ)  ลองดูรายละเอียดตามนีครับ
Board I2C / TWI pins
Uno,Ethernet A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
Due 20 (SDA), 21 (SCL), SDA1SCL1

วันศุกร์ที่ 24 กุมภาพันธ์ พ.ศ. 2560

วงจร RC (RC Circuit)

 

บ่อยครั้งที่เราจะเห็นตัวเก็บประจุกับตัว ต้านทานต่อร่วมกัน ซึ่งการต่อตัวเก็บประจุกับตัวต้านทานร่วมกันจะช่วยให้สามารถควบคุมความเร็ว ของการชาร์จประจุและการคายประจุจากตัวเก็บประจุ ซึ่งเราเรียกการต่อแบบนี้ว่าวงจร RC (RC Circuit)
ตามรูปเป็นวงจร RC โดยแบตเตอรี่จะชาร์จตัวเก็บประจุเมื่อสวิตซ์ปิด โดยตอนแรกแรงดันที่ตกคร่อมตัวเก็บประจุจะเป็นศูนย์ (Vc = 0 V) หลังจากนั้นเมื่อสวิตซ์ปิดจะทำให้กระแสเริ่มไหลผ่าน ดังนั้นกระแสที่ไหลผ่านช่วงนี้จะเท่ากับแรงดันที่ตกคร่อมตัวต้านทาน (Vr) ซึ่งเท่ากับแรงดันจากแหล่งจ่ายไฟหารด้วยค่าของตัวต้านทาน (R), (I = V/R) ซึ่งลำดับการทำงานของวงจรจะเป็นดังนี้
  1. ช่วงเริ่มต้น: เพราะในช่วงเริ่มต้นแรงดันที่ตัวเก็บประจุจะเป็นศูนย์ ดังนั้นแรงดันที่ตกคร่อมตัวต้านทานจะเท่ากับแหล่งจ่ายไฟ
  2. ช่วงเก็บประจุ: ตอนเก็บประจุ ตัวเก็บประจุจำทำงานร่วมกันกับตัวต้านทานเืพ่อควบคุมความเร็วกระแส
  3. ช่วงเก็บประจุเต็ม: เมื่อตัวเก็บประจุชาร์จประจุจนเต็ม กระแสจะหยุดไหล จะไม่มีแรงดันตกคร่อมตัวต้านทานและแรงดันทั้งหมดจะตกคร่อมที่ตัวเก็บประจุ



วงจร RC (RC Circuit)

ถ้าคุณถอดแบตเตอรี่ออก แล้วต่อตัวต้านทานคร่อมตัวเก็บประจุ ตัวเก็บประจุจะทำการคายประจุผ่านตัวต้านทาน เวลานี้แรงดันที่ตกคร่อมตัวต้านทานจะเท่ากับแรงดันที่ตกคร่อมตัวเก็บประจุ (Vr = Vc) ดังนั้นกระแสจะมีค่าเท่ากับ Vc/R  โดยที่ลำดับการทำงานจะเป็นดังนี้
  1. ช่วงเริ่มต้น: เนื่องจากตัวเก็บประจุตอนนี้ชาร์จประจุจนเต็มแล้ว ซึ่งตอนนี้แรงดันตัวเก็บประจุจะเท่ากับแรงดันจากแหล่งจ่ายไฟ และเพราะ Vr = Vc แรงดันตัวต้านทานจะเท่ากับแรงดันตัวเก็บประจุ ซึ่งกระแสในวงจรที่ได้จะเป็น Vsupply / R ดังนั้นตัวเก็บประจุจะเปลี่ยนถ่ายประจุจากแผ่นเพลทหนึ่งไปอีกแผ่นเพลทหนึ่ง อย่างรวดเร็ว
  2. ช่วงการคายประจุ: ตัวเก็บประจุจะทำการคายประจุอย่างต่อเนื่อง แต่ในอัตราที่ช้าลง ส่วนแรงดันและกระแสก็จะตกลงไปด้วย
  3. ช่วงคายประจุหมด: เมื่อตัวเก็บประจุทำการคายประจุจนหมด กระแสจะหยุดไหลและทำให้แรงดันที่ตกคร่อมตัวต้านทานและตัวเก็บประจุเป็นศูนย์
ซึ่งถ้าเรานำค่าแรงดันกับเวลาของการเก็บประจุและการคายประจุมาพล๊อตกรา ฟจะได้กราฟตามรูปข้างล่าง ซึ่งความเร็วในการชาร์จประจุและการคายประจุ จะขึ้นอยู่กับขนาดของตัวต้านทานและตัวเก็บประจุ ยิ่งมีค่ามาก การเก็บและการคายประจุก็จะยิ่งใช้เวลานานมาก กลับกันยิ่งตัวต้านทานและตัวเก็บประจุมีค่าน้อยก็ยิ่งเก็บประจุและคายประจุ ได้เร็ว



กราฟแรงดันตกคร่อมตัวเก็บประจุ

การคำนวณหาค่าคงที่เวลา RC (RC Time Constant)

คุณสามารถที่จะปรับเปลี่ยนเวลาของการเก็บประจุและการคายประจุได้ โดยการเปลี่ยนค่าของตัวต้านทานและตัวเก็บประจุ โดยเมื่อคุณนำค่าตัวต้านทาน (Ohm) คูณกับตัวเก็บประจุ (Farad) คุณจะได้ค่าคงที่มาค่าหนึ่งซึ่งค่านี้เราเรียกว่าค่า RC time constant โดยใช้สัญลักษณ์เป็นตัว T ดังนั้น
T = R x C
ซึ่งจากการทดลอง เวลาในการเก็บประจุและการคายประจุจนเสร็จสิ้นจะใช้เวลาประมาณ 5T หรือห้าเท่าของค่า RC (5 x R x C) ซึ่งเมื่อเวลาผ่านไป 1T ตัวเก็บประจุจะสามารถเก็บประจุหรือคายประจุได้ประมาณสองในสามของขนาดของตัว เก็บประจุ
ยกตัวอย่างเช่น คุณต่อตัวต้านทานขนาด 2 MΩ กับตัวเก็บประจุขนาด 15 µF คุณจะได้ค่า RC time เท่ากับ
T = 2,000,000 x 0.000015 = 30 วินาที
ดังนั้นคุณจะรู้แล้วว่าวงจร RC ที่คุณจะใช้ จะใช้เวลาประมาณ 150 วินาที ( 5T) ในการที่จะทำให้ตัวเก็บประจุชาร์จประจุจนเต็มหรือคายประจุจนหมด ซึ่งถ้าคุณต้องการให้เร็วกว่านั้นคุณอาจจะลดขนาดของตัวต้านทานหรือตัวเก็บ ประจุลงก็ได้

ค่าความต้านทานของตัวเก็บประจุ (Capacitive Reactance)

ค่าความต้านทานของตัวเก็บประจุ (Capacitive Reactance)


ก่อนหน้านี้เราได้เรียนรู้มาแล้วว่าตัวเก็บประจุมีคุณลักษณะ ชาร์จและดิสชาร์จประจุ (Charging and Dischagrging) และเราก็รู้ว่าตัวเก็บประจุจะป้องกันไม่ให้ไฟฟ้ากระแสตรงไหลผ่าน (DC Current) ยกเว้นช่วงเวลาสั้นๆตอนเริ่มชาร์จประจุ แต่เมื่อเราใช้ไฟฟ้ากระแสสลับจ่ายให้กับวงจรที่มีตัวเก็บประจุอยู่ กระแสจะวิ่งไหลผ่านได้โดยการชาร์จและดิสชาร์จตามที่ได้กล่าวไปในตอนการทำงานของตัวเก็บประจุ ซึ่งการที่จะรู้ว่ากระแสไหลผ่านในวงจรมีเท่าไหร่นั้น เราสามารถใช้กฏของโอห์ม (I = V / R) มาคำนวณได้ เพียงแต่ค่าความต้านทานของตัวเก็บประจุ (Capacitive Reactance) จะเปลี่ยนแปลงไปตามความถี่ของแหล่งจ่ายและขนาดของตัวเก็บประจุ ตามสูตรข้างล่าง ซึ่งเราจะใช้สัญลักษณ์ Xc แทนความหมายของความต้านทานของตัวเก็บประจุ
Xc = 1 / (2 x ∏ x f x C)
โดย f จะมีหน่วยเป็นเฮิร์ซ (Hz) ของเแหล่งจ่ายแรงดันไฟสลับ และ C มีหน่วยเป็นฟารัด (F) และค่า ∏ เป็นค่าคงที่เท่ากับ 3.14 ซึ่งคุณสามารถประมาณค่า 2∏ = 6.28 และแทนค่าในสูตรจะได้
Xc = 1 / (ุ6.28 x f x C)
โดยคุณจะห็นได้จากสูตรว่า ยิ่งความถึ่มีค่ามากหรือตัวเก็บประจุมีค่ามากจะทำให้ค่าความต้านทานของตัว เก็บประจุมีค่าน้อยลง ซึ่งถ้าคุณจ่ายไฟกระแสตรงที่ไม่มีความถึ่ (f = 0 Hz) จะทำให้ค่าความต้านทานของตัวเก็บประจุเป็นอนันต์(Infinity) ซึ่งกระแสจะไม่สามารถไหลผ่านได้ ตามที่เราได้เรียนรู้กันไป
ตัวอย่าง คำนวณค่าความต้านทานของตัวเก็บประจุ ของตัวเก็บประจุขนาด 0.1 µF และแหล่งจ่ายไฟ AC มีความถี่ 20 KHz
Xc = 1 / (6.28 x 20,000 x 0.0000001)
≈ 80 Ω
ในกรณีที่คุณลดความถึ่ลงมาเหลือ 1 Hz ค่าความความต้านทานตัวเก็บประจุจะเปลี่ยนเป็น

Xc = 1 / (6.28 x 1 x 0.0000001)
≈ 1.6 MΩ

กฏของโอห์มสำหรับตัวเก็บประจุ


ค่าความต้านทานตัวเก็บประจุ ถูกวัดในหน่วยโอห์ม ซึ่งนั่นหมายความว่าเราสามารถใช้กฏของโอห์มได้ จากตัวอย่างที่แล้วถ้าเราใช้ความถี่ 1 Hz กับตัวเก็บประจุ 0.1 µF เราจะได้ค่า Xc = 1.6 MΩ และค่าแรงดันสูงสุดที่ใช้ Vpeak = 5 V คุณจะได้ค่ากระแสสูงสุดที่ไหลในวงจรเท่ากับ
Ipeak = Vpeak / Xc
= 5 V / 1.6 MΩ
= 0.0625 A (62.5 mA)
ซึ่งถ้าความถี่น้อยๆ หรือไม่มีความถี่เลย(กระแสตรง)  จะไม่สามารถทำให้กระแสไหลผ่านได้ตามกราฟ
ดังรูป

ชนิดของ IC

ชนิดของ IC
1. Analog IC (ไอซีแบบอนาล็อก) บางทีเรียกว่า ไอซีเชิงเส้น Linear IC (ลิเนียร์ ไอ ซี) เป็นไอซีที่ทำหน้าที่ในการขยายสัญญาณ และควบคุมแรงดันไฟฟ้าชนิดของไอซี ที่ทำหน้าที่ขยายสัญญาณ เรียกว่า OP Amp (ออปแอมป์) หรือ Operation Amplifier (โอเปอเรชั่น แอมพลิไฟเออะ) เป็นวงจรรวมที่ประกอบขึ้นทรานซิสเตอร์หลายๆตัวรวมอยู่ภายใน IC ตัวเดียว จึงทำให้ไอซีออปแอมป์มีอัตราขยายสูงมาก
2. Digital IC (ไอซีแบบดิจิตอล) ไอซีดิจิตอลเป็น ไอซีที่ทำหน้าที่ในการสวิทช์ทางดิจิตอล และไมโครโพรเฟส

รู้จักกับไอซีดิจิตอล

มาทำความรู้จักกับไอซีดิจิตอล (digital)กันก่อนครับ
ไอซีดิจิตอล เป็น ไอซีที่ทำงานได้กับสัญญาณดิจิตอล โดยภายในตัวไอซีดิจิตอลเองจะประกอบด้วยเกตพื้นฐานหลายตัว โดยตัวของไอซีประเภทนี้จะเป็นไอซีแบบตีนตะขาบหรือตัวถังแบบดิฟ(DIP) หรือมีตัวถังแบบอื่นด้วยเช่นแบบ soic เป็นต้น ในที่นี้จะขอกล่าวถึงตัวถังแบบตีนตะขาบครับเพราะเป็นตัวถังที่เรานิยมนำมา ใช้งาน ใช้ทดลองเรียนรู้ ตัวถังดังกล่าวจะมีตำแหน่งขาเรียงลำดับ จากตำแหน่งขาที่ 1 ไปจนถึงลำดับขาสุดท้าย (ดูจากภาพประกอบ) โดยทั่วแล้ว ตัวถังดังกล่าวจะมีรอบบากตรงส่วนหัวเพื่อแสดงตำแหน่งอยู่แล้ว และขาที่อยู่ทางด้าน ซ้ายมือ จะเป็นตำแหน่งขาที่ 1 และจะไล่เรียงลำดับไปเรื่อยๆจนถึงตำแหน่งขาสุดท้ายซึ่งจะอยู่ด้านขวามือของ รอยบาก ไอซีดิติตอลจะมีจำนวนขาไม่เท่ากันขึ้นอยู่กับเบอร์นั้นๆ โดยทั่วไปจะมีตั้งแต่ 14 , 16 , 18 , 20 เป็นต้น

สัญญาณดิจิตอล (digital Singal)
สัญญาณดิจิตอลเป็นสัญญาณที่ประกอบด้วยสัญญาณ เพียง 2 สะถานะ คือ สูง-ต่ำ หรือ High-low หรือ เราอาจเขียนด้วย เลข 1 และ 0 ดังนั้นในบทความต่อๆไปในเรื่องของดิจิตอลหากกว่าถึงสัญญาณดิจิตอลจะเขียนแทนด้วย 1 และ 0 ครับ
flash
สัญญาณที่จะเข้าและออกจากไอซีดิจิตอลจะต้องเป็นสัญญาณดิจิตอลเท่านั้น

flash
เปรียบเทียบสัญญาณ 0 กับ 1

สัญญาณดิจิตอลจะมีระดับแรงดันในการทำงานแต่ต่างกันไป โดยทั่วไปสัญญาณที่เป็น 0 จะมีแรงดันที่ 0 โวลต์ และ สัญญาณ ที่เป็น 1 จะมีแรงดันที่ 5 โวลต์ (เทียบกับ IC TTL) แต่ระดับการทำงานนี้อาจแตกต่างกันตามประเภทของไอซีดิจิตอล



ไอซีดิจิตอลประเภท TTL
TTL มาจาก Transistor Transistor Login เป็นไอซีที่โครงสร้างภายในจะเป็นวงจรรวมโดยผลิตมาจาก ทรานซิสเตอร์ผลิตออกมาครั้งแรกในปี ค.ศ. 1965 โดยบริษัท Texas Insnstrument และต่อมาได้มีบริษัทอื่นๆผลิตขึ้นตาม และจึงมีความจำเป็นต้องมีมาตราฐานแบบเดียวกันคือสามารถใช้ทดแทนกันได้ ไอซี TTL จะมี code โดยใช้ตัวเลข 4-5 หลัก แต่ 2 หลักแรกจะนำด้วย 74 และ 2 หลักต่อไปจะบอกถึงฟังก์ชันการทำงานในปัจจุบัน ไอซี TTL ยังแบ่งกลุ่มย่อยออกเป็นหลายชนิดคือ

ไอซี TTL จะใช้ไฟเลี้ยงวงจรที่ระดับแรงดัน +5V และระดับสัญญาณ ขาเข้า และ ขาออก คือ 0V และ 5V ด้วยเช่นเดียวกัน

TTL และ CMOS 74 .ใช้แหล่งจ่าย 5V ส่วน CMOS 40สามารถใช้แหล่งจ่ายได้ 5 - 12V หรือมากว่า



ไอซีดิจิตอลประเภท CMOS
CMOS มาจาก Complememtary Metal Oxide Semiconductor เป็น ไอซีที่มีโครงสร้างภายในเป็นวงจรรวมโดยผลิต จากทรานซิสเตอร์แบบ N-MOS และ P-MOS โดยมีข้อดีคือสูญเสียกำลังงานต่ำ ทรานซิสเตอร์แบบMOSจะถูกใช้ในการสร้างวงจรรวม ขนาดใหญ่ และมีความเร็วในการทำงานเร็วมาก เช่น ในการสร้างอุปกรณ์ไมโครโปรเซสเซอร์ และ หน่วยความจำ ซึ่งจัดเป็นวงจรรวมประเภท VLSI
ไอซีซีมอสจะแบ่งกลุ่มย่อยคือ 74HC xx เป็น High-speed CMOS Logic
74HCT xx เป็น High-speed CMOS /TTL interface
74Cxx เป็น CMOS Logic

ไอซี CMOS กลุ่ม 74 จะใช้ไฟเลี้ยงวงจรที่ระดับแรงดัน +5V และระดับสัญญาณ ขาเข้า และ ขาออก คือ 0V และ 5V ด้วยเช่นเดียวกัน ( กลุ่ม 40 จะใช้ระดับแรงดันไปเลี้ยงสูงถึง15V)

40xx หรือ 14xxx เช่น 4009 ไอซีซีมอสประเภทนี้ รับความนิยมอย่างมาก กินไฟน้อย และสามารถทำงานที่ระดับแรงดันสูงถึง 15 โวลต์ได้ แต่มีข้อเสียคือทำงานช้ากว่าแบบ TTL (จึงผลิตซีมอสความถี่สูงขึ้นมาแทนคือ 74HC ) ดังนั้น เราจึงเห็นชุดคิทส่วนใหม่นิยมใช้ไอซีซีมอสกลุ่ม 40 กันมากเพราะสามารถใช้ไฟเลี่ยงจากถ่าน 9V ได้อย่างสบาย



เกตภายในไอซี
ภายในไอซีทั้ง TTL และ CMOS จะมีเกตที่สร้างจากทรานซิสเตอร์ถูกบรรจุอยู่ภายในซึ่งจะมีทั้งเกตมาตราฐาน เกตพิเศษแล้วแต่คุณสมบัติของตัว ไอซีนั้นๆ
เกตที่สำคัญพื้นฐานคือ
AND gate OR gate Inverter gate
NAND gate NOR gate
Exclusive-OR gate
Exclusive-N OR gate
// เกตแบบต่างๆจะกล่าวถึงในหัวข้อ เกตแบบต่างๆและตารางความจริง //



ตัวอย่างเบอร์ไอซี
74LS02 , Quad 2-input NOR Gate
74LS10 , Triple 3-Input NAND Gate
74HC04 , Hex Inverter
74HC373 , Octal D Latch
4001 , Quad 3 Input NOR Gate
4081 , Quad 2 Input AND Gate
4042 , Quad D-Latch
4512 , 8 Channel Data Selector
ข้อมูลชื่อและชนิดดูได้จากบทความ ชนิดการใช้งาน IC TTL 74LS และ CMOS 40

การอ่านค่าตัวเก็บประจุ

ตัวเก็บประจุ
 บางตัวจะพิมพ์บอกค่าตัวเก็บประจุที่ตัว อุปกรณ์เลย ซึ่งถ้าจะทำอย่างนั้นได้ต้องเป็นตัวเก็บประจุที่มีเนื้อที่พอที่จะให้พิมพ์ ค่าไว้บนตัวอุปกรณ์ได้ รวมถึงค่าแรงดันที่ใช้งาน
แล้วในกรณีที่พื้นที่ของตัวเก็บประจุไม่พอหรือไม่เหมาะที่จะพิมพ์ตัว หนังสือเยอะแยะ จะทำยังไง! ก็มีคนคิดค้นรหัส 3 หลักพิมพ์ติดไว้ที่ตัวเก็บประจุเพื่อเป็นการบอกค่าในหน่วยพิโคฟารัด(pF) เท่านั้น โดยที่รหัสสองตัวแรกจะเป็นจำนวนตัวเลข ส่วนตำแหน่งที่ 3 จะบอกเป็นจำนวนเลขศูนย์ จากนั้นก็ใส่หน่วยพิโคฟารัดต่อท้ายได้เลย เช่น 103 จะเท่ากับ 10000 pF แต่บางตัวก็บอกแค่2 รหัส นั่นหมายความว่าค่าของตัวเก็บประจุไม่มีเลขศูนย์ต่อท้าย ให้ใช้ค่า 2 หลักแรกเป็นค่าตัวเก็บประจุเลย เช่น 22 จะเท่ากับ 22 pF ซึ่งไม่มีตำแหน่งที่ 3 ก็ไม่ต้องใส่เลขศูนย์ไป ส่วนหน่วยก็ยังเหมือนเดิมคือ pF.
สำหรับตัวเก็บประจุที่มีค่ามากกว่า 1000 pF ทางผู้จำหน่ายอุปกรณ์ส่วนใหญ่จะมีรายการบอกเป็น uF สำหรับใครที่ยังไม่ชำนาญในเรื่องหน่วยอาจจะต้องหัดหน่อย เพราะเวลาอ่านค่าที่ได้จากตัวอุปกรณ์จะมีหน่วยเป็นพิโคฟารัด ซึ่งผมได้เตรียมค่าตารางแปลงหน่วยของตัวเก็บประจุไว้ข้างล่างแล้ว ซึ่งเป็นรายการที่ใช้บ่อยๆ ส่วนใครไม่อยากจำหรือนำมาดูบ่อยๆ ต้องหัดแปลงหน่วยให้เป็นนะครับ
  Capacitor Value Referrence
 Marking  Value
 nn (number 01 – 99)  nn pF
101  100 pF
102  0.001 μF
103  0.01 μF
104  0.1 μF
221  220 pF
222  0.0022 μF
223  0.022 μF
224  0.22 μF
331  330 pF
332  0.0033 μF
333  0.033 μF
334  0.33 μF
471  470 pF
472  0.0047 μF
473  0.047 μF
474  0.47 μF

สำหรับการบอกค่าตัวเก็บประจุยัง มีอีกแบบที่ไม่ค่อยได้เห็นกัน โดยใช้ตัวเลข 2 ตัวและตัวอักษร ยกตัวอย่างเช่น 4R1 ค่าที่ได้ให้เปลี่ยน R เป็นจุดทศนิยมจะได้ค่า 4.1 ซึ่งการบอกแบบนี้จะไม่บอกหน่วยมาด้วย ซึ่งอาจจะเป็นได้ทั้งไมโครฟารัดและพิโคฟารัด อันนี้ต้องลองเอาไปวัดกับมิเตอร์ที่วัดค่าตัวเก็บประจุได้
มาถึงตัวสุดท้ายคือค่าความผิดพลาด โดยจะบอกค่าเป็นตัวอักษรตำแหน่งที่ 4 หลังตัวเลขสามหลักแรก เช่น 103Z จะมีความหมายว่า ซึ่งค่าที่อ่านได้อาจจะมีค่า +80% หรือ -20% ของ0.01 μF ซึ่งค่าความผิดพลาดและความหมายของแต่ละตัวอักษร แสดงตามตารางข้างล่าง
  Capacitor Tolerance Markings
 Code  Tolerance
B  +/– 0.1 pF
C +/– 0.25 pF
D +/– 0.5 pF
F +/– 1 per cent
G +/– 2 per cent
J +/– 5 per cent
K +/– 10 per cent
M +/– 20 per cent
Z + 80 per cent, –20 per cent

capacitor-code

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

capacitor-types
หน้าตาของตัวเก็บประจุแบบต่างๆ