Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: Arduino RS485  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 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 ?: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.
			 
			
			- 
				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.
			
 
			
			- 
				Požíváš HW sériový port a nebo nějakou jeho SW implementaci?
			
 
			
			- 
				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/ (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ší.
			 
			
			- 
				
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/ (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.
			 
			
			- 
				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.
			
 
			
			- 
				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?
			 
			
			- 
				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
			 
			
			- 
				
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í
			 
			
			- 
				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.
			 
			
			- 
				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
			
 
			
			- 
				
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
			 
			
			- 
				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.
			
 
			
			- 
				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ížíš?
			 
			
			- 
				A ještě doplním - používej prosímtě pořád stejný nick, ať víme kdy reaguješ ty a kdy někdo jiný...
			
 
			
			- 
				Predpokladam, ze tam nebudou zadne zavratne prenosove rychlosti, takze by sel pouzit i SW osciloskop. Pokud neni nic na Linux, tak na Android je a nejaky foun nebo tablet se v okoli obvykle vali.
			
 
			
			- 
				Na linuxu je řada SW osciloskopů. Jen např. RS485 chce před zvukovku dělič, přeci jen +/-12V se zvukovce líbit nebude.
Nicméně je to jen opravdu pro základní kontrolu při nižších rychlostech, vzorkování 192kHz (tj. rozsah 96kHz) je dost omezující.
			 
			
			- 
				Jednou jsem měl jedno RS485 zařízení připojené přes 485/USB převodník s přímým propojením dvěma dráty a trpělo to značnou chybovostí. Po delším laborování to vyřešilo přidání napájení sběrnice RS485 na stranu usb převodníku (v praxi jeden odpor z 5V na desce převodníku), které tam předtím vlastně vůbec nebylo. https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTqT-IsKkB5aJ005HJoVNKKZvRTMwzTtlS-W42CH3ckUMH3DJ4Y (https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTqT-IsKkB5aJ005HJoVNKKZvRTMwzTtlS-W42CH3ckUMH3DJ4Y).
			
 
			
			- 
				
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.
RS485 funguje bezvadně s těmito podmínkami:
1) Na každém konci sběrnice musí být odpor 120 ohmu mezi A-B
2) V jednom místě se musí A respektive B připojit na 5V respektive GND přes odpor 680 ohmu.
3) Pokud mají zařízení nezávislá napájení, je nutné galvanické oddělení, jinak to nepojede kvůli zemním smyčkám.
			 
			
			- 
				
Na linuxu je řada SW osciloskopů. Jen např. RS485 chce před zvukovku dělič, přeci jen +/-12V se zvukovce líbit nebude.
Nicméně je to jen opravdu pro základní kontrolu při nižších rychlostech, vzorkování 192kHz (tj. rozsah 96kHz) je dost omezující.
Jak jsi přišel na rozsah +/- 12V u RS-485?
https://cs.wikipedia.org/wiki/RS-485
			 
			
			- 
				
Jak jsi přišel na rozsah +/- 12V u RS-485?
Sorry, to jsem si popletl s RS232, tam jsem měl zažité 12V, ale koukám, že může být i méně.
			 
			
			- 
				
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.
Ať se ozve do diskuze.
Já bych chtěl osciloskop jako DA převodník do USB a zbytek realizovaný SW. Ale žádný tip na zařízení taky nemám. Už jsem přemýšlel, že bych vykradl nějaké SDR, třeba AirSpy má rychlý AD s dobře vyřešenou komunikací, ale ten čip je BGA a to bohužel nejsem schopen připájet.
			 
			
			- 
				
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.
Zabývám se nákupem mimořádně nekvalitních krystalů v Číně (čti: kupuju rtl-sdr) a nejhoršímu, co jsem zatím potkal, jsem naměřil 280 ppm. Většinou plavou kolem 60. I s 1000 ppm by měl sériák bez problému fungovat (potřebuješ na 10 bitech desynchronizaci o půl bitu → pro obě strany to dává povolenou odchylku 1/40, tedy 25000 ppm!!)
JardaP: bohužel SW osciloskopy pro počítače bývají ze zvukovky, čímž by se rychlosti do 9600 Bd daly poslouchat, ale zvukovka sama o sobě signál dost przní, protože má highpass filtr.
Šlo by ale použít Arduino, v cyklu dělat AnalogRead, splácnout to z 10 bitů na 8 a poslat to jako bajt po sériáku. Ale to je tak pro 1200 Bd (dostaneš se max. na 10 kHz a chceš mít alespoň pár samplů na bit, že jo).
			 
			
			- 
				Častým problémem bývá, že se vlivem rušení zachytí nějaký falešný znak a od té chvíle je celá komunikace posunutá a vrací samozřejmě nesmysly - nemůže to být tento případ? Účinným řešením je například zavést timeout ve smyslu, že se celý řetězec musí přenést do určitého času a provést flush pokud timeout nastane.
			
 
			
			- 
				Nevím co jak to tam máš, ani jsem to všechno nečetl, ale řešení je prosté: za každou zprávu kterou posíláš přidej ještě jedno neb odvoubajtových checksum. Po přijetí zprávy pro ni udělej checksum a ověř si, jestli sedí s checksumem na konci zprávy. Pokud ne, zprávu zahoď.
