Witam.
Miałem dwie atmegi spięte przez port szeregowy. Full duplex.
Master, wysyłał do slave znak "Q" a w odpowiedzi otrzymywał stan wszystkich ośmiu bitów wybranego portu.
Master odebrany komunikat wysyłał na port i zapalał LEDy.
Ukłąd prosty. Wszystko działało przepięknie.
Odbieranie znaków w układach master i slave realizowałem przerwaniem od URXC
W momencie przejścia na interface 485 pojawiły się problemy.
Wiadomo ze sterowanie (w moim przypadku driverem RS485 jest DS96176CN) nadawaniem odbiorem musi uwzględniać przełączanie z nadawania w odbiór ina odwrót.
Niestety wydawałoby się prosty kod trzeba było uzupełnić o dwie komendy wait.
Fragment kodu mastera wysyłający znak Q
portc.0 = 1
waitms 5
print "Q"
waitms 4
portc.0 = 0
na porcie C.0 wisi sterowanie 485, dlatego przed wysyłaniem przełączam kość w nadawanie stanem 1.
po wysłaniu znaku wracam do odbioru wpisując na port 0.
sam kod banalnie prosty, niestety mimo to układ na początku wysyłał brednie.
metodą prób i błędów ustaliłem ze czekając 5 ms przed i po wysłaniu znaków transmisja odbywa sie prawidłowo.
po wpisaniu tych komend do nadajnik i odbiornika układ działa jak powinien.
szukając rozwiązania problemu znalazłem taki kod
portc.0 = 1
waitus 200
print "Q"
waitms 2
portc.0 = 0
opóźnienie w jednym układzie slave rzędu 10 ms trochę mnie niepokoi bo w sytuacji kiedy na magistrali jest kilkadziesiąt kości nazbiera się z tego prawie sekunda.
Wydaje mi sie ze problemem jest sama komenda print, której chyba nie do końca rozumiem.
Może ręczne przepisywanie zmiennych do rejestru nadawczego i odczyt przerwania by pomógł....
A może to zupełnie coś innego.
Nie wklejam całości kodu bo nie ma sensu zaśmiecać tekstu niepotrzebnymi fragmentami które działają jak należy...
Chętnie wysłucham Waszego zdania.
Pozdrawiam
Ditomek
Miałem dwie atmegi spięte przez port szeregowy. Full duplex.
Master, wysyłał do slave znak "Q" a w odpowiedzi otrzymywał stan wszystkich ośmiu bitów wybranego portu.
Master odebrany komunikat wysyłał na port i zapalał LEDy.
Ukłąd prosty. Wszystko działało przepięknie.
Odbieranie znaków w układach master i slave realizowałem przerwaniem od URXC
W momencie przejścia na interface 485 pojawiły się problemy.
Wiadomo ze sterowanie (w moim przypadku driverem RS485 jest DS96176CN) nadawaniem odbiorem musi uwzględniać przełączanie z nadawania w odbiór ina odwrót.
Niestety wydawałoby się prosty kod trzeba było uzupełnić o dwie komendy wait.
Fragment kodu mastera wysyłający znak Q
portc.0 = 1
waitms 5
print "Q"
waitms 4
portc.0 = 0
na porcie C.0 wisi sterowanie 485, dlatego przed wysyłaniem przełączam kość w nadawanie stanem 1.
po wysłaniu znaku wracam do odbioru wpisując na port 0.
sam kod banalnie prosty, niestety mimo to układ na początku wysyłał brednie.
metodą prób i błędów ustaliłem ze czekając 5 ms przed i po wysłaniu znaków transmisja odbywa sie prawidłowo.
po wpisaniu tych komend do nadajnik i odbiornika układ działa jak powinien.
szukając rozwiązania problemu znalazłem taki kod
portc.0 = 1
waitus 200
print "Q"
waitms 2
portc.0 = 0
opóźnienie w jednym układzie slave rzędu 10 ms trochę mnie niepokoi bo w sytuacji kiedy na magistrali jest kilkadziesiąt kości nazbiera się z tego prawie sekunda.
Wydaje mi sie ze problemem jest sama komenda print, której chyba nie do końca rozumiem.
Może ręczne przepisywanie zmiennych do rejestru nadawczego i odczyt przerwania by pomógł....
A może to zupełnie coś innego.
Nie wklejam całości kodu bo nie ma sensu zaśmiecać tekstu niepotrzebnymi fragmentami które działają jak należy...
Chętnie wysłucham Waszego zdania.
Pozdrawiam
Ditomek