ທ່ານໄດ້ຍິນແນ່ນອນກ່ຽວກັບເລື່ອງນີ້ IC PCF8574, ຊິບເຊັດທີ່ສາມາດຊື້ແຍກຕ່າງຫາກຫຼືຕິດຕັ້ງຢູ່ເທິງໂມດູນຄືກັບຫຼາຍໆລຸ້ນອື່ນໆ ສ່ວນປະກອບເອເລັກໂຕຣນິກ ເພື່ອອໍານວຍຄວາມສະດວກໃຫ້ແກ່ການເຊື່ອມໂຍງຂອງທ່ານກັບກະດານ Arduino ຂອງທ່ານ. ໃນກໍລະນີນີ້, ມັນແມ່ນການຂະຫຍາຍວັດສະດຸປ້ອນເຂົ້າແລະຜົນໄດ້ຮັບ ສຳ ລັບ ລົດເມ I2C.
ທ່ານອາດຈະຄິດວ່າ Arduino ມີຂອງຕົນເອງແລ້ວ ລົດເມ I2C ປະສົມປະສານ, ແລະມັນແມ່ນຄວາມຈິງ. ແຕ່ PCF8574 ສາມາດຊ່ວຍຂະຫຍາຍລົດເມນັ້ນກາຍຂີດ ຈຳ ກັດຂອງກະດານພັດທະນາຂອງທ່ານ, ເຊິ່ງສາມາດເປັນປະໂຫຍດຫຼາຍຕໍ່ຜູ້ຜະລິດບາງຄົນທີ່ຕ້ອງການຫຼາຍກວ່າສິ່ງທີ່ Arduino ສະ ໜອງ ໃຫ້.
ລົດເມ I2C ແມ່ນຫຍັງ?
ຊື່ I2C ແມ່ນມາຈາກ ວົງຈອນປະສົມປະສານລະຫວ່າງກັນ ຫຼືວົງຈອນປະສົມປະສານລະຫວ່າງກັນ. ຮຸ່ນ 1.0 ຂອງມັນຖືກສ້າງຂື້ນໃນປີ 1992 ໂດຍ Philips. ຫຼັງຈາກນັ້ນວິນາທີ 2.1 ຈະມາໃນປີ 2000 ແລະມື້ນີ້ມັນໄດ້ກາຍເປັນມາດຕະຖານ (ທີ່ 100 kbit / s, ເຖິງແມ່ນວ່າມັນອະນຸຍາດສູງເຖິງ 3.4 Mbit / s ສູງສຸດ) ເມື່ອສິດທິບັດ ໝົດ ອາຍຸໃນປີ 2006 ແລະສາມາດ ນຳ ໃຊ້ໄດ້ຢ່າງເສລີ.
ໃນປະຈຸບັນມັນຖືກນໍາໃຊ້ຢ່າງກວ້າງຂວາງໃນອຸດສາຫະກໍາ ສໍາລັບການສື່ສານ, ແລະຍັງໄດ້ຮັບການຍົກຍ້ອງຫຼາຍຈາກບັນດາຜູ້ຜະລິດ ສຳ ລັບໂຄງການຂອງພວກເຂົາໃນການສື່ສານກັບຜູ້ຄວບຄຸມຈຸລະພາກແລະອຸປະກອນເສີມຕ່າງໆທີ່ປະສົມປະສານເຂົ້າໃນ IC ດຽວ.
El ລົດ I2C ແມ່ນລົດເມ ເປັນທີ່ຮູ້ຈັກດີຈາກການສື່ສານ serial. ມັນໃຊ້ອະນຸສັນຍາການສື່ສານແບບປະສານງານທີ່ມີພຽງແຕ່ 2 ຊ່ອງທາງ (ມີຊ່ອງທາງທີສາມ, ແຕ່ມັນຖືກບວກກັບການອ້າງອີງຫຼື GND), ໃນຄວາມເປັນຈິງມັນຍັງຖືກເອີ້ນວ່າ TWI (Two Wire Interface):
- ໜຶ່ງ ສຳ ລັບໂມງ (SCL).
- ອື່ນໆ ສຳ ລັບຂໍ້ມູນ (SDA).
ນັ້ນ ໝາຍ ຄວາມວ່າ ຕົ້ນສະບັບແລະສໍາລອງ ພວກເຂົາສົ່ງຂໍ້ມູນຜ່ານສາຍຫລືສາຍດຽວກັນ, ເຊິ່ງຄວບຄຸມໂດຍສາຍ ທຳ ອິດທີ່ສ້າງສັນຍານໂມງ. ແຕ່ລະເຄື່ອງອຸປະກອນທີ່ເຊື່ອມຕໍ່ກັບລົດເມ I2C ຈະມີທີ່ຢູ່ທີ່ເປັນເອກະລັກໄດ້ຮັບມອບ ໝາຍ, ເພື່ອໃຫ້ການ ນຳ ສົ່ງຕໍ່ໂດຍກົງ. ແຕ່ມັນບໍ່ແມ່ນສິ່ງ ຈຳ ເປັນທີ່ວ່າຄູແມ່ນຜູ້ດຽວກັນ (ຄູຫຼາຍຄົນ), ມັນແມ່ນຜູ້ທີ່ເປັນຜູ້ລິເລີ່ມການໂອນຍ້າຍຕະຫຼອດເວລາ.
ດັ່ງທີ່ຂ້າພະເຈົ້າໄດ້ອະທິບາຍຢູ່ໃນບົດຂຽນກ່ຽວກັບ Arduino I2C ຂ້າພະເຈົ້າໄດ້ອ້າງອີງກ່ອນຫນ້ານີ້, ແຕ່ລະກະດານມີການເຊື່ອມຕໍ່ I2C ເຫຼົ່ານີ້ຢູ່ໃນສະຖານທີ່ຕ່າງໆ. ມັນແມ່ນບາງສິ່ງບາງຢ່າງທີ່ທ່ານຕ້ອງຈື່ໄວ້ເພື່ອຈະສາມາດໃຊ້ມັນໄດ້ຢ່າງຖືກຕ້ອງໃນແຕ່ລະຮຸ່ນຂອງແຜ່ນ:
- Arduino UNO: SDA ແມ່ນຢູ່ໃນ A4 ແລະ SCK ໃນ A5
- ArduinoNano: ຄືກັນກັບທີ່ຜ່ານມາ.
- Arduino MiniPro: ດຽວກັນ.
- Mega Arduino: SDA ແມ່ນໃສ່ pin 20 ແລະ SCK ໃນວັນທີ 21.
- ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບແຜ່ນ.
ທ່ານຮູ້ແລ້ວວ່າທ່ານສາມາດໃຊ້ I2C ສຳ ລັບການແຕ້ມຮູບຂອງທ່ານໄດ້ຢ່າງງ່າຍດາຍ, ນັບຕັ້ງແຕ່ ຫໍສະຫມຸດ Wire.h ມີ ໜ້າ ທີ່ຕ່າງໆ ສຳ ລັບການສື່ສານແບບນີ້:
- ເລີ່ມຕົ້ນ (): ເລີ່ມຕົ້ນຫ້ອງສະຫມຸດລວດແລະລະບຸວ່າມັນເປັນຕົ້ນສະບັບຫລືທາດ
- requestFrom (): ໃຊ້ໂດຍແມ່ບົດເພື່ອຂໍຂໍ້ມູນຈາກຂ້າທາດ.
- ເລີ່ມຕົ້ນການຂົນສົ່ງ (): ເລີ່ມຕົ້ນການສົ່ງຕໍ່ກັບທາດ.
- ການສົ່ງຕໍ່ (): ການສົ່ງຕໍ່ທ້າຍ.
- ຂຽນ ()- ຂຽນຂໍ້ມູນຈາກຂ້າທາດໃນການຕອບສະ ໜອງ ຄຳ ຮ້ອງຂໍຈາກນາຍຊ່າງ, ຫລືທ່ານສາມາດລຽນແຖວການສົ່ງຕໍ່ຂອງແມ່ບົດ.
- ມີ (): ຈະເອົາ ຈຳ ນວນໄບຕ໌ມາໃຫ້ອ່ານ.
- ອ່ານ (): ອ່ານໄບຕ໌ທີ່ສົ່ງຈາກຂ້າທາດໄປຫາແມ່ບົດຫຼືໃນທາງກັບກັນ.
- onReceive (): ເອີ້ນ ໜ້າ ທີ່ເມື່ອຂ້າທາດໄດ້ຮັບການສົ່ງຕໍ່ຈາກແມ່ບົດ.
- onRequest (): ເອີ້ນ ໜ້າ ທີ່ເມື່ອຂ້າທາດຂໍຂໍ້ມູນຈາກແມ່ບົດ.
para ຂໍ້ມູນເພີ່ມເຕີມ ກ່ຽວກັບການຂຽນໂປແກຼມ Arduino ແລະ ໜ້າ ທີ່ທ່ານສາມາດດາວໂຫລດຂອງພວກເຮົາ ການສອນແບບ PDF.
PCF8574 ແມ່ນຫຍັງ?
PCF8574 ແມ່ນກ ວັດສະດຸປ້ອນແລະຜະລິດດີຈີຕອນລົດເມຂອງລົດ I2C (I / O). ມັນສາມາດຜະລິດໂດຍຜູ້ຜະລິດຕ່າງໆ, ນອກ ເໜືອ ຈາກມັນມີຢູ່ໃນ ICs ແລະໂມດູນ. ໃນກໍລະນີໃດກໍ່ຕາມ, ມັນເປັນການປະຕິບັດຫຼາຍທີ່ຈະເຊື່ອມຕໍ່ມັນກັບກະດານ Arduino ຂອງທ່ານແລະມີຄວາມສາມາດໃນການຄວບຄຸມອຸປະກອນຫຼາຍກ່ວາ motherboard ທີ່ອະນຸຍາດ.
El ເຂັມ PCF8574 ມັນແມ່ນງ່າຍດາຍ, ເພາະວ່າມັນພຽງແຕ່ປະກອບມີ 8 ເຂັມ ທິດທາງ quasi (P0-P7 ທີ່ຊິບເຊັດເພື່ອສື່ສານແມ່ນເຊື່ອມຕໍ່), ແລະໃນທາງກັບກັນທ່ານມີ SDA ແລະ SCL ທີ່ທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບກະດານ Arduino, ເຊັ່ນດຽວກັນກັບ VCC ແລະ GND ເພື່ອເຮັດໃຫ້ໂມດູນໃຊ້ໄດ້ເຊັ່ນກັນ. ແລະຢ່າລືມສາມເຂັມທີ່ຢູ່ A0, A1, A2 ເພື່ອເລືອກອຸປະກອນໃດ ໜຶ່ງ ທີ່ການສື່ສານ ກຳ ລັງມຸ້ງໄປສູ່ ...
ເປັນເຈົ້າຂອງ ລັກສະນະອື່ນໆ ທີ່ທ່ານຄວນຮູ້:
- ການເຊື່ອມຕໍ່ຂອງມັນ, ເປັນການລະບາຍເປີດ, ສາມາດເປັນໄດ້ ໃຊ້ທັງເປັນວັດສະດຸປ້ອນແລະຜົນຜະລິດ.
- La ປະຈຸບັນສູງສຸດ ມັນແມ່ນ 25mA ໃນເວລາທີ່ມັນເຮັດຫນ້າທີ່ເປັນຜົນຜະລິດ (ຈົມລົງ, ໃນເວລາທີ່ກະແສໄປສູ່ PCF8574) ແລະ 300 µA (ແຫຼ່ງ, ກະແສປະຈຸບັນຈາກ PCF8574).
- La ຄວາມຕຶງຄຽດ ການສະຫນອງພະລັງງານແມ່ນ 2.5 ແລະ 6v. ການຊົມໃຊ້ແບບຍືນຍົງແມ່ນຕໍ່າຫຼາຍ, ພຽງແຕ່ 10 µA.
- ຜົນໄດ້ຮັບທັງ ໝົດ ມີຜ້າກັນເປື້ອນ, ເພື່ອຮັກສາລັດໂດຍບໍ່ ຈຳ ເປັນຕ້ອງມີການກະ ທຳ ຈາກພາຍນອກ. ທ່ານພຽງແຕ່ຕ້ອງປະຕິບັດເມື່ອທ່ານຕ້ອງການປ່ຽນລັດ.
- ທ່ານສາມາດໄດ້ຮັບ 8 ທິດທາງທີ່ເປັນໄປໄດ້, ນັ້ນແມ່ນ, ເຖິງ 8 ອຸປະກອນເພື່ອສື່ສານກັບຫຼື ນຳ ໃຊ້ 8 ໂມດູນເພື່ອຂະຫຍາຍມັນໄດ້ເຖິງ 64 ອຸປະກອນ. ທີ່ຢູ່ (pins A0, A1, A2) ຈະເປັນ:
- 000: ທີ່ຢູ່ 0x20
- 001: ທີ່ຢູ່ 0x21
- 010: ທີ່ຢູ່ 0x22
- 011: ທີ່ຢູ່ 0x23
- 100: ທີ່ຢູ່ 0x24
- 101: ທີ່ຢູ່ 0x25
- 110: ທີ່ຢູ່ 0x26
- 111: ທີ່ຢູ່ 0x27
- ຍອມຮັບ ການຂັດຂວາງ (INT) ໂດຍສາຍພິເສດເພື່ອກວດພົບຂໍ້ມູນໂດຍບໍ່ມີການຕິດຕາມຢ່າງຕໍ່ເນື່ອງ.
ການປະສົມປະສານກັບ Arduino
ການເຊື່ອມຕໍ່ກັບ Arduino ແມ່ນງ່າຍດາຍຫຼາຍ, ທ່ານພຽງແຕ່ຕ້ອງເຊື່ອມຕໍ່ Vcc ກັບ pin 5v ຂອງກະດານ Arduino, ແລະ GND ກັບ GND ຂອງ Arduino. ໃນທາງກົງກັນຂ້າມ, ເຂັມຂອງໂມດູນ PCF8574 SDA ແລະ SCL ສາມາດເປັນໄດ້ ເຊື່ອມຕໍ່ກັບ pins 14 (A5 SCL) ແລະ 15 (A4 SDA). ພຽງແຕ່ກັບມັນມັນຈະເລີ່ມເຮັດວຽກ, ແນ່ນອນທ່ານສາມາດໃຊ້ Px ເພື່ອເຊື່ອມຕໍ່ອຸປະກອນທີ່ທ່ານຕ້ອງການສື່ສານ ...
ຫຼັງຈາກນັ້ນມັນຈະຫາຍໄປເທົ່ານັ້ນ ເລີ່ມຕົ້ນດ້ວຍການແຕ້ມຮູບຕົວຢ່າງ ໃນ Arduino IDE. ທ່ານສາມາດເຮັດໄດ້ໂດຍບໍ່ຕ້ອງໃຊ້ຫໍສະມຸດເພີ່ມເຕີມເຊັ່ນ ...
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { for (short channel = 0; channel < 8; channel++) { // Escribir dato en cada uno de los 8 canales Wire.beginTransmission(address); Wire.write(~(1 << channel)); Wire.endTransmission(); // Lee dato del canal delay(500); } }
ເປັນການປ້ອນຂໍ້ມູນ:
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { short channel = 1; byte value = 0; // Leer el dato del canal Wire.requestFrom(pcfAddress, 1 << channel); if (Wire.available()) { value = Wire.read(); } Wire.endTransmission(); // Mostrar el valor leido por el monitor serie Serial.println(value); }
ຫລືຍັງ ໃຊ້ຫ້ອງສະ ໝຸດເຊັ່ນ PCF8574 ທີ່ທ່ານສາມາດເຮັດໄດ້ ດາວໂຫລດທີ່ນີ້ ແລະໃຊ້ລະຫັດທີ່ຄ້າຍຄືກັບຕົວຢ່າງນີ້ຈາກຕົວຢ່າງຂອງມັນເອງທີ່ມາພ້ອມກັບຫໍສະມຸດແຫ່ງນີ້:
#include <Wire.h> #include "PCF8574.h" PCF8574 expander; void setup() { Serial.begin(9600); expander.begin(0x20); /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, INPUT_PULLUP); /* Blink hardware LED for debug */ digitalWrite(13, HIGH); /* Toggle PCF8574 output 0 for demo */ expander.toggle(); /* Blink hardware LED for debug */ digitalWrite(13, LOW); } void loop() { }
ເປັນຄົນທໍາອິດທີ່ຈະໃຫ້ຄໍາເຫັນ