Witam
Mam dylemat związany z wyborem magistrali dla dosyć prostego systemu składającego się z centralki postawionej na raspberry pi oraz kilkunastu terminali (ATmega 8 lub 328).
Założenia:
- centralka wysyła żądania do terminali (konkretnych lub wszystkich - broadcast), terminale odpowiadają na żądanie,
- terminal w dowolnym momencie transmituje dane w odpowiedzi na powiadomienie z czujnika,
- maksymalna odległość między skrajną centralką i terminalem: 20m
- niewielki rozmiar paczek danych, stosunkowo niska prędkość transmisji.
1. Jaki typ magistrali wybrać: RS232, SPI czy I2C?
2. Jak zsynchronizować transmisję danych od terminali do centralki (w momencie gdy kilka terminali będzie próbowało jednocześnie transmitować dane)?
Rozważam następujący wariant:
Asynchroniczny RS232 plus dodatkowa linia zajętości. Terminal przed rozpoczęciem transmisji sprawdza stan linii. Jeśli jest równa 0 (zajęta), czeka aż się zwolni. Gdy linia jest w stanie wysokim, zeruje stan, przesyła dane i zwalnia linię.
Mam dylemat związany z wyborem magistrali dla dosyć prostego systemu składającego się z centralki postawionej na raspberry pi oraz kilkunastu terminali (ATmega 8 lub 328).
Założenia:
- centralka wysyła żądania do terminali (konkretnych lub wszystkich - broadcast), terminale odpowiadają na żądanie,
- terminal w dowolnym momencie transmituje dane w odpowiedzi na powiadomienie z czujnika,
- maksymalna odległość między skrajną centralką i terminalem: 20m
- niewielki rozmiar paczek danych, stosunkowo niska prędkość transmisji.
1. Jaki typ magistrali wybrać: RS232, SPI czy I2C?
2. Jak zsynchronizować transmisję danych od terminali do centralki (w momencie gdy kilka terminali będzie próbowało jednocześnie transmitować dane)?
Rozważam następujący wariant:
Asynchroniczny RS232 plus dodatkowa linia zajętości. Terminal przed rozpoczęciem transmisji sprawdza stan linii. Jeśli jest równa 0 (zajęta), czeka aż się zwolni. Gdy linia jest w stanie wysokim, zeruje stan, przesyła dane i zwalnia linię.