Mikrokontroler mana yang harus menjadi master / slave?

8

Saya merancang alarm untuk membangunkan saya di pagi hari. Sistem ini terdiri dari 3 subsistem:

  1. (S1) RGB tujuh segmen manajemen. Terdiri dari 5μCs, satu untuk setiap digit dan satu untuk ":". Tingginya jumlah μC disebabkan oleh kenyataan bahwa saya tidak menggunakan IC untuk RGB, hanya transistor.
  2. (S2) Sensor dan manajemen input. Satu μC yang mengatur sensor jarak untuk mengatur alarm dan waktu saat ini; dan beralih untuk konfigurasi.
  3. (S3) Komunikasi dan file audio. Satu μC yang berkomunikasi dengan modul bluetooth di UART untuk proyek lebih lanjut, mendapat kristal RTC untuk memiliki jam yang akurat dan mengelola pemutaran audio. (Saya belum mengerjakan audio)

Selama eksekusi normal, S2 membaca input dan mengirimkannya ke S3 untuk diproses. lalu S3 kirim ke S1 apa yang harus ditampilkan.

Saya ingin membuat semua subsistem ini berkomunikasi bersama, saya kemudian memilih untuk menggunakan bus I2C. Tapi inilah pertanyaan saya:

  • ΜC mana yang harus menjadi master?

Di tangan pertama, S3 adalah pusat dari sistem tetapi di sisi lain, S2 dapat mengirim lebih banyak pesan daripada S3. Itu sebabnya saya ragu tentang siapa yang akan menjadi tuan / budak.

  • Apakah ada aturan untuk menentukan siapa yang akan menjadi budak / tuan? Pertanyaan apa yang harus saya tanyakan pada diri saya untuk membuat pilihan yang baik? (secara umum, bukan untuk sistem khusus ini)