Pokud je to mimořádně mission critical, udělej vážený checksum tím, že každý bajt do sumy budeš sčítat jako násobek jeho pozice ve zprávě. To ti ošetří i pospřeházení bajtů.
			 
			
			- 
				
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.
Ať se ozve do diskuze.
Já bych chtěl osciloskop jako DA převodník do USB a zbytek realizovaný SW. 
Předpokládám, že myslíš AD ;-)
			 
			
			- 
				
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.
Zabývám se nákupem mimořádně nekvalitních krystalů v Číně (čti: kupuju rtl-sdr) a nejhoršímu, co jsem zatím potkal, jsem naměřil 280 ppm. Většinou plavou kolem 60. I s 1000 ppm by měl sériák bez problému fungovat (potřebuješ na 10 bitech desynchronizaci o půl bitu → pro obě strany to dává povolenou odchylku 1/40, tedy 25000 ppm!!)
JardaP: bohužel SW osciloskopy pro počítače bývají ze zvukovky, čímž by se rychlosti do 9600 Bd daly poslouchat, ale zvukovka sama o sobě signál dost przní, protože má highpass filtr.
Šlo by ale použít Arduino, v cyklu dělat AnalogRead, splácnout to z 10 bitů na 8 a poslat to jako bajt po sériáku. Ale to je tak pro 1200 Bd (dostaneš se max. na 10 kHz a chceš mít alespoň pár samplů na bit, že jo).
Na každé straně linky je jiné zařízení. Nevím s jakým krystalem (tím myslím freq.). Některé kombinace při vyšších rychlostech jsou už na mezi a můžou působit problémy.
			 
			
			- 
				USB osciloskopů je spoustu, DIY i hotové, viz google.
			
 
			
			- 
				
JardaP: bohužel SW osciloskopy pro počítače bývají ze zvukovky, čímž by se rychlosti do 9600 Bd daly poslouchat, ale zvukovka sama o sobě signál dost przní, protože má highpass filtr.
To by snad nevadilo. Nepotrebujete videt, jak krasne ci osklive hranolky vam behaji po drate, ale abyste jeste poznal, co je 0 a co 1.
			 
			
			- 
				
Na každé straně linky je jiné zařízení. Nevím s jakým krystalem (tím myslím freq.). Některé kombinace při vyšších rychlostech jsou už na mezi a můžou působit problémy.
Jako že má špatně nastavenou děličku?
To by snad nevadilo. Nepotrebujete videt, jak krasne ci osklive hranolky vam behaji po drate, ale abyste jeste poznal, co je 0 a co 1.
Například neuvidí start bit po delší době ticha. Ale jo, něco by z toho asi vyluštit šlo.
USB osciloskopů je spoustu, DIY i hotové, viz google.
Hledal jsem, typicky jsou dost drahé, mají neznámou SW podporu, nebo nějaký jiný problém (nenastavitelná reference). Porovnej třeba s LPC4370, čip v maloobchodě za 350 Kč. Samozřejmě rád si nechám doporučit nějaký konkrétní model. Víc kanálů by taky bodlo.
			 
			
			- 
				
LPC4370, čip v maloobchodě za 350 Kč.
LPC4370 má pouhých 80 MSamples a můžeš tak reálně zkoumat analogové signály pouze do 8 MHz. To dneska nestačí ani na Arduino, nemá smysl se tím takhle zabývat.
Pro domácí bastlení je vhodné tohle http://www.rigolna.com/products/digital-oscilloscopes/ds1000e/ cena je na úrovni smartphone.
			 
			
			- 
				
Na každé straně linky je jiné zařízení. Nevím s jakým krystalem (tím myslím freq.). Některé kombinace při vyšších rychlostech jsou už na mezi a můžou působit problémy.
Jako že má špatně nastavenou děličku?
Ne. Ale že kombinace nastavení děličky pro HW UART a daného XTAL na straně jedné a XTAL + SW řešení UART na straně druhé může mít problémy se vzájemným časováním při asynchronní komunikaci.
U některých kombinací krystalů prostě nevychází konstanty pro děličku celočíselně, ale je tam poměrně velký zbytek. A to u nižších freq (říká Nano, vypadá to na vzdálený senzor, možná kvůli spotřebě běží na nějaké nízké freq, co já vím) může působit problém. Pokud je na obou stranách to samé, je jedno že 9600 Bd není ve skutečnosti 9600 ale třeba 9423 Bd. Ale když se obě strany navzájem nesejdou, je to problém.
Pověstné tímhle byly u vyšších rychlostí (malá čísla v děličce) třeba 8051 - tam byly dobře známé "nebaudové" krystaly, se kterými nebylo možné komunikaci s PC nebo jiným zařízením spolehlivě rozchodit.
Ale je to teď takový divný, píšeme si tu sami mezi sebou a autor  původního dotazu nic. Necháme mu chvíli čas a uvidíme jestli něco zabralo.
			 
			
			- 
				Než DS1052E za 9k http://www.silcon.cz/index.php?route=product/product&product_id=1 bych opravdu volil tu DS1054Z za 12.5k http://www.silcon.cz/index.php?route=product/product&path=20_27&product_id=172 , protože tu lze pouhým zadáním sériového kódu upgradovat na daleko vyšší 100MHz model mj. s analýzou všech možných sériových protokolů (např. právě té sériové linky).
