Arduino nepřenáší data po sběrnici

Arduino RS485

Arduino nepřenáší data po sběrnici
« kdy: 10. 01. 2016, 21:15:14 »
Zdravím, řeším jeden problém a už nevím jak dál.

 Pracuji na jednom projektu a jeho součásti jsou arduina komunikujcí po sběrnici. 1. arduino (nano) odesílá data na 2. arduino (mega). K oboum arduinům je připojen modul RS485 (MAX485) pro kumunikaci. Jedná se o data z teplotních čidel.

1. arduino (nano) načte data z čidla 1 a 2 (teplotu) a odešle řetězec
Kód: [Vybrat]
id:1-t1:25-t2:19. Když vše zapnu, tak komunikace probíhá naprosto v pohodě, ale po nějaké době začnou na 2. arduino (mega) přicházet blbosti jako třeba
Kód: [Vybrat]
?:1?-  ??:12-t        ???. Už nevím co může být špatně. Někdy se to stane hned ale take se to začne sr*t třeba i po 3 dnech přetržitého provozu.

Nevíte někdo čím by to mohlo být způsobeno? Předem děkuji za rady.
« Poslední změna: 10. 01. 2016, 21:31:41 od Petr Krčmář »


Jenda

Re:Arduino nepřenáší data po sběrnici
« Odpověď #1 kdy: 11. 01. 2016, 06:44:16 »
Chtělo by to podívat se v okamžiku problému na sběrnici osciloskopem, nebo alespoň logickým analyzérem na arduinovou stranu převodníků. Taky by mohlo pomoct číst to něčím, kde místo otazníků uvidíš skutečná data, co to přijalo.

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #2 kdy: 11. 01. 2016, 07:04:57 »
Požíváš HW sériový port a nebo nějakou jeho SW implementaci?

Honza

Re:Arduino nepřenáší data po sběrnici
« Odpověď #3 kdy: 11. 01. 2016, 08:16:58 »
Používám knihovnu SoftwareSerial. V podstatě se jedná o upravený návod z těchto stránek.

http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/

Celý systém je trochu složitější. Jeho základem je RPi k němu je připojeno arduino mega pomocí usb a k němu pak pomocí modulu RS485 (MAX485) arduino nano.

Nano slouží jako termostat a odesílá data do megy. Ta je veme a předá RPi. Na RPi běží program psaný v C# který data převezme a zpracuje je. Po zpracování a vyhodnocení dat pošle informaci do megy aby zapnula nebo vypnula relé.

Megu používám hlavně pro jeji velký počet output pinu.

Jediné co mě napadlo je neposílat data skrz megu ale přímo na RPi, ale pokud je problém u odesilajciho zařízení nic to neřeší.

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #4 kdy: 11. 01. 2016, 08:27:56 »
Používám knihovnu SoftwareSerial. V podstatě se jedná o upravený návod z těchto stránek.

http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/


Zaměřil bych se na ověření, že ta knihovna funguje jak má. Pokud nemáš nějaký konkrétní důvod k tomu, proč nevyužít HW sériový port, využij ten. Třeba jen jako test abys porovnal jestli budeš mít stejné problémy nebo ne.


ehmmm

Re:Arduino nepřenáší data po sběrnici
« Odpověď #5 kdy: 11. 01. 2016, 09:13:09 »
Krome zmineneho osciloskopu a lepsiho vypisu, co z toho vlastne leze, by jeste slo na RS485 povesit jeste jeden duveryhodny prijimac a koukat, co poleze z neho.

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Arduino nepřenáší data po sběrnici
« Odpověď #6 kdy: 11. 01. 2016, 09:28:04 »
Jak tu problémovou situaci řešíš? Restartuješ Arduino nebo obě? Bylo by dobrý restartem jen jednoho (a příště případně toho druhýho) zjistit, jestli je problém na straně vysílače nebo přijímače (Nano nebo Mega).

Jak píše někdo jinej, použij HW serial Arduina. Proč dělat se SW, když to umí samo o sobě?

Lze taky použít jinou sběrnici na spojení dvou Arduin, nevím ale název (SPI?), nikdy jsem s tím nedělal.

Používáš na propojení dobrý dráty? Nemůžou někde cestou chytat bordel - neovlivňuje je třeba cirkulárka? :-) Jak daleko jsou ty Arduina vlastně od sebe a kudy dráty vedou?

v

