2 arduino közötti kommunikáció

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

A rádió Tx-Rx bekötése nem jó Arduino oldalon. Cseréld fel őket...

Most igy vagy bekötve:

Kód: Egész kijelölése

PcTx------+--------ArduinoRx
          |
          |
     RadioRx
Ez kéne:

Kód: Egész kijelölése

PcTx------+--------ArduinoRx
          |
          |
     RadioTx
Sőt!
A 115200 bps esetén a hiba >3%!
Örülj, hogy valami kimegy!
16 MHz esetén a legnagyobb használható sebesség (0.5% valódi és névleges sebesség külöbsége) 19200 bps. (0.16% hiba)
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: csabeszq »

16 MHz esetén a legnagyobb használható sebesség (0.5% valódi és névleges sebesség külöbsége) 19200 bps.
500.000 bps-nél a hiba 0%.

:)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

A rádiós modul meg 250kbps-t tud :P

500 kbps az azért arduino alatt szivatás. És nem is ennyi a RS232/serial szabvány sebessége, hanem 480 kbps :) .
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: csabeszq »

Csak a vicc kedvéért írtam. Az AVR-Duino Uno egyébként simán tolja az 500 kbps-t Linux alatt.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

Vigyázz!
Az UNO illesztőchipje szintén ATMega, 16 MHz-n járatva. Így a két eszköz _relatív_ sebessége 0%. Mert mind a mega, mind az UNO illesztőchip 3,5% hibával dolgozik :).
Grega
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2013. március 19. kedd, 17:11

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Grega »

Robert írta:A rádió Tx-Rx bekötése nem jó Arduino oldalon. Cseréld fel őket...

Most igy vagy bekötve:

Kód: Egész kijelölése

PcTx------+--------ArduinoRx
          |
          |
     RadioRx
Ez kéne:

Kód: Egész kijelölése

PcTx------+--------ArduinoRx
          |
          |
     RadioTx
Sőt!
A 115200 bps esetén a hiba >3%!
Örülj, hogy valami kimegy!
16 MHz esetén a legnagyobb használható sebesség (0.5% valódi és névleges sebesség külöbsége) 19200 bps. (0.16% hiba)

Szia!

Köszönöm szépen! Tényleg fel kellett cserélni a rádió RX-TX vezetékeit! Most már küldi az adatokat a számítógépre a szomszéd szobából :D
A vevő modul terminál ablakában látszanak az átviteli hibák is: kb minden 10-15.sor hibásan megy át, kimarad a legutolsó soremelés, vagy valamelyik adat.

Igazad van, a 115200bps sebesség túl sok a processzornak. Ezt onnan is észrevettem hogy ha a programba beleírok még valami egyszerű matematikát vagy logikai feltételt, akkor a szenzor barométer adatait már nem olvassa ki a processzor. A hőmérséklet továbbra is elérhető. Viszont ha lejjebb vettem a sebességet, akkor sem olvasott ki a szenzorból semmit. (felteszem ugyan azon a serial sebességen olvas a szenzorból is amit az elején a Setup részben beállítottam.)

Most örülök hogy működik az átvitel, megpróbálok rájönni miként szinkronizáljam rendesen a szenzort az Arduino-val. De ez már egy másik téma.

íme a kapcsolás:
https://docs.google.com/file/d/0B_N3KIp ... sp=sharing
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: csabeszq »

Róbert, nem véletlenül választottam UNO-t R3 helyett.

Épp most próbáltam ki a 2Mbps-t és simán vitte. Az UBRR-be 0-t írsz, PC-re meg 2000000 baudot és probléma nélkül megérkezik.
Az FTDI-t ezért is tartottam felejtős opciónak.

Egy bájtot (8 bit + start + stop) áttol 80 órajelciklus alatt (200k/s). Elég vadul hangzik, de megy.
Avatar
havasi
DrótVégénSzéndarab
Hozzászólások: 38
Csatlakozott: 2010. szeptember 7. kedd, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: havasi »

Sziasztok!
A véleményeteket szeretném kérni. Szerintetek megoldható kommunikáció két arduino között, olcsóbb fajta 433 MHz RF modullal, ha a csarnokban elég sok (kb. 60db) szakaszos üzemben működő villanymotor is van. A legnagyobb távolság 20 méter. Befolyásolhatják a motorok a kommunikációt? Akár nagyon lassú néhány bps-s sebesség is elég lenne.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