Mrkni na http://hifi.slovanet.sk/bb/viewtopic.php?p=224816#224816 dál
			 
			
			- 
				Wow abych pravdu řek začínám se ztrácet. Nejsem žádný velký technik je to v podstatě jen hobby. Tákže...
Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.
Zde ještě uvedu kody v obou arduinech jak v nanu tak v meze.
NANO
#include <SoftwareSerial.h>
#include <LCD5110_Basic.h>
#include <Nokia5110.h>
#include <dht.h>
#include <math.h>
#define SSerialRX        10  //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin 
#define SSerialTxControl 12   // RS modul pin 12
// vytvorime seriovy port na pinu 10 a 11 se jménem RS485Serial
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
LCDnokia5110 lcd(5,6,7,2,13);
//(SCLK, DN, DC, RES, SCE)
LCD5110 myGLCD(13,2,7,5,6);
dht DHT;
#define DHT11_PIN 0
dht DHT2;
#define DHT11_PIN2 1
const unsigned char icon [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0E, 0x0A, 0x0E, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0E, 0x0A, 0x0E, 0x00, 0x00, 0xE0, 0xF8, 0x3E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x3F, 0x0F, 0x00, 0x01, 0xE1, 0xA0, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
};
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
int TempUpPin = A1;
int TempDwnPin = A2;
int LightPin = A3;
int TempUp = 1000;
int TempDwn = 1000;
int Light = 1000;
int SetTemp = 1;
int LastTemp;
int SetInterval = 5000; //Doba po kterou je aktivní mod nastavování teploty
int LightPower = 8;
long last = 0;
long timeout = 0;
long LightOff = 0;
long cekam = 0;
bool debug = true;
bool sett = true;
#define ThermistorPIN1 6   // Podlahoví termostat pin A6
double temp1;
#define ThermistorPIN2 7   // Podlahoví termostat pin A7
double temp2;
double Thermistor(int RawADC, long Calibrate) {
  long Resistance;  
  double Temp;  
  Resistance=Calibrate *((1024.0/RawADC) - 1);  
  Temp = log(Resistance); 
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));   
  Temp = Temp - 273.15;  // Convert Kelvin to Celsius                                       
  return Temp;  // Return the Temperature
}
void setup()
{
 myGLCD.InitLCD();
 lcd.ShowImage(icon, true);
 pinMode(LightPower, OUTPUT);
 //Serial.begin(9600);
 RS485Serial.begin(14400);
 digitalWrite(LightPower, LOW);
 if(debug){
   Serial.println();
   Serial.println("                 DEBUG MODE ENABLED");
   Serial.println();
 }
 
}
void loop()
{
  if(millis() > cekam){ 
    cekam = millis() + 100; 
    TempUp = analogRead(TempUpPin);
    TempDwn = analogRead(TempDwnPin);
    Light = analogRead(LightPin);
    
    if(debug){
        if((TempUp == 0 || TempDwn == 0) || Light == 0){
        //Serial.print("\t \t \t \t \t");
        //Serial.print("TempUp: ");
        //Serial.print(TempUp);
        //Serial.print("\t");
        //Serial.print("TempDwn: ");
        //Serial.print(TempDwn);
        //Serial.print("\t");
        //Serial.print("Light: ");
        //Serial.println(Light);
        }
    } 
    
    if(Light == 0){
      digitalWrite(LightPower, HIGH);
      LightOff = millis()+3000;  
    }
    
  
    if(TempUp == 0){
      digitalWrite(LightPower, HIGH);
      timeout = millis()+SetInterval; 
      LightOff = timeout;
       if(SetTemp < 45){
        SetTemp = SetTemp + 1; 
      } 
    }
    
    
    
    if(TempDwn == 0){
      digitalWrite(LightPower, HIGH);
      timeout = millis()+SetInterval;
      LightOff = timeout;
      if(SetTemp > 1){
        SetTemp = SetTemp - 1;
      }
    }
    
    if((TempUp == 0 || TempDwn == 0) || Light == 0){
      Serial.print("id:1-settemp:");
      Serial.println(SetTemp);
    }
    
    if(LightOff < millis()){    
      digitalWrite(LightPower, LOW);    
    }  
  }
  if((TempDwn != 0 && TempUp != 0) && timeout+250 < millis()){
    if(millis() > last){
      int chk = DHT.read11(DHT11_PIN);
      int chk2 = DHT2.read11(DHT11_PIN2);
      last = millis() + 1000;
      myGLCD.setFont(MediumNumbers);
      myGLCD.printNumI(DHT.temperature, 21, 0);
      myGLCD.printNumI(DHT.humidity, 21, 32);
      if(debug){
        myGLCD.setFont(SmallFont);
        myGLCD.printNumI(last, RIGHT, 24);
        myGLCD.printNumI(SetTemp, LEFT, 24);
        Serial.print("Vlhkost: ");
        Serial.print(DHT.humidity, 0);
        Serial.print("\t");
        Serial.print("Teplota: ");
        Serial.println(DHT.temperature, 0);
      } 
     if(debug){
       //Serial.print("SettTemp: ");
       //Serial.println(SetTemp);
       
       digitalWrite(SSerialTxControl, 1);  // Povolí odesílání na modulu RS485    
       // id termostatu
       RS485Serial.print("id:1"); 
       // teplota z interního čidla
       RS485Serial.print("-its1:"); 
       RS485Serial.print(DHT.temperature, 0);
       // vlhkost z interního čidla
       RS485Serial.print("-ihs1:"); 
       RS485Serial.print(DHT.humidity, 0);
      
       //teplota z externiho čidl 
       RS485Serial.print("-its2:"); 
       RS485Serial.print(DHT2.temperature, 0);
       // vlhkost z externiho čidla
       RS485Serial.print("-ihs2:"); 
       RS485Serial.print(DHT2.humidity, 0);
       
       temp1=Thermistor(analogRead(ThermistorPIN1), 9750);           
       RS485Serial.print("-ets1:"); 
       RS485Serial.print(temp1,0);
       
       temp2=Thermistor(analogRead(ThermistorPIN2), 9750);           
       RS485Serial.print("-ets2:"); 
       RS485Serial.print(temp2,0);
       
        if(LastTemp != SetTemp){
         //odesílání informace o nově nastavené teplotě
         LastTemp = SetTemp;
         RS485Serial.print("-stmp:"); 
         RS485Serial.print(LastTemp);    
       }
       
       RS485Serial.write(0x0A); // odešle znak kového řádku      
       digitalWrite(SSerialTxControl, 0);  // Zakáže odesílání na modulu RS485 
     } 
    }
  }else{
    if(timeout < millis()){
      myGLCD.clrScr();
      lcd.ShowImage(icon, true);
    }else{      
      myGLCD.clrScr();
      myGLCD.setFont(SmallFont);
      myGLCD.print("Nastavte", CENTER, 1);
      myGLCD.print("teplotu", CENTER, 8);
      myGLCD.setFont(BigNumbers);
      myGLCD.printNumI(SetTemp, CENTER, 24);
      delay(20); 
    }
  }
    
}
MEGA
#include <SoftwareSerial.h>
#define SSerialRX        10 //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin
#define SSerialTxControl 3   // RS modul pin 3
#define R1 22
#define R2 23
#define R3 24
#define R4 25
#define R5 26
#define R6 27
#define R7 28
#define R8 29
int cmd = 0;
boolean SR1 = false; 
boolean SR2 = false;
boolean SR3 = false;
boolean SR4 = false;
boolean SR5 = false;
boolean SR6 = false;
boolean SR7 = false;
boolean SR8 = false;
// vytvorime seriovy port na pinu 10 a 11
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
int byteReceived;
 
