Seriova komunikace RS485

Martin Záruba swz na volny.cz
Středa Listopad 22 19:06:44 CET 2023


Mám podezření, že to bude souviset s ne plnohodnotnou obsluhou 
přerušení. Tedy to, co jsem sám nevěděl, že pokud nastane více přerušení 
současně, priority pouze určují pořadí spuštění rutin, ale neznamená to, 
že jestliže běží rutina s nižší prioritou a vznikne vyšší přerušení, že 
se ta nižší přeruší, obslouží se ta výšší, pak pokračuje ta nižší a pak 
hlavní program. Jinak řečeno... Neumí vnořovat přerušení.

Mám podobný problém, kde, přerušení časovačem mám každých 50uS. Ono to 
není v mém případě důležité, aby to bylo přesně 50uS. Pokud nenastává 
jiné přerušení, vidím na osciloskopu, že to sedí. Pokud ale nastává 
přerušení od seriového portu, interval 50uS není přesný.

Nevím, zda to nemůže být Váš případ, kdy dojde k tak zásadní deformaci 
šířku pulzu na seriovém portu, že se data přenesou špatně. Takže se 
přikláním k tomu, co napsal pan Labaj.

Martin Záruba

Dne 22.11.2023 v 18:36 Petr Labaj napsal(a):
> Přiznávám, že by mě to zajímalo.
> Tedy pro obecnou osvětu a poučení, i když ve Vašem konkrétním případě 
> to dokážete ošéfovat pomocí SW.
>
> Připojil bych na ten převodník jen osciloskop a kontrolní PC, nic 
> jiného. Na druhé straně by nikdo neodpovídal.
> A do Arduina dát jednoduchý program, který bude vysílat stále dokola 
> třeba po 2 sekundách ten string.
>
> Pokud to tady bude OK (na osciloskopu i přijetím na na kontrolním PC), 
> tak nechat HW stejně, ale posílat to Vašim původním programem, pokud 
> umí posílat výzvy i bez odpovědi.
> Pokud to opět bude OK, tak teprve pak připojit ten odpovídač a hledat tam.
>
> Máte 4-kanál, tak by asi nebyl problém ho odpíchnout od Tx dat, která 
> by byla vstupem pro ten převodník (tj. výstupní drát z Arduina).
>
> PL
>
> **********************
>
> Dne 22.11.2023 v 18:13 Jirka Mww napsal(a):
>> Dobrý den,
>> To s tím rozdělením jsem zkoušel, nebyla tam žádná změna i když jsem 
>> tam dal ještě navíc delay. Osciloskop mám, 4 kanál paměťový, ale 
>> nevím, na co ho synchronizovat. Necháme to být, SW to řeší
>>
>> Dne st 22. lis 2023 18:05 uživatel Petr Labaj <labaj na volny.cz> napsal:
>>
>>     Myslel jsem, že se Vám to s těmi odpory spravilo. A ono ne.
>>     Tak to je skoro čas na plán B.
>>     Máte osciloskop? Pokud je to jeden ze 40 pokusů, tak tohle
>>     chytnout by měla být brnkačka. A zřejmě budou "načaté" i ostatní
>>     přenosy, jen budou ještě v toleranci.
>>
>>     Co by udělalo Serial2.print("X1A") a pak Serial2.println("") nebo
>>     jak se ty funkce na Arduinu jmenují? Prostě poslat to CR dalším
>>     voláním.
>>
>>     PL
>>
>>     ********************
>>
>>     Dne 22.11.2023 v 17:42 Jirka Mww napsal(a):
>>>     Díky za další rady, on ale bude problém asi jinde. Po
>>>     doplnění těch opěrných odporů na A+ a B- se to začalo chovat o
>>>     dost líp, ale po dopsání nějakých dalších řádků do Arduina
>>>     ATMEGA se to zase trochu zhoršilo.
>>>     Mám podezření, že ty procedury Arduina pro obsluhu sériových
>>>     portů nejsou asi úplně nezávislé, nebo tomu vadí něco jiného z
>>>     mého SW.   V podstatě s tím můžu žít, ty posílané povely se
>>>     dají opakovat, když nepřijde včas relevantní odpověď.  Schema
>>>     těch převodníků nemám, je to z Ali, drát na řízení směru toku 
>>>     nemají, to co poslu se zároveň zpětně načte. Ten co komunikuje s
>>>     měničem GOODWE problémy nemá, komunikace 100%  chodí včetně CRC.
>>>     Vyhození převodníků je trochu problém, relova deska pro obsluhu
>>>     je SMD , musel bych tam okolo převodníku RS485 škrbat spoje, to
>>>     se mi nechce. Raději budu řešit ty výpadky přes úpravu SW a už
>>>     se tím dál nebudu zabývat
>>>
>>>     Zdravi
>>>     Jirka Sloupenský  OK1MWW
>>>
>>>
>>>     <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>>>     	Neobsahuje žádné viry.www.avast.com
>>>     <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>>>
>>>
>>>
>>>     út 21. 11. 2023 v 20:28 odesílatel Dodo Racek
>>>     <dodoracek na gmail.com> napsal:
>>>
>>>         Tazko hadat, malo vstupnych informacii.
>>>
>>>         Obe strany su v istej chvili prepnute na vysielanie ?
>>>
>>>         Pri riadenom prepinani mozete prepnut na prijem  skor ako je
>>>         odoslany posledny znak.
>>>         Niektore obsluhy seriovej linky povazuju odoslanie za
>>>         skoncene, ked je posledny byte vo vysielacom registri (ale
>>>         este neodisiel po seriovej linke )
>>>
>>>         Automaticke prepinania sa robia rozne, od detekcie startbitu
>>>         hrubym casovanim MKO, niektore sa snazia detekovat rychlost
>>>         vysielania a nastavit cas prepnutia podla casu vyslania bytu
>>>         a odhadnutej rychlosti... byva to rozne.
>>>
>>>         Mate linku zakoncenu na oboch stranach prislusnou zatazou ?
>>>         Napr 120R + 1n
>>>
>>>         Mate definovane urovne linky, ked su obe strany na prijme ?
>>>         Niektore prevodniky to robia "automaticky" a u niektorych je
>>>         potrebne jeden vodic potiahnut odporom na zem a druhy vodic
>>>         na +5v.
>>>
>>>         Niektore zapojenia prevodnikov 422/485 umoznuju zaroven
>>>         citat, co sa lokalne vysiela a napr. detekovat chybu
>>>         vysielania, ked sa iny vysielac na linke namontuje do
>>>         komunikacie....
>>>
>>>         Chcelo by to ozajstne schemy tych prevodnikov.
>>>         Ci mate chybu v prograne mozete overit tak, ze vyhodite
>>>         prevodniky a pojdete Rx-Tx priamo na TTL urovniach.
>>>
>>>         Dodo
>>>
>>>
>>>         Dňa ut 21. 11. 2023, 15:31 Jirka Mww <jirka.mww na gmail.com>
>>>         napísal(a):
>>>
>>>             Dobrý den,
>>>             ladím tady komunikaci mezi dvěma Arduiny, jedno je
>>>             Arduino Nano a druhé je Arduino Mega , příslušný
>>>             seriový kanál je na Mega serial2. Na Nano používám HW
>>>             seriový kanál. SW seriový kanál není vůbec využit.   Na
>>>             Arduinu Nano je modul RS485, který má externí vstup pro
>>>             přepínání směru přenosu, ten obsluhuji svým SW a vše zdá
>>>             se funguje správně.  Na Arduinu Mega mám nějaký
>>>             čínský modul RS485, který takový vstup nemá , přepíná se
>>>             sám,  posílám jen čtyři znaky pomocí funkce
>>>             Serial2.println("X1A") t.j. včetně CR na konci, většinou
>>>             to funguje, ale ten koncový znak, na který protistrana
>>>             čeká, aby příkaz provedla, se občas ( cca 1 x za 40
>>>             přenosů ) nepošle.  Linku monitoruji přes externí
>>>             převodník a PC ale efekt je stejný, jak na straně
>>>             Arduino Nano, tak na straně PC. Prostě ten koncový znak
>>>             nepřijde tam ani tam.   Komunikace s FVE měničem Goodwe
>>>             přes další port toho Arduino Mega mi funguje normálně.
>>>             Je tam podobný modul RS485 opět bez řízení směru
>>>             přenosu, je jenom galvanicky oddělený. Nemáte nějaký
>>>             nápad, na co se zaměřit  ? Vkládání zpoždění do různých
>>>             relevantních částí programu nepomáhá.
>>>
>>>             Zdravi
>>>             Jirka Sloupenský  OK1MWW
>>>
>>
>>     _______________________________________________
>>     HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>>     Hw-list na list.hw.cz
>>     http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20231122/aff65721/attachment.htm>


Další informace o konferenci Hw-list