M.Ferru
sumber
14
Mengapa Anda menggunakan 5 mikrokontroler untuk jam / alarm dasar ketika seseorang pasti akan melakukan pekerjaan itu?
Andy alias
2
Memiliki UC lain untuk 'system orchestrator' yang mengimplementasikan master I2C. Itu bukan komentar sarkastik, aku sungguh-sungguh. Ini memberi Anda pemisahan yang bagus antara periferal dan kontrol, karena Anda tampaknya tidak takut kelebihan UC.
Neil_UK
1
@Andyaka Setiap digit memiliki warna yang berbeda (3 * 5 PWM) dan setiap segmen membutuhkan GPIO untuk dinyalakan / dimatikan. Saya menggunakan MSP430 sebagai μC dengan masing-masing hanya 20 pin dan 4 PWM. (Saya memiliki lebih dari 100 dari mereka jadi saya perlu menggunakan stok ^^ ')
M.Ferru
7
@ Andyaka Sebenarnya ada alasan lain. Saya hobi keluar dari sekolah EE. Saya ingin belajar cara mengatur komunikasi yang layak di antara sistem dengan beberapa μC karena saya tidak pernah melakukan hal-hal seperti itu. Jika saya hanya menggunakan satu μC (yang tentu saja merupakan pilihan yang lebih baik) saya tidak akan belajar "sesuatu yang baru".
M.Ferru
2
@ M.Ferru Banyak hal memengaruhi pilihan-pilihan itu. Kekhawatiran adalah tentang seberapa besar ketidakpastian dan risiko untuk "tidak diketahui" di masa depan yang dapat saya toleransi sebelum saya harus "mengerjakan ulang" desain sepenuhnya. Yang lainnya adalah proses penentuan waktu dan seberapa kritisnya beberapa. Misalnya, jika saya perlu mendukung transfer lama dengan batasan waktu yang ketat, fakta itu saja dapat menyulitkan antarmuka pengguna yang berfungsi dengan baik. Tetapi ini tentang menuliskan semua detail yang Anda ketahui sekarang, ditambah semua yang dapat Anda pikirkan yang akan muncul dan memutuskan cara terbaik untuk mengatur detail tersebut.
Jonk

Jawaban:

7

Apakah ada aturan untuk menentukan siapa yang akan menjadi budak / tuan [I 2 C]?

Iya. Hanya master I 2 C yang dapat memulai transmisi. Budak I 2 C tidak dapat memberi tahu Anda tentang sesuatu, sampai ia disurvei oleh master (kecuali jika Anda menambahkan sinyal interupsi ekstra, yang meningkatkan kompleksitas sistem secara keseluruhan).

Mengabaikan fitur (jarang digunakan) untuk perangkat untuk beralih antara menjadi master dan slave, ini berarti bahwa master I 2 C harus memiliki pengetahuan yang cukup tentang keseluruhan sistem , untuk mengetahui cara berkomunikasi dengan semua I 2 C budak di bus itu.

Pertanyaan apa yang harus saya tanyakan pada diri saya untuk membuat pilihan yang baik? (secara umum, bukan untuk sistem khusus ini)

Pikirkan MCU mana di sistem Anda yang tahu:

  • kebanyakan tentang keadaan sistem secara keseluruhan, dan oleh karena itu dapat memutuskan kapan harus mengirim perintah I 2 C ke slave;
  • perintah I 2 C perlu dikirim ke setiap budak;
  • data apa yang perlu dikumpulkan dari setiap budak I 2 C;
  • perangkat I 2 C yang murni menanggapi perintah yang masuk (ini akan berlaku untuk MCU "S1" Anda - tampak jelas bahwa mereka paling cocok untuk menjadi budak);

Terlepas dari MCU mana yang akan menjadi master I 2 C, Anda perlu merancang arsitektur sistem secara keseluruhan dan mempertimbangkan perintah mana yang perlu dikirim ke setiap perangkat, dan seberapa cepat respons apa pun perlu diterima. Cobalah untuk mendesain sistem yang memang memiliki "master" yang jelas dan mengetahui semua kondisi sistem, dan kemudian itu bisa menjadi perangkat master I 2 C juga.

Kamu berkata:

S3 adalah pusat dari sistem tetapi di sisi lain, S2 dapat mengirim lebih banyak pesan daripada S3.

Hal ini tidak jelas siapa "S2" mengirimkan pesan ke . Apakah perlu mengirim pesan secara aktif kepada siapa pun ? Atau bisakah "S2" disurvei oleh "S3" sebagai master I 2 C, untuk menerima sensor apa pun dan mengalihkan informasi yang "S2" kumpulkan? Jika "S2" dapat disurvei oleh "S3" maka, berdasarkan deskripsi, tampak jelas bahwa "S3" MCU bisa menjadi master I 2 C.

Saya berhati-hati tentang menambahkan MCU lain (sebut saja "S10") sebagai master I 2 C. Itu karena tampaknya bahwa MCU "S10" perlu melakukan banyak polling, hanya untuk mengumpulkan pengetahuan status sistem keseluruhan yang semuanya (?) Sudah dikenal oleh "S3". Sepertinya itu duplikasi yang tidak perlu.

Oleh karena itu, kecuali "S3" tidak dapat melakukan pekerjaan karena mencapai batas ruang RAM, ruang Flash, atau siklus CPU dll. Mungkin lebih mudah untuk "S3" mengendalikan sistem dengan menjadikannya master 2 C, daripada menambahkan pengontrol "S10" tambahan.

Di sisi lain, jika Anda tidak keberatan dengan kompleksitas tambahan, menambahkan pengontrol "S10" keseluruhan meningkatkan modularitas (segmentasi) sistem, karena "S3" maka hanya Bluetooth dan audio - tidak ada yang lain. Ini dapat memungkinkan fleksibilitas ekstra untuk menambahkan fitur baru (tak terduga) / MCU tambahan di masa depan, tanpa perlu mengubah kode dalam "S3".

SamGibson
sumber
1

S1 harus menjadi budak I 2 C. Baik S2 atau S3 akan menjadi pilihan yang masuk akal untuk master. Tapi itu hanya menyatakan kembali apa yang telah disebutkan dalam pertanyaan asli.

Seringkali, MCU yang berurusan dengan berbagai input terbesar adalah kandidat yang baik untuk master. Dalam kasus Anda, itu adalah S2 (varian tombol pengguna, RTC), atau S3 (berbagai perintah dari Bluetooth). Jika Anda tidak dapat memutuskan yang mana, maka Anda bisa mendapatkan pengontrol yang lebih besar dan meletakkan kedua fungsi S2 dan S3 ke dalam satu MCU. Pendekatan ini dapat memberi Anda lebih banyak fleksibilitas.

Nick Alexeev
sumber
0

Setiap mikrokontroler di sistem Anda dapat menjadi master. Namun, beberapa dari mereka lebih cocok untuk fungsi ini. Seperti yang dikatakan oleh orang lain, mikrokontroler dengan lebih banyak informasi haruslah sang Master.

Kait kecil
sumber