void setup()  
{
  
  
  Serial.begin(9600); 
  pinMode(SSerialTxControl, OUTPUT);  
  digitalWrite(SSerialTxControl, 0);  // Povolí přijímaní na modulu RS485
  RS485Serial.begin(14400); // rychlost RS485 musí být nastavená stejně jako na vysílači  
  
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(R7, OUTPUT);
  pinMode(R8, OUTPUT);
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
  digitalWrite(R7, HIGH);
  digitalWrite(R8, HIGH);
  
}
 
 
void loop()  {
   //načítání hodnot z RPI a spínání jednotlivích vístupů na rele liště
   if(Serial.available() > 0){
     cmd = Serial.read();
     
     if(cmd == '1'){
       if(SR1){
         digitalWrite(R1, HIGH);
         SR1 = false;
       }else{
         digitalWrite(R1, LOW);
         SR1 = true;
       }
     }
     
     if(cmd == '2'){
       if(SR2){
         digitalWrite(R2, HIGH);
         SR2 = false;
       }else{
         digitalWrite(R2, LOW);
         SR2 = true;
       }
     }
     
     if(cmd == '3'){
       if(SR3){
         digitalWrite(R3, HIGH);
         SR3 = false;
       }else{
         digitalWrite(R3, LOW);
         SR3 = true;
       }
     }
     
     if(cmd == '4'){
       if(SR4){
         digitalWrite(R4, HIGH);
         SR4 = false;
       }else{
         digitalWrite(R4, LOW);
         SR4 = true;
       }
     }
     
     if(cmd == '5'){
       if(SR5){
         digitalWrite(R5, HIGH);
         SR5 = false;
       }else{
         digitalWrite(R5, LOW);
         SR5 = true;
       }
     }
     
     if(cmd == '6'){
       if(SR6){
         digitalWrite(R6, HIGH);
         SR6 = false;
       }else{
         digitalWrite(R6, LOW);
         SR6 = true;
       }
     }
     
     if(cmd == '7'){
       if(SR7){
         digitalWrite(R7, HIGH);
         SR7 = false;
       }else{
         digitalWrite(R7, LOW);
         SR7 = true;
       }
     }
     
     if(cmd == '8'){
       if(SR8){
         digitalWrite(R8, HIGH);
         SR8 = false;
       }else{
         digitalWrite(R8, LOW);
         SR8 = true;
       }
     }
   } 
   
  
   // když jsou nějaká data přijata na RS485
   if (RS485Serial.available())  
   {    
    byteReceived = RS485Serial.read();    // Přečte byte z modulu RS485
    Serial.write(byteReceived);           // a odešle je na Serial Monitor
   } 
  
}
Dále jako propojovací vodiče používám klasický UTP kabel 2 dráty pro data a po 2 drátech vedu napájení. Délka cca 8m (jedná se pouze o testovací propojení, v reálu bude vzdálenost od 3m do 30m) Oba konce jsou zakončeny odporem 110Ω.
Zde je i vyfocené zapojení u megy.
(http://s11.postimg.org/5c69rko6b/MG_4634_1.jpg)
Moduly RS485 jsou na obou koncích napájeny přímo arduinem. 
Někdo se zmiňoval o restartech. Jediné co pomáhá je vypnutí obou arduin kompletní odpojení modulu RS485 a vše zase zapojit a zapnout.
			 
			
			- 
				Ten vodivý pytlík bych tedy pod malinou nenechával...
			
 
			
			- 
				
Wow abych pravdu řek začínám se ztrácet. Nejsem žádný velký technik je to v podstatě jen hobby. Tákže...
Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.
Důvěřuj, ale prověřuj.
Dále jako propojovací vodiče používám klasický UTP kabel 2 dráty pro data a po 2 drátech vedu napájení. Délka cca 8m (jedná se pouze o testovací propojení, v reálu bude vzdálenost od 3m do 30m) Oba konce jsou zakončeny odporem 110Ω.
Moduly RS485 jsou na obou koncích napájeny přímo arduinem. 
Někdo se zmiňoval o restartech. Jediné co pomáhá je vypnutí obou arduin kompletní odpojení modulu RS485 a vše zase zapojit a zapnout.
Jestli nezabírá ani reset na arduinu, to to vypadá, že se ti zašvihnul jeden z budičů. Projdi si zpátky diskuzi, jeden z příspěvků byl o tom, jak navázat /přes odpor) datové linky na VCC nebo GND. Zkus to.
Pokud jde o zdrojáky, trochu mně překvapuje že přepínáš směr na Nanu - vždyť jen vysílá a nikdy nepřijímá. Zkus ho nastavit natvrdo na vysílání a ověř jestli problém trvá.
A jak se to chová když jdeš s rychlostí dolů? Třeba na 1200 bd?
Je něký důvod proč trváš na SoftwareSerial? Mně to přijde jako naprostá degradace tak skvělého zařízení jakým je jednočip.
			 
			
			- 
				