Re:Arduino nepřenáší data po sběrnici
« Odpověď #7 kdy: 11. 01. 2016, 09:36:09 »
používáte kroucený pár a zakončovací odpory?
jak už bylo zmíněno, použitejte hw uart, sw verze je jen pro stav nouze

v

Re:Arduino nepřenáší data po sběrnici
« Odpověď #8 kdy: 11. 01. 2016, 09:36:51 »
Lze taky použít jinou sběrnici na spojení dvou Arduin, nevím ale název (SPI?), nikdy jsem s tím nedělal.
spi ani i2c se nehodí

dustin

Re:Arduino nepřenáší data po sběrnici
« Odpověď #9 kdy: 11. 01. 2016, 09:57:07 »
Myslím si, že pro trochu vážnější práci s elektronikou (i diy doma) se člověk bez osciloskopu neobejde.

Např. Rigol DS1054Z sice mírně podražil, ale dekódování komunikace po sériové lince je velice užitečné. IMO je něco takového i pro amatéra rozumná investice.

David1234

Re:Arduino nepřenáší data po sběrnici
« Odpověď #10 kdy: 11. 01. 2016, 10:03:38 »
Nemůže to být stejný problém jako řešil Petr Stehlík? http://joysfera.blogspot.cz/2013/05/velke-digitalni-mereni-teplot-s-cidly.html

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Arduino nepřenáší data po sběrnici
« Odpověď #11 kdy: 11. 01. 2016, 10:18:50 »
Myslím si, že pro trochu vážnější práci s elektronikou (i diy doma) se člověk bez osciloskopu neobejde.

Např. Rigol DS1054Z sice mírně podražil, ale dekódování komunikace po sériové lince je velice užitečné. IMO je něco takového i pro amatéra rozumná investice.
Pokud se v osciloskopech vyznáš a měl bys doporučení, co by osciloskop pro hobby měl umět, ozvi se mi prosím na pavouk106 zavináč gmail tečka com. Nějaký bych bral, ale 10 tisíc se mi dávat nechce, abych ho pak použil jednou za rok... Jen se ozvi, napsal bych pár dotazů. Díky

pepa

Re:Arduino nepřenáší data po sběrnici
« Odpověď #12 kdy: 11. 01. 2016, 10:20:27 »
ja treba nacitam na raspberry pi data pres rs232 z ridici jednotky solarek kvuli vizualizaci, jenze na to pouzivam usb - rs232 prevdonik protoze hw rs232 komunikuje zas s necim jinym. Ale k problemu sem tam se stava ze to zacne davat divne veci, proste s toho lezou hausnumera, resil sem to restarte picka, ale pak prisel na to ze staci odpojit se do /dev/ttyUSB a zas se pripojit, asi se nekde vyprazdnej buffery nebo resetujou citace a vse jede jak ma, dokonce mi picko sem tam usb prevodnik odpoji aby jej nasledne opet pripojilo a obcas i pod jinym cislem. Ale na to se da take zareagovat, jen to chte stale vse logovat protoze podrazu ze strany rasberianu je vic.

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #13 kdy: 11. 01. 2016, 10:51:40 »
Nejjednodušší je vzít osciloskop a odposlechnout zprávu když to jde OK a když je problém. Tam by mělo být vše vidět.

Pokud osc nemáš, dá se postupovat krok za krokem a izolovat místo, které je problematické.

1. že leze správný formát USART dat přímo z CPU (na pinech procesoru) - to lze když Tx rozbočíš a připojíš k Rx pinu převodníku TTL / RS-232 (nebo USB) a Tx pin převodníku nebudeš nikam zapojovat

2. Přepínání směru - RS-485 je half-duplex, přepínáš směr správně? Opravdu až po odvysílání stopbitu + krátká rezerva?

3. Máš dobře udělanou fyzickou linku? Délky kabelu, zakončovací odpory, ...? Máš s tím nějaké zkušenosti a nebo to děláš poprvé?

4. A co krystal a jeho stabilita? Počítal sis tolerance pro baudrate? Některé krystaly vycházejí opravdu hodně špatně pro použití se standardními baud rate a už nepokryjí teplotní tolerance a nebo dlouhodobou stabilitu.

5. Jaký máš na to SW Serial baud rate? Dělá to problémy i když ho výrazně snížíš?

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #14 kdy: 11. 01. 2016, 10:53:07 »
A ještě doplním - používej prosímtě pořád stejný nick, ať víme kdy reaguješ ty a kdy někdo jiný...