Cara cepat dan tanpa chip yang tidak perlu menghindari kekekalan alamat HTU21

Salam untuk semua penghuni Habr!


Saya ingin berbicara tentang cara baru dan tidak terduga untuk menghubungkan beberapa sensor HTU21 melalui bus I2C tanpa menggunakan chip tambahan.


Sensor ini masih populer di kalangan berbagai master-DIY, dan sepatutnya: lebih akurat daripada pendahulunya dan ukurannya kecil (yang nyaman untuk ditanamkan dalam perangkat).


Baru-baru ini, saya, seperti banyak pengguna, bingung dengan kurangnya kemampuan untuk mengubah alamat sensor ini. Google, tentu saja, mengeluarkan banyak artikel tentang semua jenis multiplexer untuk bus I2C dari "beli di toko online China yang terkenal" hingga "sirkuit do-it-yourself". Tidak ada opsi di sana tanpa setrika dan biaya tambahan. Ini tidak bisa tidak kecewa karena itu perlu untuk menyelesaikan masalah di sini dan sekarang (pelanggan adalah pelanggan seperti itu). Saya ingin berbicara tentang cara yang lebih mudah dan lebih santai, sangat sederhana dari situasi ini. Penasaran? Lalu aku memberitahumu.


Data awal: Arduino mega dan 4 sensor HTU21.


Tugas: perlu menghubungkan semua sensor htu melalui bus I2C dan membaca nilainya. Selain itu, sensor ini bukan satu-satunya perangkat budak di bus ini (rencananya juga termasuk layar LCD dan sensor lainnya).


Apa yang kita tahu Sensor HTU21 memiliki alamat tetap di bus - 0x40 1 . Bagaimana, memiliki mikrokontroler dan 4 sensor dengan alamat yang sama di dalam bus, bagaimana mengakses perangkat tertentu tanpa chip tambahan?


Semuanya ternyata sangat sederhana:


  1. sambungkan ground, scl, dan sda seperti biasa (jangan lupakan pull-up resistor untuk jalur data dan sinkronisasi);
  2. kami menghubungkan kabel daya dari masing-masing sensor ke input digital pada Arduino (Anda mungkin sudah mengerti di mana saya memimpin)
  3. secara berurutan terapkan TINGGI ke setiap input digital yang mengumpankan sensor yang terpisah dan, setelah penundaan, baca nilai dari sensor yang diaktifkan.
  4. berikan sinyal RENDAH untuk sensor ini dan ulangi siklus untuk sensor lainnya.

Tentu saja, metode ini juga memiliki kelemahan, misalnya, jumlah output digital atau analog gratis yang diperlukan mungkin tidak tersedia. Tetapi untuk digunakan dalam proyek, prinsip ini berfungsi, dan bekerja pada jarak yang cukup dari mikrokontroler. Saya harap artikel ini akan membantu Anda menghemat saraf, uang, dan waktu.


Tidak heran dikatakan bahwa semua yang cerdik itu sederhana!


Daftar terlampir:


/* ,        HTU21   BME280 */ void greenhouseHT() { delay(30); rooms[3].TempA = bme.readTemperature(); delay(30); rooms[3].HumA = bme.readHumidity(); delay(30); for (int i=0; i<3; i++) { digitalWrite(HTU21_pins[i], HIGH); delay(30); rooms[i].HumA = myGreenhouseHumidity.readHumidity(); rooms[i].TempA = myGreenhouseHumidity.readTemperature(); delay(30); digitalWrite(HTU21_pins[i], LOW); delay(30); } digitalWrite(pin_HTU21_1, HIGH); } 

Source: https://habr.com/ru/post/id425541/


All Articles