Je něký důvod proč trváš na SoftwareSerial? Mně to přijde jako naprostá degradace tak skvělého zařízení jakým je jednočip.
Proboha, teď jsem si všimnul - proč používáš SoftwareSerial i na té MEGA? Vždyť ta má, jestli se dobře pamatuji, 4x HW serial port!!!
			 
			
			- 
				
LPC4370 má pouhých 80 MSamples a můžeš tak reálně zkoumat analogové signály pouze do 8 MHz. To dneska nestačí ani na Arduino, nemá smysl se tím takhle zabývat.
Pro domácí bastlení je vhodné tohle http://www.rigolna.com/products/digital-oscilloscopes/ds1000e/ cena je na úrovni smartphone.
Já mám aplikace, kterým tahle rychlost stačí, ale zase potřebuju kontinuální sypání do počítače, ne jako tady, že to přečte milion samplů a pak je to chvíli počítá.
// software crack na osciloskop, proboha, kam jsme se to dostali
Ne. Ale že kombinace nastavení děličky pro HW UART a daného XTAL na straně jedné a XTAL + SW řešení UART na straně druhé může mít problémy se vzájemným časováním při asynchronní komunikaci.
Omlouvám se, s tím SW sériákem mě to nenapadlo, tam už je mi jasné, že s tím se to může chovat kdovíjak.
Ten vodivý pytlík bych tedy pod malinou nenechával...
RPi nemám, ale změřil jsem teď pytlík od OrangePi (vypadá stejně jako na fotce) a ani měřákem do 20 MΩ jsem nic nenaměřil (zkoušel jsem to zevnitř, zvenku, i ho propíchnout, kdyby to byla vodivá vrstva mezi nevodivými). Možná v Číně vyrobili fake antistatiku :-).
			 
			
			- 
				
Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.
Tim bych si nebyl tak jisty. Me Arduino Nano nechtelo spolehlive komunikovat s ESP-01 pomoci SoftwareSerial ani AltSoftSerial. AT prikazy, ktere generovaly kratke odpovedi, fungovaly v pohode, ale pri vypsani dostupnych siti to vzdy v polovine vypisu zacalo hazet bordel. S HW UART fungovalo vse bez problemu.
			 
			
			- 
				
// software crack na osciloskop, proboha, kam jsme se to dostali
U Rigolů je to známá věc, hardwarově modely jedné řady všechny stejný, funkce i parametry se aktivují kódem, který lze vygenerovat. Např. v signální cestě je filtr, který se zadáním kódu přemostí a 50MHz rázem jede do 100MHz. Na youtube jsou detailní analýzy včetně schémat. Výrobci to dává smysl, ušetří na výrobě více variant HW.
			 
			
			- 
				
Tim bych si nebyl tak jisty. Me Arduino Nano nechtelo spolehlive komunikovat s ESP-01 pomoci SoftwareSerial ani AltSoftSerial. AT prikazy, ktere generovaly kratke odpovedi, fungovaly v pohode, ale pri vypsani dostupnych siti to vzdy v polovine vypisu zacalo hazet bordel.
Taky pokud na tom Arduinu Mega dělá současně něco jiného (nedej bože generujícího přerušení), tak se implementace SW sériáku nedostane „ke slovu“ a prošvihne bit.
			 
			
			- 
				
// software crack na osciloskop, proboha, kam jsme se to dostali
U Rigolů je to známá věc, hardwarově modely jedné řady všechny stejný, funkce i parametry se aktivují kódem, který lze vygenerovat. Např. v signální cestě je filtr, který se zadáním kódu přemostí a 50MHz rázem jede do 100MHz. Na youtube jsou detailní analýzy včetně schémat. Výrobci to dává smysl, ušetří na výrobě více variant HW.
Je to víceméně tak. Ale není to celá pravda. U některých typů Rigolů jsou použité některé součástky (operáky, AD, ...) které jsou parametrově odpovídající slabšímu modelu. Poté, co vyrobí desky, změří frekvenční parametry vstupů a rozdělí je do dvou kategorií - lepší model (vyšší vzorkovací freq) a slabší model. A sériovým/modelovým číslem se jen odemknou příslušné parametry/funkce.
			 
			
			- 
				
Ten vodivý pytlík bych tedy pod malinou nenechával...
RPi nemám, ale změřil jsem teď pytlík od OrangePi (vypadá stejně jako na fotce) a ani měřákem do 20 MΩ jsem nic nenaměřil (zkoušel jsem to zevnitř, zvenku, i ho propíchnout, kdyby to byla vodivá vrstva mezi nevodivými). Možná v Číně vyrobili fake antistatiku :-).
Povrchový odpor to mívá v řádech 10^10 Ohm. Takže měřákem se nenaměří skoro nic. Navíc malina má ochranný lak. Prakticky u všeho, co se lidem dostane do ruky, je riziko zanedbatelné.
			 
			
			- 
				
