Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Pavel2 04. 01. 2015, 13:07:40
-
Ahoj,
chci si udelat jednoduchy pristupovy system pomoci vyvojoveho prostredi Arduino.
Predstava je takova, ze je jeden master a nekolik slavu. Co slave to dvere. Na kazdem slavu bude pomoci serioveho rozhrani pripojena ctecka cipu. Pokud slave(ctecka) precte cip, master obdrzi retezec k overeni a pokud souhlasi dvere otevre.
Je pro tohle reseni vhodne pouzit I2C? Nebo existuje vhodnejsi rozhrani, ktere se pro tuhle situaci hodi lepe?
Jde o cviceni a tak ted prosim nechci resit otazku bezpecnosti apod. Pokud ma nekdo pripadne zkusenosti s tim jak posilat pomoci I2C retezec o 13 znacich a je ochotny se o ne podelit, budu jedine rad.
-
I2C je použitelné do zhruba 30 cm.
Na rozvod po bytě je RS422, RS485, CanBus a podobně, popřípadě Ethernet.
-
Ok a co kdyz se stane, ze ve stejny okamzik obe ctecky vyslou retezec k overeni. Dojde prece ke kolizi. Nejsem v tom moc znalej a netusim jak tomuhle predejit. Existuje nejaky "if" kde se da v Arduinu rict "pokud je volno odesilej, pokud ne cekej a pak odesli"
-
Ok a co kdyz se stane, ze ve stejny okamzik obe ctecky vyslou retezec k overeni. Dojde prece ke kolizi. Nejsem v tom moc znalej a netusim jak tomuhle predejit. Existuje nejaky "if" kde se da v Arduinu rict "pokud je volno odesilej, pokud ne cekej a pak odesli"
To je standardní problém přenosu dat po sběrnici, na který existují standardní řešení. Pro tebe bude asi nejjednodušší tohle:
1. na sběrnici existuje právě jeden master, ostatní uzly jsou slave
2. master ví, jací slaves na sběrnici jsou
3. master postupně vyzývá k vysílání jednoho slava po druhým
4. slave nesmí vysílat jindy než na výzvu masteru
5. data jsou zabalena do nějakých packetů, aby všichni mohli poznat, že uzel už "domluvil" (poslal celý packet a už bude mlčet)
Jiná, ještě relativně jednoduchá možnost, je síť typu token ring: http://en.wikipedia.org/wiki/Token_ring
Googluj tahle klíčová slova: rs485, collision detection, collision avoidance, full duplex, half duplex, single-master bus
-
Možností je mnoho, nejjednodušší je asi tohle:
Podřízené zařízení se zeptá centrálního zařízení a čeká na odpověď. Pokud se jí nedočká pak to v náhodných intervalech zkouší znovu.
-
Na i2c zapomen. Krom vzdalenosti je jeho nejvetsi pruser, pokud dojde behem zacatku komunikace k resetu masteru. Z toho se slave nevzpamatuje, protoze ceka a ceka na zbytek paketu. Da se to sice HW a SW resit (i kdyz na to vetsina prdi) tak, ze zjistis stav linky a resetnes slave, ale je to prasarna. Komunikuj po ethernetu. Bud das jako slave treba malinu pi, nebo PIC18, ktery ma na sobe i fyzickou vrstvu, takze staci RJ konektor s integrovanym trafem. I kdyz je to osmibit, na tech par dat z RFID cipu bude dobry a TCP/IP knihovna od Microchipu funguje.
-
nebo PIC18, ktery ma na sobe i fyzickou vrstvu
Jaky přesně levný PICy mají PHY? Vygooglil jsem PIC18F97J60, ale ten třeba gme.cz nemá :(
-
Zkuste to bez drátů, milý Marconi ...
nRF24L01+ nebo ESP8266
-
nebo PIC18, ktery ma na sobe i fyzickou vrstvu
Jaky přesně levný PICy mají PHY? Vygooglil jsem PIC18F97J60, ale ten třeba gme.cz nemá :(
On v gme ještě někdo, krom dědků poptávajících blikající ledky, nakupuje? Otrávení prodavači, půlhodinové fronty, stav skladu neodpovídající hodnotám inzerovaným na webu a v neposlední řadě přemrštěné ceny. Myslím, že sami majitelé pochopili, že jim ujel vlak a sortiment přeorientovali na dlouhodoběji udržitelný: http://www.gme.cz/chovatelske-potreby-1
Mrkni na tme: http://www.tme.eu/cz/katalog/?idp=1&search=PIC18F97J60&cleanParameters=1
Případně pak ještě farnell, mouser, digikey, RS electronic.
-
On v gme ještě někdo, krom dědků poptávajících blikající ledky, nakupuje?
Jo, já, když něco chci rychle a mám cestu kolem ;)
a v neposlední řadě přemrštěné ceny.
Farnell je ještě dražší, ne?
Mrkni na tme: http://www.tme.eu/cz/katalog/?idp=1&search=PIC18F97J60&cleanParameters=1
SMD letovat neumím, nebylo by něco v DIP? ;)
-
http://cz.farnell.com/microchip/pic18f67j60-i-pt/mcu-8bit-pic18-41-66mhz-tqfp-64/dp/1332285?ost=pic18f67j60&categoryId=700000004187 (http://cz.farnell.com/microchip/pic18f67j60-i-pt/mcu-8bit-pic18-41-66mhz-tqfp-64/dp/1332285?ost=pic18f67j60&categoryId=700000004187)
https://www.olimex.com/Products/PIC/Development/PIC-MICRO-WEB/ (https://www.olimex.com/Products/PIC/Development/PIC-MICRO-WEB/)
-
SMD letovat neumím, nebylo by něco v DIP? ;)
Mam redukci do nepajiveho pole.
Jestli touzis bastlit, mas ho u mne i se (mnou) zapajenym procesorem.
Ber to jako vdek za toto forum ...
Co je malina pi, dost jsem pri vyvoji zlenivel ...
-
Farnell je ještě dražší, ne?
Záleží, kolik toho bereš. A taky má farnell mnohonásobně větší porfolio.
SMD letovat neumím, nebylo by něco v DIP? ;)
Nebylo by tedy od věci se SMD technologii naučit? :-) Většinu (i pro bastlíře) zajímavých součástek dnes v jiném provedení neseženeš. Není to žádná věda, v nouzi stačí obvykle i trafopáječka :-) A v domácích podmínkách se dá třeba i QFN nebo i BGA s větší roztečí.
-
Jestli touzis bastlit, mas ho u mne i se (mnou) zapajenym procesorem.
Ber to jako vdek za toto forum ...
No teda, to si snad ani nezasloužím :))
Moc rád PIC zkusím, akorát bych ještě potřeboval trochu nasměrovat, jak je to u PICů s toolchainem a programátorem. Dá se programátor nějak zbastlit (něco jako usbtiny pro atmel?)? Páč kvůli jednomu procesoru si pořizovat programátor za tisícovku, to by byl trochu overkill ;)
A toolchain? Existuje něco jako avrgcc, nebo aspoň něco komerčního, ale použitelného bez problémů a zdarma?
Bez těhle dvou věcí bych se do toho nepouštěl, moc času a peněz tomu věnovat nemůžu, čekají mě na poličce taky jiný zajímavý hračky jako třeba stm32f429 ;)
-
Jestli touzis bastlit, mas ho u mne i se (mnou) zapajenym procesorem.
Ber to jako vdek za toto forum ...
No teda, to si snad ani nezasloužím :))
Moc rád PIC zkusím, akorát bych ještě potřeboval trochu nasměrovat, jak je to u PICů s toolchainem a programátorem. Dá se programátor nějak zbastlit (něco jako usbtiny pro atmel?)? Páč kvůli jednomu procesoru si pořizovat programátor za tisícovku, to by byl trochu overkill ;)
A toolchain? Existuje něco jako avrgcc, nebo aspoň něco komerčního, ale použitelného bez problémů a zdarma?
Bez těhle dvou věcí bych se do toho nepouštěl, moc času a peněz tomu věnovat nemůžu, čekají mě na poličce taky jiný zajímavý hračky jako třeba stm32f429 ;)
Pro PIC18 je sdcc. PIC16 je tak úchylná architektura, že pro ni vyjma nějaké obskurní komerční varianty překladač C neexistuje.
-
Teoreticky... na RS485 pripojim http://www.gme.cz/max487cpa-dip8-maxim-p433-111. Master pak treba vysle znak A a toho se chytne Slave 1. Po "selektovacim" znaku pak budou ostatni vedet ze Master komunikuje se Slavem 1 a ostatni maji mlcet dokud se neprijme ridici slovo "end"....
Tak nejak je to mozne udelat?
-
Tak nejak je to mozne udelat?
Jo. Akorát bych přenos nekončil nějakým symbolem, ale udělal bych paket, kde první byte by byl délka. Když uděláš koncový symbol, tak budeš muset ošetřovat, aby se ti náhodou neobjevil uprostřed dat, což je opruz. Když budeš mít pakety s malou délkou (třeba do 255B) a první byte délku paketu, tak se maximálně můžeš přeslechnout v délce nebo může dojít k přerušení přenosu v průběhu posílání paketu, což jsou oboje věci, ze kterých se dá snadno zotavit (z toho druhýho timeoutem, to první ti může na chvilku komunikaci rozhodit, ale pak se to vrátí do normálu - což obvykle nevadí, tak jako tak bys tam asi chtěl nějaký potvrzování packetů).
Ten protokol ani nemusíš vymýšlet, docela dobrý je na tohle třeba MQTT-SN (staré jméno MQTT-S) - neplést s MQTT.
-
přeslechnout v délce ... komunikaci rozhodit
už jste slyšel o kontrolních součtech?
-
Podle me nejjednodusi za 70 korun ethernet modul k arduinu a pripojit pres ethernet. vyhoda je, ze pak muzes treba misto master aruina dat master raspberry. Navic pomoci standardnich knihoven nemusis resit kolize atd.
http://www.ebay.com/itm/ENC28J60-Ethernet-LAN-Network-Mini-51-AVR-ARM-PIC-Code-Arduino-SPI-Port-Module-/271667749910?pt=AU_B_I_Electrical_Test_Equipment&hash=item3f40a8e416 (http://www.ebay.com/itm/ENC28J60-Ethernet-LAN-Network-Mini-51-AVR-ARM-PIC-Code-Arduino-SPI-Port-Module-/271667749910?pt=AU_B_I_Electrical_Test_Equipment&hash=item3f40a8e416)
Potom je jeste jiny typ sitovky k arduinu s vetsi podporou, treba ve forme shieldu
http://www.ebay.com/itm/Ethernet-Shield-W5100-Micro-SD-Card-SlotFor-Arduino-2009-UNO-Mega-1280-2560-DX-/251753904648?pt=US_Ham_Radio_Transmitters&hash=item3a9db3ba08 (http://www.ebay.com/itm/Ethernet-Shield-W5100-Micro-SD-Card-SlotFor-Arduino-2009-UNO-Mega-1280-2560-DX-/251753904648?pt=US_Ham_Radio_Transmitters&hash=item3a9db3ba08)
... ale i ta levnejsi za 70 funguje
-
už jste slyšel o kontrolních součtech?
Kontrolní součet to neřeší. Ani dát tam tu délku dvakrát to neřeší - když přečtu chybu, tak jenom vím, že je to špatně, ale jaká je správná délka packetu stejně nevím.
-
Jestli chces komunikovat uartem po 485tce, pouzij Modbus.
Hlavni vyhoda je, ze je to prumyslovy protokol, uz ho davno nekdo i na tveho atmela napsal ...
Jak master, tak slave.
-
Tak nejak je to mozne udelat?
MAX487 je možno použít. Struktura dat je jednoduchá, první dva byte se dává nějaká magická konstanta třeba 0x1234, další dva byte délka a poslední dva CRC-16, mezitím si můžeš dát co chceš. Při příjmu čekáš na magickou konstantu, pak si zjistíš délku, přijmeš zbytek byte, zkontroluješ CRC a je hotovo.
Podle me nejjednodusi za 70 korun ethernet modul k arduinu a pripojit pres ethernet.
Věc za 70 CZK umí jenom přijímat a odesílat pakety, k tomu je nutno implementovat IP stack = problém.
-
Podle me nejjednodusi za 70 korun ethernet modul k arduinu a pripojit pres ethernet.
Věc za 70 CZK umí jenom přijímat a odesílat pakety, k tomu je nutno implementovat IP stack = problém.
To by mela resit dostupna knihovna EtherCard.
https://github.com/jcw/ethercard/blob/master/README.md (https://github.com/jcw/ethercard/blob/master/README.md)
-
Ahoj,
ethernet ma jednu nevyhodu, a to pravdepodobnou potrebu switche, pokud slavu bude vicero (nehlede na dalsi odber energie switchem). Na sbernici se toho da posadit vice, coz asi bude pripad tazatele, kdyz chce pripojovat ctecky a otevirani dveri.
Za mne kazdopadne diky za link na ethernet knihovnu, je to zajimave. Mozna by byla lepsi i IPv6 (ikdyz ji ze srdce nesnasim, Ondra Caletka promine), tam by mohla odpadnout konfigurace pres DHCP. Ikdyz zase asi pribude zpracovani RA, ale stejne by to pak mohlo jet jen pres link local.
Pokud by mel nekdo nejake schema, jak pospojovat vice arduin sbernicovym systemem, taky bych byl taky rad za inspiraci. ;-)
Staci jeden master a dva slavy a na kazdem slavu treba jeden vstup (od klicenky) a jeden vystup rele. To je IMHO dost
nazorne.
Diky,
Honza
-
už jste slyšel o kontrolních součtech?
Kontrolní součet to neřeší. Ani dát tam tu délku dvakrát to neřeší - když přečtu chybu, tak jenom vím, že je to špatně, ale jaká je správná délka packetu stejně nevím.
znovuobjevujete kolo, tohle je desítky let vyřešený problém - nesedí součet, zahodím data, vysílající strana nedostane potvrzení přijetí a zprávu pošle znova či zareaguje jinak
-
Ono použití I2C na větší vzdálenost nemusí být zas takový nesmysl? Jelikož se dá I2C téměř libovolně "podtaktovat", mohlo by být použití na větší vzdálenosti možné. Samozřejmě to nebude na nějaké datové přenosy, ale na pár bitů by to stačit mohlo. Hezké by na tom bylo, že na straně "klienta" by stačil jeden šváb - microcontroller, nebo přímo nějaká i2c periferie, tedy by to bylo ultra levné. Určitě to tedy není typické použití I2C, ale fungovat by to mělo?
-
Ono použití I2C na větší vzdálenost nemusí být zas takový nesmysl? Jelikož se dá I2C téměř libovolně "podtaktovat", mohlo by být použití na větší vzdálenosti možné.
Rozhodně ne tak, že se propojí piny dvou Arduino vzdálených od sebe deset metrů drátem. Na to je třeba přídavné bastlení a pro začátečníka je rozhodně vhodnější dobastlit RS485.
-
Ono použití I2C na větší vzdálenost nemusí být zas takový nesmysl? Jelikož se dá I2C téměř libovolně "podtaktovat", mohlo by být použití na větší vzdálenosti možné.
Rozhodně ne tak, že se propojí piny dvou Arduino vzdálených od sebe deset metrů drátem. Na to je třeba přídavné bastlení a pro začátečníka je rozhodně vhodnější dobastlit RS485.
Tak po elektrický vrstvě z EIA422 může klidně protáhnout i I2C, akorát mi to taky přinde jako píčovina, bo by musel tahat dva páry. Skoro by jeden řekl, asynchronní signalizace se na delší vzdálenosti používá právě kvůli úspoře mědi (soudruzi promiňte, vy si to klidně natahejte v hliníku).
-
Ono použití I2C na větší vzdálenost nemusí být zas takový nesmysl? Jelikož se dá I2C téměř libovolně "podtaktovat", mohlo by být použití na větší vzdálenosti možné.
Rozhodně ne tak, že se propojí piny dvou Arduino vzdálených od sebe deset metrů drátem. Na to je třeba přídavné bastlení a pro začátečníka je rozhodně vhodnější dobastlit RS485.
Za předpokladu, že ten kmitočet bude opravdu nízký, a celkový odpor toho třeba 10m vodiče bude také nízký (bude mít odpovídající průřez), co dalšího může být problém? Ptám se, protože jsem to chtěl prakticky vyzkoušet, ale jestli to už zkusil někdo přede mnou...
-
OT: eiffele, máte nějakou krpu na mailserveru - na portu 25 se ozývá sshčko :)
-
Za předpokladu, že ten kmitočet bude opravdu nízký, a celkový odpor toho třeba 10m vodiče bude také nízký (bude mít odpovídající průřez), co dalšího může být problém? Ptám se, protože jsem to chtěl prakticky vyzkoušet, ale jestli to už zkusil někdo přede mnou...
Příliš velká parazitní kapacita a indukčnost, ani na malých frekvencích nedá výstupní PIN dostatek energie, aby se přenesl nějaký rozumný signál. Navíc to funguje jako anténa, která chytá elektromagnetický bordel z okolí a přenáší ho přímo do CPU, což ho může zresetovat nebo přepsat RAM pamět apod. Takové věci jako dlouhý drát vedoucí do zařízení je nejlepší oddělit optočlenem.