Mam pewien układ, złożony z modułu głównego i wielu mniejszych komunikujących się z głównym przez I2C (wszystko na AVR). Jako że układ z założenia ma mieć możliwość podpinania kolejnych modułów (także kilku tego samego typu), istnieje potrzeba wyboru adresu I2C dla każdego z nich. Najprościej byłoby użyć np zadajnika kodu HEX i kilku portów procka na każdym module. Problemem jednak jest:
- brak wolnych pinów
- marnowanie wolnych adresów (trzeba by np rezerwować pulę adresów na każdy rodzaj modułu i mimo że np byłby taki jeden w systemie, zajęte byłoby 16 adresów) Macie jakieś pomysły, żeby nadać te adresy programowo? Na razie chodzi mi jakaś niejasna koncepcja z wykrywaniem urządzeń o adresie np 0 (czyli nieprzydzielonym, od którego startowałyby wszystkie Slave). Jeśli Master wykryłby urządzenie o takim adresie, wysyłałby do niego nowy adres, jeśli nie, to kończyłby enumerację. O ile pamiętam, to w przypadku konfliktu adresów, dane przesyłane są tylko do jednego ze Slave, więc mogłoby zadziałać, ale poprawcie mnie jeśli się mylę, lub są w tym jakieś haczyki.
Dariusz Żołna