Je to víceméně tak. Ale není to celá pravda. U některých typů Rigolů jsou použité některé součástky (operáky, AD, ...) které jsou parametrově odpovídající slabšímu modelu. Poté, co vyrobí desky, změří frekvenční parametry vstupů a rozdělí je do dvou kategorií - lepší model (vyšší vzorkovací freq) a slabší model. A sériovým/modelovým číslem se jen odemknou příslušné parametry/funkce.
Máš k tomu nějaký linky? Nikde jsem se s tím zatím nesetkal. Díky.
			 
			
			- 
				Tak jsem vyhodil SW serial a použil HW, také jsem snížil Bd z 14400 na 2400 a vypadá to že vše zatím funguje jak má. 
Jediné čeho se bojím je zahřívání MAX485 čipu na straně s nanem. Sotva na něm udržíme prst. Hlavně po delší době běhu. Může toto zahřívání mít vliv na jeho funkčnost, nebo se jedná o běžný jev? Jinac bych musel začít řešit nějaké chlazení. A s ohledem ze celý termostat (nano, MAX485, čidlo teploty a displej ) se musí vejít do nizkoprofilove krabice na vypínač ani nevím zda bych se tam vešel. Ani nevím jestli se dá tak malí chladič sehnat.
			 
			
			- 
				MAX by se výrazně zahřívat neměl. Někde bude něco špatně. Doporučuju změřit, v jakém stavu bere MAX velký proud a kudy teče. Buď je vadný MAX, nebo je chyba v zapojení.
			
 
			
			- 
				
Tak jsem vyhodil SW serial a použil HW, také jsem snížil Bd z 14400 na 2400 a vypadá to že vše zatím funguje jak má. 
Jediné čeho se bojím je zahřívání MAX485 čipu na straně s nanem. Sotva na něm udržíme prst. Hlavně po delší době běhu. Může toto zahřívání mít vliv na jeho funkčnost, nebo se jedná o běžný jev? Jinac bych musel začít řešit nějaké chlazení. A s ohledem ze celý termostat (nano, MAX485, čidlo teploty a displej ) se musí vejít do nizkoprofilove krabice na vypínač ani nevím zda bych se tam vešel. Ani nevím jestli se dá tak malí chladič sehnat.
neřekl bych, že by se měl takhle zahřívat, kolik máte zařízení na sběrnici? a kolik zakončovacích odporů?
			 
			
			- 
				
Jediné čeho se bojím je zahřívání MAX485 čipu na straně s nanem. Sotva na něm udržíme prst.
Zahřívání MAX485 značí průšvih. Buď obě strany dlouhodobě vysílají proti sobě, nebo je tam jiná velká závada.
			 
			
			- 
				Na sběrnici mam zatím jen 2 zařízení nano a megu. nano odesílá cca každou 1 vteřinu. Pokud by bylo špatně zapojeno tak by to nefungovalo. Oba konce jsou zakončeny 110Ω odporem. 
			
 
			
			- 
				
