ESL - Learning Space

Embed Size (px)

Citation preview

  • 8/19/2019 ESL - Learning Space

    1/4

    2/18/2016 ESL - Learning Space

    http://cpre.kmutnb.ac.th/esl/learning/index.php?article=pcf8574a-i2c

    "Embedded Space"

    Think − Do − Learn − Share

    การใช  งานไอซ    PCF8574 / PCF8574A สร า ง พ อ ร ต I/O ขนาด 8 บ ต ให Arduino

    ในกรณท ⡅ต องการเช    ⡅อมตอระหวางไมโครคอนโทรลเลอร (เช น บอรด Arduino) และอปกรณอ ⡅นแบบดจทัล สามารถเช    ⡅อมตอได โดยตรง ตามจานวนขาส  ัญญาณท ⡅ต องการใช  แตจานวนขา I/O ของไมโครคอนโทรลเลอรท ⡅ต องใช  จะเพ ⡅มข  ꪍนตามจานวนส  ัญญาณ เทคนคหน ⡅งท ⡅ช วยประหยัดขา I/O ของไมโครคอนโทรลเลอรคอ การใช  ไอซ   ขยายพอรต หรอเพ ⡅มจานวนขาI/O (หรอท ⡅เรยกวา I/O Port Expander) บทความน  ꪍกลาวถง การใช  งานไอซ    PCF8574A (ของบรษัท NXP) รวมกับบอรดArduino โดยจะทดลองตอวงจรบนเบรดบอรด และใช  ขา I/O ของไอซ    เปนเอาตพตอยางเดยว

     ไอซ     PCF8574 / PCF8574A

    ไอซ   อยางเช น PCF8574 I/O Port Expander สามารถนามาใช  เช    ⡅อมตอ I/O แบบดจทัลไดถง 8บต และเช    ⡅อมตอแบบบัสI2C ซ    ⡅งใช  ส  ัญญาณเพยงสองเส  น (SCL และ SDA) เทานꪍัน ดังนꪍันจงใช  ขาดจทัล I/O ของไมโครคอนโทรลเลอรเพยงสองเส  น ไมโครคอนโทรลเลอรทาหนาท ⡅เปน I2C Master (เปนฝ ายเร ⡅มตดตอส    ⡅อสารและกาหนดจังหวะการทางานดวยส  ัญญาณclock) ในขณะท ⡅ไอซ    PCF8574ทางานเปน I2C Slave (เป นฝ ายคอยตอบสนองตอการตดตอส    ⡅อสารจาก I2C Master)นอกจากนัꪍน ถ าต องการมากกวา 8 บต กสามารถใช  ไอซ    PCF8574 ได หลายตัวในระบบบัสเดยวกัน เพยงแตกาหนดหมายเลขท ⡅อย ของไอซ   แตละตัวไดตางกัน (เรยกท ⡅อย น  ꪍวา I2C Slave Address) ตัวถังของไอซ   มขา A2,A1,A0 ส าหรับใช  กาหนดคาให 3 บตลางจากทัꪍงหมด 7บตของเลขท ⡅อย  (7-bit Address) ดังนꪍันในบัส I2C เดยวกัน สามารถตอไอซ   น  ꪍได จานวนถง 8 ตัว ไอซ    PCF8574 และ PCF8574A ทางานไดเหมอนกัน ตางกันท ⡅บตของหมายเลขท ⡅อย  หมายเลขท ⡅อย ขนาด7 บต มรปแบบดังน  ꪍ PCF8574: "0100xxx" และ  PCF8574A: "0111xxx" โดยท ⡅ xxx คอ 3 บต ท ⡅จะถกกาหนดโดยขา A2, A1,

    A0

    ข อมลเช   ง เ ท ค น ค เ ก  ⡅ย ว กบัไอซ   โดยสรป

    ช วงแรงดันไฟเล  ꪍยง: 2.5V ถง 6Vกาหนดคาบตส าหรับเลขท ⡅อย ได  3 บต (ขา A2, A1,A0)ใช  ความถ ⡅ SCL ได เพยง 100kHzขา I/O ม 8 บต ใช  งานไดแบบดจทัลและสองทศทาง (bidirectional)ปรมาณกระแสไหลแบบ Sink ได ขาละไมเกน 25mA แตปรมาณกระแสไหลแบบ Source ได ขาละไมเก น 0.3mA

    ไอซ    PCF8574 และ PCF8574A (ส าหรับตัวถังแบบ PDIP-16) มขาดังน  ꪍ

     

  • 8/19/2019 ESL - Learning Space

    2/4

    2/18/2016 ESL - Learning Space

    http://cpre.kmutnb.ac.th/esl/learning/index.php?article=pcf8574a-i2c

    Pin 1 = A0 เปนขาอนพต Address Input 0 (ส าหรับกาหนดคาใหหมายเลขท ⡅อย ส าหรับบตท ⡅ 0)Pin 2 = A1 เปนขาอนพต Address Input 1 (ส าหรับกาหนดคาใหหมายเลขท ⡅อย ส าหรับบตท ⡅ 1)Pin 3 = A2 เปนขาอนพต Address Input 2 (ส าหรับกาหนดคาใหหมายเลขท ⡅อย ส าหรับบตท ⡅ 2)Pin 4 = P0 เปนขา Digital I/O 0Pin 5 = P1 เปนขา Digital I/O 1Pin 6 = P2 เปนขา Digital I/O 2Pin 7 = P3 เปนขา Digital I/O 3Pin 8 = VSS เปนขา Supply GroundPin 9 = P4 เปนขา Digital I/O 4Pin 10 = P5 เปนขา Digital I/O 5Pin 11 = P6 เปนขา Digital I/O 6Pin 12 = P7 เปนขา Digital I/O 7Pin 13 = /INT interrupt output (active LOW) เปนขาเอาตพต (open-drain output) ให ตอ pull-up ด วยPin 14 = SCL เปนขา Serial Clock Line (SCL) ของบัส I2CPin 15 = SDA เปนขา Serial Data Line (SDA) ของบัส I2CPin 16 = VDD เปน Supply Voltage ส าหรับปอนแรงดันไฟเล  ꪍยง

    ศ   กษาขอมลเพ ⡅มเตมไดจาก PCF8574 Datasheet 

    ในการทดลอง จะตอวงจรบนเบรดบอรดตามผังวงจรตอไปน  ꪍ ส  ังเกตวา ได เลอกใช  ตัวต านทานแบบ R-Pack ขนาด 330 โอหม ทาใหสะดวกในการตอวงจร ขา I/O ของไอซ    PCF8574A จะถกใช  เปนเอาตพต และเม ⡅อขาใดมลอจกเปน LOW จะทาให LEDท ⡅ตอกับขาดังกลาว "ตด" (มกระแสไหลจาก VCC = +5V ไปผานตัวต านทาน และ LED ไปยังขาของไอซ   )

    http://cpre.kmutnb.ac.th/esl/learning/pcf8574a-i2c/pcf8574_datasheet.pdf

  • 8/19/2019 ESL - Learning Space

    3/4

    2/18/2016 ESL - Learning Space

    http://cpre.kmutnb.ac.th/esl/learning/index.php?article=pcf8574a-i2c

    Arduino Sketch

    ส าหรับการเช    ⡅อมตอส    ⡅อสารกับไอซ    PCF8574A ด วย Arduinoผานบัส I2C สามารถใช  ไลบราร ⡅ Wireของ Arduino ได  ซ    ⡅งจะทาใหการเขยนโคดทาไดงายข  ꪍน ข อควรระวังคอ การเลอกใช  ขา SDA และ SCL ให ถกต อง เม ⡅อนาไปตอวงจร และการกาหนดหมายเลขท ⡅อย  (7-bit Slave Address) ถ ากาหนดคาในโคดไมถกต อง จะทาใหไมสามารถส    ⡅อสารกับไอซ   ได  

    พฤตกรรมการทางานของโค ดมดังน  ꪍ ฟังกช  ัน running_led_light() จะวนลปคอยทาหนาท ⡅ส งข อมลไปยังไอซ    ซ    ⡅งเปนขอมล 8

    บตส าหรับขา I/O และเปนตัวกาหนดสถานะ "ตด" หรอ "ดับ" ของ LEDแตละดวง ในตัวอยางน  ꪍ จะส งคา 8บต ในรปแบบท ⡅ทาใหการทางานของ LEDปรากฏในลักษณะของ "ไฟว ⡅ง"

    // Author: RSP @KMUTNB// Date: 2013‐10‐27// Board: Arduino Uno / Leonardo / Mega2560// Arduino IDE: version 1.0.5// This sketch shows how to use send 8‐bit data to a PCF8574A IC// which is used to turn on/off eight LEDs.

    // Arduino Uno: SDA = A4, SCL = A5// Arduino Leonardo: SDA = D2, SCL = D3// Arduino Mega2560: SDA = D20, SCL = D21// Connect: 2.2k or 4.7k pull‐up resistors to SDA and SCL lines

    // Use VCC=5V for PCF8574A// PCF8574A pins in output mode should be used to sink current (up to 25mA).// Don't use its I/O pin to source current!// Pin P0..P7 are connected to 8x LED+330R (current sink).

    #include // use the Wire library// See: http://arduino.cc/en/reference/wire

    // connect address pins: A0=0 (GND), A1=0 (GND), A2=0 (GND)#define ADDR_BITS (0B000) // A0=0,A1=0,A2=0#define I2C_SLAVE_ADDR ((0B0111000) | ADDR_BITS) // 7‐bit address

    /*TWBR = ((F_CPU / TWI_FREQ) ‐ 16) / 2;

    For TWI_FREQ = 100000 and F_CPU = 16000000:=> TWBR = 72

    For TWI_FREQ = 400000 and F_CPU = 16000000:=> TWBR = 12

    */

    void setup() {Wire.begin();// TWBR = 12; // for 400kHz

    }

    void writeOutput( byte value ) {Wire.beginTransmission( I2C_SLAVE_ADDR );Wire.write( ~value ); // inverted logic (bitwise inverting)Wire.endTransmission();

    }

    void running_led_light() {static byte value = 0x01;static byte dir = 1;static byte dly = 100;while(true) {

    writeOutput ( value );if (dir) { // forward

    value = (value > 7);} else { // backward

    value = (value >> 1) | ((value

  • 8/19/2019 ESL - Learning Space

    4/4

    2/18/2016 ESL - Learning Space

    http://cpre.kmutnb.ac.th/esl/learning/index.php?article=pcf8574a-i2c

    ไปหนารายการบทความ  / Back to the article list ห องปฏบัตการระบบสมองกลฝังตัว ภาควชาวศวกรรมไฟฟาและคอมพวเตอร คณะวศวกรรมศาสตร มหาวทยาลยัเทคโนโลยพระจอมเกล าพระนครเหนอ  (KMUTNB)Embedded Systems Lab (ESL) / Computer Engineering ProgramDepartment of Electrical and Computer Engineering (ECE)Faculty of Engineering, KMUTNB, Bangkok / Thailand

      dly ‐= 10; // decrement delay by 10if (dly < 10) {

    dly = 100;writeOutput( 0xFF );delay(1000);

    }}else if (value == 0x80 && dir == 1) {

    dir = 0; // forward}delay( dly );

    }}

    void loop() {running_led_light();

    }//////////////////////////////////////////////////////////////////

    รปแสดงการตอวงจรบนเบรดบอรด

    แก ไขครัꪍงลาสด (Last Update): 27 Oct. 2013

    เผยแพรภายใตลขส   ทธ  㧞 / This work is licensed under: Creative Commons Attribution-NonCommercial 3.0 Unported

    © 2007-2016 Embedded System Lab | Maintained by RSP

    http://creativecommons.org/licenses/by-nc/3.0/http://cpre.kmutnb.ac.th/esl/learning/index.php