1
Τον τελευταίο καιρό, προσπαθώ να αναπτύξω μια multi-nodes επικοινωνία μέσω του RS485 bus. Επειδή δεν θα υπάρχει master node και για να μειώσω τα conflicts, χρησιμοποιώ μία ακόμα γραμμή στο bus, που την έχω ονομάσει BUS-CTRL, και που δείχνει ανά πάσα στιγμή αν το bus είναι idle ή χρησιμοποιείται από κάποιο node.
Για να μειωθούν όσο γίνεται περισσότερο τα conflicts, θα πρέπει ο χρόνος ανάμεσα στον έλεγχο του BUS-CTRL και στην αλλαγή του σε high κατάσταση, να είναι όσο γίνεται μικρότερος. Αυτό που μπορώ να πετύχω μέσω software με τον 328 μ/ε και με κώδικα assembly, είναι 5 x 62,5nsec = 312,5nsec. Σε δοκιμές με 3 nodes, το baud rate στο bus ανάμεσα στα 100 με 200kb και με έντονη κίνηση πακέτων αναμεταξύ τους, ο ρυθμός των conflicts είναι 1 ανά 3-5 λεπτά. Για λιγότερα conflicts θα πρέπει να πετύχω μικρότερο χρόνο, οπότε θα πρέπει να στραφώ σε hardware υλοποίηση μέσω λογικού κυκλώματος.
temp.png
Σύμφωνα με το διάγραμμα, αυτό που θέλω είναι η έξοδος B να γίνεται high, μόνο όταν την στιγμή που το A γίνει high, το C να είναι low, αλλιώς αν το C έχει προλάβει να γίνει high, να παραμένει σε low κατάσταση το B, για να μπορώ να ελέγξω αν στο ενδιάμεσο κάποιο άλλο node πήρε τον έλεγχο, οπότε να ακυρώνω την αποστολή μηνύματος.
Προσπάθησα να σκεφτώ κάτι με flip-flop, αλλά δεν μπόρεσα να βρω κάτι έξυπνο που να ικανοποιεί την συνθήκη αυτή. Υπάρχει καμία καλή και έξυπνη ιδέα για την υλοποίηση του κυκλώματος;