Na sběrnici mam zatím jen 2 zařízení nano a megu. nano odesílá cca každou 1 vteřinu. Pokud by bylo špatně zapojeno tak by to nefungovalo. Oba konce jsou zakončeny 110Ω odporem.
zkuste odpojit megu, terminátor nechat, uvidíte jestli se max přestane zahřívat
a můžete taky postnou schéma zapojení maxe na obou koncích
			 
			
			- 
				Dvě arduina se nezapojují HW serialem takto (http://robotic-controls.com/sites/default/files/learn/Arduino-ArduinoSerial.png)?
			
 
			
			- 
				
Dvě arduina se nezapojují HW serialem takto (http://robotic-controls.com/sites/default/files/learn/Arduino-ArduinoSerial.png)?
pokud jsou od sebe vzdálena tak jako na obrázku, pak ano :)
			 
			
			- 
				
Na sběrnici mam zatím jen 2 zařízení nano a megu. nano odesílá cca každou 1 vteřinu. Pokud by bylo špatně zapojeno tak by to nefungovalo. Oba konce jsou zakončeny 110Ω odporem.
zkuste odpojit megu, terminátor nechat, uvidíte jestli se max přestane zahřívat
a můžete taky postnou schéma zapojení maxe na obou koncích
Vyzkouším až dorazil domů. Jinak co se týče zapojení je totožné jako zde 
http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/ (http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/)
Až na to že nepoužívám SoftwareSerial ale HW seriál přímo na arduinu. U námi pin 0 a 1 a u megy Seriál2 co je myslím 7 a 8. Jinak je zapojení stejne. Ale schéma také postnu.
A ještě jeden dotaz trochu bokem. Je možné mít zařízení na sbernici zapojené do hvězdice? 
			 
			
			- 
				
Až na to že nepoužívám SoftwareSerial ale HW seriál přímo na arduinu.
U RS485 je nevyhnutelné správně řídit piny RE, DE, nestačí jenom knihovna na sériovou linku RS232. V HW na to není podpora, tento pin nastavuje software.
A ještě jeden dotaz trochu bokem. Je možné mít zařízení na sbernici zapojené do hvězdice?
Nepoužívá se, vznikají vícenásobné odrazy od konců vedení které dělají neplechu.
Jsou způsoby jak to řešit, ale to asi není tvůj případ.
			 
			
			- 
				
Na sběrnici mam zatím jen 2 zařízení nano a megu. nano odesílá cca každou 1 vteřinu. Pokud by bylo špatně zapojeno tak by to nefungovalo. Oba konce jsou zakončeny 110Ω odporem.
zkuste odpojit megu, terminátor nechat, uvidíte jestli se max přestane zahřívat
a můžete taky postnou schéma zapojení maxe na obou koncích
Vyzkouším až dorazil domů. Jinak co se týče zapojení je totožné jako zde 
http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/ (http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/)
Až na to že nepoužívám SoftwareSerial ale HW seriál přímo na arduinu. U námi pin 0 a 1 a u megy Seriál2 co je myslím 7 a 8. Jinak je zapojení stejne. Ale schéma také postnu.
A ještě jeden dotaz trochu bokem. Je možné mít zařízení na sbernici zapojené do hvězdice?
hvězdice asi není dobrý nápad, tady je hezky popsané (s obrázkama!) co nestandartní zapojení dělá tomu signálu https://www.maximintegrated.com/en/app-notes/index.mvp/id/763
ad zahřívání - že vy toho maxe na straně nano vůbec nepřepínáte do přijímacího režimu?
			 
			
			- 
				
ad zahřívání - že vy toho maxe na straně nano vůbec nepřepínáte do přijímacího režimu?
To je jedna možnost, co se může stát.
Druhá možnost je, že jak to teď zapojil na HW sériák, tak se mu perou úrovně s USB konvertorem na tom Arduinu.
			 
			
			- 
				Ok já si myslel že bude problém v odrazech signálu. Napadlo mě vytvořit jednoduchý obvod s SSR rele ovladanyma pomocí megy. Ta by je spinala a vytvářela spojení vždy mezi sebou a jednym nanem. 
Správně neprepinam. Nano pouze odesílá cca každou vteřinu.
			 
			
			- 
				
Napadlo mě vytvořit jednoduchý obvod s SSR rele ovladanyma pomocí megy. Ta by je spinala a vytvářela spojení vždy mezi sebou a jednym nanem. 
to už by bylo jednodušší zapojit paralelně několik driverů a vybírat aktivní větev pomocí data enable signálů
Správně neprepinam. Nano pouze odesílá cca každou vteřinu.
tak začněte, ono to naprosto zbytečně žere docela hodně
			 
			
			- 
				
Ok já si myslel že bude problém v odrazech signálu. Napadlo mě vytvořit jednoduchý obvod s SSR rele ovladanyma pomocí megy. Ta by je spinala a vytvářela spojení vždy mezi sebou a jednym nanem. 
Dělá se to tak, že se použije víc MAX485, na každou sběrnici jeden a vhodně se přepíná RE+DE.
Správně neprepinam.
Takže jsi byl líný plně implementovat RS485 a teď se divíš že ti to hřeje ;D
			 
			
			- 
				
Ok já si myslel že bude problém v odrazech signálu. Napadlo mě vytvořit jednoduchý obvod s SSR rele ovladanyma pomocí megy. Ta by je spinala a vytvářela spojení vždy mezi sebou a jednym nanem. 
Správně neprepinam. Nano pouze odesílá cca každou vteřinu.
jenom pro jistotu - na jednu sběrnici (kroucený pár + dva terminátory) může připojit hodně zařízení jako odbočky (multi drop), je to sběrnice nikoliv hvězda, ale neznamená to omezení na dvě zařízení
			 
			
			- 
				
Správně neprepinam. Nano pouze odesílá cca každou vteřinu.
tak začněte, ono to naprosto zbytečně žere docela hodně
Hlavně praní se o směrnici by mohlo vysvětlovat ten problém, že kterým sem vůbec přišel.
			 
			
			- 
				
jenom pro jistotu - na jednu sběrnici (kroucený pár + dva terminátory) může připojit hodně zařízení jako odbočky (multi drop), je to sběrnice nikoliv hvězda, ale neznamená to omezení na dvě zařízení
Super to sem potřeboval vědět. Vím že se jedná o základní znalost ale s RS485 pracují poprvé. Zas jsem o něco chytřejší. 
Ohledně toho časování. Je mi jasné že když budou vysílat dvě zařízení ve stejnou dobu nebude to fungovat. Hodlám to celé řídit pomocí megy. Mega odešle 1. Na sbernicu bude cca 10 termostatu 1-10. Všechny to přijmou ale pouze 1 odpoví. Potom vyšle třeba zase 4 a odpoví jen termostat 4.
			 
			
			- 
				
Správně neprepinam. Nano pouze odesílá cca každou vteřinu.
tak začněte, ono to naprosto zbytečně žere docela hodně
Hlavně praní se o směrnici by mohlo vysvětlovat ten problém, že kterým sem vůbec přišel.
ne, to neodpovídá popisu
			 
			
			- 
				
Super to sem potřeboval vědět. Vím že se jedná o základní znalost ale s RS485 pracují poprvé. Zas jsem o něco chytřejší. 
podívejte se na ten odkaz na stránku maximu, pár věcí vám to osvětlí (např. že ty odbočky mají od sběrnice mají být krátké)
Ohledně toho časování. Je mi jasné že když budou vysílat dvě zařízení ve stejnou dobu nebude to fungovat. Hodlám to celé řídit pomocí megy. Mega odešle 1. Na sbernicu bude cca 10 termostatu 1-10. Všechny to přijmou ale pouze 1 odpoví. Potom vyšle třeba zase 4 a odpoví jen termostat 4.
takhle se to většinou dělá, možná byste mohl i uvážit nějaký standartní protokol, asi nejrozšířenější je modbus rtu
			 
			
			- 
				Trosku offtopic, zpatky k osciloskopum:
Kdyz uz se chci osciloskopem koukat, co se na te RS485 deje, tak obvykle bude na obou vodicich namodulovanych 50 Hz s nejakou amplitudou. Pokud nemam k dispozici osciloskop na baterky nebo oddelovaci trafo nebo napajeci kabel s uskripnutym zelenozlutym, tak mi nezbude nez dat jednu sondu na vodic A, druhou na vodic B a zobrazovat rozdil. A otazka zni: umi nejaky levny osciloskop triggrovat na rozdil dvou kanalu (nebo obecne na MATH)? Umi to treba ten zminovany Rigol 1052E? Dokazal by to ten chytrejsi 1054Z?
			 
			
			- 
				Trigger na rozdíl A-B je celkem standardní funkce.
Ten 1054Z má (po "aktualizaci") přímo analýzu vícedrátových sériových protokolů (sériák, I2C, atd.). Rovnou vypisuje (bin/dek/hexa) přijaté/odeslané bajty. Myslím, že lze trigrovat i konkrétní zaslanou hodnotou. Analyzoval jsem s ním sériový protokol předávaný nějakými váhami do bluetooth modulu a byla to práce na chvíli.
Jinak není problém jej hodiny napájet z nabité obyčejné UPSky odpojené od sítě, na ty generované hranáče šlape OK, měřil jsem takto triakový primár třífázové svářečky, samozřejmě trochu opatrněji :-)
			 
			
			- 
				
