Evo još pojašnjenja:
1. Problematika korištenja RTS linije - imao sam par pokušaja rješavanja RS232/RS485 korištenjem RTS linije za definiranje smjera komunikacije ali su svi bili pomalo problematični. Kako sam odustao od tih rješenja probati ću se sjetiti što nije bilo dobro (isprika ako mi se potkrade nekakva greška)
→Korištenjem " Hardware flow control " imao sam problem s smjerom na zadnjem bajtu poruke jer se RTS ugasio prije odašiljanja kompletnog zadnjeg bajta.
→Programskom kontrolom RTS linije kroz MSComm kontrolu iz Visual basica promjene na RTS liniji bile su nesinkronizirane s slanjem (TX pin) pa je trebalo ubacivati relativno duge pauze (promjena RTS; PAUZA; Slanje poruke; PAUZA; promjena RTS) što je grozno usporilo komunikaciju.
•Najbolje riješenje RS232/RS485 adaptera je korištenje invertiranog TX-a na D/RE pinu (TX linija s 232 porta prije MAX-a spojena preko 10k na D/RE pin 485 konvertera i zenerica od 5V1 na D/RE pinu)
3. problem sa nepotrebnim osluškivanjem komunikacije na BUS-u od strane slave procesora nije moguće riješiti odnosno svi slejvovi stalno osluškuju komunikaciju. Kako to ne bi pretjerano opterećivalo kontroler svakako koristi hardverski UART kontrolera i u interapt rutini prijema bajta prvo zanemariš sve do prijema STX karaktera (start poruke), slijedeći primljeni bajt je adresa i njega usporediš s adresom slejva pa ako nije isti zanemariš sve ostalo do slijedećeg STX a ako je isti obradiš komandu mastera u sljedečem bajtu (ako ti je komanda potrebna ili jednostavno još sačekaš ETX i nakon njega uz kratku pauzu odgovoriš masteru) .
2. Komunikacija i zašto hexadecimalno (dva bajta umjesto jednog)
- pretpostavimo da su tvoji brojači 8 bitni pa je vrijednost koju trebaš poslati masteru bajt koji može biti 0x00 do 0xFF (0 do 255)
- šaljemo li masteru vrijednost brojača bez konverzije u hexadecimalno moglo bi se desiti da mu pošaljemo 0x02 ili 0x03 što su ustvari STX odnosno ETX karakteri koje koristimo kao limitere poruke (označavaju početak i kraj poruke) te bi to unjelo zbrku na komunikacijskom busu
- druga prednost ove konverzije je što su ovakve poruke čitljive i u običnom hyper terminalu
REZIME:
Master traži vrijednost brojača slejva s adresom "a"
1 2 3 4 ; bajt poruke mastera
<STX>aR<ETX> ;ASCII > R=komanda čitaj
02 61 52 03 ;HEXA
Slave s adresom "a" javlja masteru da je vrijednost njegovog brojača 3
1 2 3 4 5 ; bajt poruke slejva
<STX>a03<ETX> ;ASCII
02 61 30 33 03 ;HEXA
Nadam se da sam pomogao.