CRC-vel ellátni. mint a TV távirányító jelet. Az is eléggé zavaros környezet (napfény, vaku, villogó izzó. stb)
Ha biztosra mész, akkor:
1, parancskód,
2, nyugta visszaküldés,
3, nyugta jóváhagyás.
Minden adat felépítve, logikai mezőkkel + CRCvel, illetve ha a kézfogásos jóváhagyásból valami kimarad: Timeoutkezelés.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: csabeszq »

Nekem arra lenne szükségem, hogy két teljesen izolált AVR között kommunikáljak (nincs közös föld, a földek között feszültség van).

Az egyik AVR egy váltóáramú MOSFET kapcsolást irányít egy teljesen független feszültségforrásra téve (amikor öt voltot ad ki a lábán, akkor az adott MOSFET-eket bekapcsolja). Természetesen optocsatolóval kell megcsinálni, a kérdés az, hogy az SPI alkalmas-e erre?

- TWI-t a kétirányú adatforgalom mellett átvinni opto-n egy hatalmas nagy varázslás
- a kérdés, hogy SPI alatt ha szimplán a MISO-MOSI-SCK párost iránynak megfelelően felnyomom egy opto-ra, a másik oldalon felhúzó ellenállást rakok (1k) és megcserélem a CLK polarity-t a két AVR-en, az működőképes lesz-e?

Nyilván az invertálás miatt 0xFF kizáró vagy művelet is kelleni fog a legvégén, de az elviek érdekelnek.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

Nálam RS-485 megy így (Tx, Rx, irányváltás).
Az adó és a vevő oldalt van 6N137 (5 V-os, max. 1 Mbit/s sebesség)
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: csabeszq »

Az ötlet jó, mármint USART + 2 opto (rájöttem, hogy nem muszáj inverterként bekötni, lehúzóellenállással egyenesen megy át az adat), ráadásul kétirányú is, szemben az SPI mester-szolga felállásával.
Az USART láb emellett szabadon is lesz, mindkét AVR esetén.

Természetesen itt már kristályozni kell, mert ahogy olvasom az USART nem megy internal oscillatorral.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

A hőfokra elmászik
De van trükk:
Adott időnként az A-t (&H55; &B01010101) kiadod. Ehhez tud szinkronizálni... Utánhúzod a belső osc-t. de én maradok a kvarcnál. De ha nem kell sok adat, akkor 300 bps, 150 bps vagy 75 bps . Azért az nem mászik el nagyon :)

De a békesség miatt jobb a kvarc. nagy sebességnél itt is van elmászás. de mindkét AVR ugyannyit, ugyannannyira. És a relatív elmászás számít, nem az abszolút!
Mindkét AVR esetén azonos kvarc, akkor lehet hogy az abs. hiba a névleges 115200 bps helyett 111000 bps esetén ~3,7%. Viszont mindkét AVR ténylegesen 111000 bps, így a relatív hibája 0%. Azaz a kapcsolat megbízható! (jó, a kvarcnak van 30 ppm hibája , szélsőségesen 60 ppm hiba :P)
Gyuresz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2013. július 13. szombat, 18:34

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Gyuresz »

Sziasztok!
Lenne egy kérdésem...
Ki kellene küldenem egy tömb adatait soros porton, egyszerre egy kupacba. Megvalósítható, vagy minden egyes számot egyenként kell kiküldeni?
A jövőben két Aurdino chip közt menne a kommunikáció, de most csak a PC. fele kellene kiküldenem a tömb adatait, nem tudom felírni a parancssort..., hogy egyszerre érkezzenek meg :(

long myArray[]={a,b,c,d,e,f,g,h,i,j};

Ide kellene a teljes parancssor...
Leírná nekem valaki konkrétan???

Serial.println(myArray[]a,b,c,d,e,f,g,h,i,j}; vagy, hogy lehet felírni?

ÜDV!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 2 arduino közötti kommunikáció

Hozzászólás Szerző: Robert »

Tipp: (szintaktikát tessék pontosítani, fejből (sem) megy...)

Kód: Egész kijelölése

for (byte i;i<9;i++){
  Serial.print(myarray(i));
  Serial.print(",");
}
Serial.println(myarray(9));

Egyszerre nem megy. Csak egymás után. A kommunkáció _SOROS_ :P .
Válasz küldése