Ohledně toho časování. Je mi jasné že když budou vysílat dvě zařízení ve stejnou dobu nebude to fungovat. Hodlám to celé řídit pomocí megy. Mega odešle 1. Na sbernicu bude cca 10 termostatu 1-10. Všechny to přijmou ale pouze 1 odpoví. Potom vyšle třeba zase 4 a odpoví jen termostat 4.
Na jeden kroucený pár můžeš připojit dvacet zařízení s RS485 bez větších úprav, samozřejmě musíš správně přepínat vysílání/příjem. Hvězdicí se myslí desítky metrů odboček a to fungovat nebude. Prostá odbočka 10 cm fungovat bude.
Protokol je nutno zabezpečit CRC. Ukázka komunikace: 0xFF 0xFF pro stabilizaci linky, pak protokol: 0x01 povel data 0x80 CRC_LO CRC_HI
Ukázka CRC: http://stjarnhimlen.se/snippets/crc-16.c
Kdyz uz se chci osciloskopem koukat, co se na te RS485 deje, tak obvykle bude na obou vodicich namodulovanych 50 Hz s nejakou amplitudou.
S triggerem na RS485 problémy nejsou, má 5 V, šum bývá podstatně menší.
			 
			
			- 
				
Trigger na rozdíl A-B je celkem standardní funkce.
...
Jinak není problém jej hodiny napájet z nabité obyčejné UPSky odpojené od sítě, na ty generované hranáče šlape OK, měřil jsem takto triakový primár třífázové svářečky, samozřejmě trochu opatrněji :-)
No dobra, odpovim si sam.  :)  Rigol DS1052E umi dle navodu CH1, CH2, EXT, AC line a nejaka verze ma jeste digitalni vstupy, ale nikde nevidim MATH, nebo neco takoveho. Je tam sice moznost Alternate (CH1 or CH2), u kazdeho kanalu muzu chytat ruzne siroke pulsy, radky video signalu... A kdyz koukam na ten DS1054Z, tak nema ani EXT a pri triggerovani RS232 se mu musi vybrat jeden kanal. Take tam nevidim moznost chytat na MATH, nebo tak neco. Je to zvlastni, asi predpokladaji, ze kdo chce, ten si nejak poradi. Nebo to triggerovani vyhodnocuje nejaky rychly HW a MATH se pocita az potom pri zobrazeni. (?)
UPS me nenapadla. Je sice vetsi nez oddelovaci trafo, ale zase nemusim hledat na hale zasuvky a tahat prodluzovak.
S triggerem na RS485 problémy nejsou, má 5 V, šum bývá podstatně menší.
Praveze uz jsem videl i vetsi vlny, nez samotne A-B u RS485. Se svym jednoduchym osciloskopem jsem dokazal trigrovat pouze pakety bud na horni nebo dolni uvrati 50Hz vlny.
			 
			
			- 
				
Praveze uz jsem videl i vetsi vlny, nez samotne A-B u RS485. Se svym jednoduchym osciloskopem jsem dokazal trigrovat pouze pakety bud na horni nebo dolni uvrati 50Hz vlny.
To se samozřejmě může stát a rovnou jste odhalil problém se zemními smyčkami :)
			 
			
			- 
				
A kdyz koukam na ten DS1054Z, tak nema ani EXT a pri triggerovani RS232 se mu musi vybrat jeden kanal. Take tam nevidim moznost chytat na MATH, nebo tak neco. 
Ok, sorry, spletl jsem si to s math. Ten rigol trigger na a-b neumí. Je to logické, je to digitál a výsledky přijdou až se zpožděním.
[/quote]
Je to zvlastni, asi predpokladaji, ze kdo chce, ten si nejak poradi.
V tomto případě tedy asi holt jo. Operák na rozdíl a trigrovat přes další kanál.
			 
			
			- 
				
A kdyz koukam na ten DS1054Z, tak nema ani EXT a pri triggerovani RS232 se mu musi vybrat jeden kanal. Take tam nevidim moznost chytat na MATH, nebo tak neco. 
Ok, sorry, spletl jsem si to s math. Ten rigol trigger na a-b neumí. Je to logické, je to digitál a výsledky přijdou až se zpožděním.
Je to zvlastni, asi predpokladaji, ze kdo chce, ten si nejak poradi.
V tomto případě tedy asi holt jo. Operák na rozdíl a trigrovat přes další kanál.
A nebo primityvní přípravek s MAX485 zapojenou na trvalý příjem a trigovat hezky na přijatý TTL/3.3v signál...
			 
			
			- 
				 :o Doprčic, hrubka jak vrata...