Prata mellan två arduinos

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Prata mellan två arduinos

Inlägg av XCore »

Hur fungerar det här med uart,en ( om det heter så? )
Kan man koppla ihop 2 st arduinos som skickar data mellan varandra?
Noll koll, någon bra sida om det ämnet?
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

Eller mellan en ard och en tex pic?
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Prata mellan två arduinos

Inlägg av Electricguy »

Jodå visst går det att koppla ihop UART'arna med varnadra. Koppla Tx-Rx och Rx-Tx Och programmera dom så att dom skickar kommandon till varandra.
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

Kommer bygga en enklare test robot platform för arduino, vill vänta ett tag med att gå över till en renodlad avr processor utan allt som arduino bökar med sig.
Kan programmera men just nu får det bli så som det blir.
I stort sett alla pinnarna kommer vara använda på min arduino, men behöver dock få ihop ytligare 5 st pinnar.
Tänkte då bygga en till litet kretskort som innehåller allt för dom 5 andra sensorerna som sedan skall skickas till huvudprocessorn.
Vilket är ganska smidigt om det funkar som jag tänkt mig.
Updaterings frekvensen behöver dock inte vara mer än 0,5-1 sek då motorerna ändå är så sega och allt bara är ett litet projekt.
Det rör sig om 2 st ir avstånds mätare,1 st fotocell i början.
Hade ju varit kalas om man kunde skicka all data i en lång rad som sedan arduinon fick hacka upp i bitar och ta ut datan ur!
Användarvisningsbild
Icecap
Inlägg: 26680
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Prata mellan två arduinos

Inlägg av Icecap »

Det fungerar utmärkt - om man gör rätt. Faktisk fungerar det utmärkt mellan X och Y.
X och Y kan vara PC, PIC, AVR, Renesas, Fujitsu, ARM och vilken annan enhet som använder asynkron kommunikation.

Och hur det fungerar? X sänder en byte och Y tar emot den och/eller vice-versa. Såklart kan en sändare skicka till fler mottagare samtidig så länge den samlade summa inte överbelastar sändaren.

Sedan kommer problemet med om det ska överföras blockar med data, då behöver man ett sätt att synkronisera sändare och mottagare på ett sätt som gör att de båda vet "här kom det ett block med data".

Jag brukar göra det med ett specifikt tecken som startmarkering (oftast STX = 0x02) och ett stopptecken (oftast ETX = 0x03). Däremellan skriver jag värden med en separator, t.ex. <STX>15,22,1023,xx<ETX>. xx är då en checksum som jag oftast använder bara för att säkra att det inte finns fel i överföringen.

Sedan är det upp till mottagaren att dekoda denna textsträng till värden och göra rätt med dom men det är ganska enkelt också.

Men det finns andra sätt, en del vill gärna överföra binära data vilket kan gå alldeles utmärkt - men det kan ställa till det ganska allvarligt också om man inte tänker igenom hur det hela ska fungera.

EDIT: Och nu där orsaken är förklarat kan jag rakt av påstå att det är just denna sorts expansion som inte är vettig att göra! Standardråd 1A i den situation är: Skaffa en µC med fler pinnar!

Ytterligare en nackdel med Ardunånting...
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

Jag tänkte i framtiden inplantera zigbee,s i det hela.
Dom kommer ju sitta kopplade emot tx/rx pinnarna, men kommer inte då allt bli helt galet.
Eller kan man koppla ihop det också på något enkelt sätt?
Jag tänkte inte använda zigbee,sarna aktivt utan mest om platformen kanske får låg batterinivå skall den skicka det och en annan plattform skall då förstå att den har dåligt med batteri.
Och i den övergången ligger platform 1 och bara vilar medans 2 fortsätter, nu kanske allt blev sjukt krånligt..
Det jag undrar i kort är att kan man aktivera zibgeen när den behövs och låta den skita i allt som skickas när den inte är aktiverad?
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

I slutet kommer jag ha ritat färdigt kretskortet som då kommer innehålla allt.
Antingen en avr eller pic på 64 pinnar.
Samt allt som behövs för den, voltstab,step up för att roboten skall klara av att fungera så långt batterierna klarar.
Samt motordrivning,accelerometern,allt nerbökat på ett kort.
Men just nu får det bli såhär det går till.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Prata mellan två arduinos

Inlägg av PHermansson »

En "Arduino" är ju inte bara ett visst hårdvarukort, det är ju inte nått nytt att man behöver mer än vad Atmega328 erbjuder. Behöver du mer IO kan du titta på Mega 2560, 54 IO och 4 serieportar tex.
http://arduino.cc/en/Main/ArduinoBoardMega2560

Så den "nackdelen" föll också Icecap...
Användarvisningsbild
Icecap
Inlägg: 26680
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Prata mellan två arduinos

Inlägg av Icecap »

PH: nåja, den kostar ju "bara" 499:- hos Conrad.se.
En ATMega2560-16AU kostar kostar 157,82 hos Farnell. En AVRISP2 kostar hos Farnell 287,32.
Summa för lös chip + programmeringsenhet: 445,14 vilket är 53,86 billigare än en Ardurik mega2560.

Och då rör det sig om en 8 bit µC på 16MHz med 256kB programminne, 4kB EEPROM och 8kB RAM.

För att ge lite perspektiv kan jag nämna att en Renesas RX210 kostar 113:91, inte behöver ett programmeringsinterface förutom möjligen en MAX232 (har gjort det med ett par transistorer).
Det är en 32 bit µC på 50MHz med intern oscillator i den hastighet också, 512kB programminne, 64kB RAM, 8kB EEPROM och inbyggd FPU. Jag använder för tillfället den serieport (MAX232) jag ändå ska ha för att programmera den, finns C-kompiler (HEW samt KPIT GNU) och flashprogram gratis på riktigt osv.

Så nej, Ardurik är fortfarande fel.

Den enda nackdel jag har märkt med Renesas'en är att kompilern låter alla FP-variabler vara 32 bit, oavsett om de är av typen float, double eller long double. Det beror helt säker på kompilern och den inbyggda FPU men jag skulle ändå vilja kunde välja bättre upplösning om jag ändå måste använda FP.

Men det är ju en kompiler-grej och det finns lösningar på det också.
Senast redigerad av Icecap 9 maj 2013, 15:49:21, redigerad totalt 1 gång.
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Prata mellan två arduinos

Inlägg av TobiasEinarsson »

Om det bara är några extra pinnar du behöver så kanske du skulle kolla upp följande "expander" för 13 kr:
http://www.lawicel-shop.se/prod/MCP2300 ... 52/SWE/SEK

Det finns även en variant med ytterliggare 8 extra pinnar för en krona till.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Prata mellan två arduinos

Inlägg av Krille Krokodil »

Icecap skrev:En ATMega2560-16AU kostar kostar 157,82 hos Farnell. En AVRISP2 kostar hos Farnell 287,32.
Och vad kostar det i tid innan man får det att snurra mot sin labplatta?
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

Det färdiga kretskortet som kommer innehålla :
En fotocell för detektering av omgivningsljus.
En dubbel motordrvings krets
Ett gyro
Ett flertal knappar
En display
En summer
Portar för servon
Andra I/O portar
OSV...
Så kommer jag köra mest troligt en 2560 och jag tänkte mig en budget på runt 1000 kr / kortet.
Då med enklare motorstyrnings kretsar samt gyro.
Billigt och fungerande endast.
När allt är färdig ritat kommer jag beställa hem 50 st kort och eventuelt börja sälja dessa.
Då jag totalt saknar ett kort som innehåller allt man behöver på samma kort.
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Prata mellan två arduinos

Inlägg av XCore »

Edit : Kommer dock villja ha runt 15 kort själv.
För att bygga robotar och börja med nätverks lösningar så dom kan prata med varandra för att lösa uppgifter.
Tänkt att zibgee ska kunna monteras enkelt på färdiga kortet också om man behöver det.
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Prata mellan två arduinos

Inlägg av Electricguy »

*Hint hint* Har man inte allt för brådis så kan man köpa Arduino MEGA kloner från Kina för runt 100kr. Så du får iaf 3st kompletta kort med programmerare och allt, för vad en processor och en programmerare kostar på Farnell. Och sen kan man ju, om man vill även använda sin Arduino som ISP programmerare.
Tex. denna. Jag har 2st. båda fungerar kanonbra och har likvärdig byggkvalitet med en "riktig Arduino" http://dx.com/p/d1208-mega-2560-develop ... ack-184830

Köper man kloner så är det inte värt att köpa mindre än en MEGA. Om det inte handlar om problem med fysiskt utrymme. för en MEGA klon kostar ca 20kr mer än en UNO klon..

Och ska jag vara riktigt ärlig, så förstår jag inte varför vissa är så in i helvete emot Arduino.. Det är som vilket utvecklingskort som helst.. Den enda skillnaden är väl att det finns helt sinnessjukt bra support. Det är av just detta som jag övh. började att tycka det är kul att pilla med mikroprocessorer..
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Prata mellan två arduinos

Inlägg av jesse »

Verkar som om tråden börjar handla om allt möjligt, men om jag återgår till frågan först:
XCore skrev:Hur fungerar det här med uart,en ( om det heter så? )
Kan man koppla ihop 2 st arduinos som skickar data mellan varandra?
Noll koll, någon bra sida om det ämnet?
...så vill jag svara:

Läs på lite om RS232 - det är den enklaste varianten av kommunikation mellan två processorer. Det fungerar hyfsat bra inom ett begränsat avstånd. (Sedan kan man utveckla detta till RS422 eller RS485). Om båda processorerna sitter mycket nära varandra och du inte behöver komma upp i superhög hastighet går det också bra att koppla ihop UART direkt mot varandra. Fördelen med RS232 är dock att du kan ersätta den ena processorn med en PC-terminal och på så vis testa att kommunikationen fungerar innan man kopplar ihop båda.

Oavsett vilket du väljer av ovanstående så används processorns UART-interafce, som alltid skickar en byte åt gången seriellt i en i förväg bestämd hastighet
Bild

Sedan finns olika mer eller mindre komplicerade protokoll - dvs hur du överför data. Ett av dessa heter MODBUS. Det är bra, men är något komplicerat att hantera med enkel kod. Mitt tips på "protokoll" är föjande:

1) du börjar med ett start-tecken, t.ex. '$'.
2) du skickar sedan en funktionskod
3) du skickar sedan ett bestämt antal data.
4) du avslutar med en checksumme-kod (CRC eller liknande) för att kolla att meddelandet är korrekt överfört.
5) och allra sist ett avslutande tecken. Ofta används tecknet för "return", dvs. ASCII nr 13 eller 0x0D. Det tecknet kan även skrivas som '\n' i C-kod.

Lämpligtvis skickas både funktionskod och data i hexadecimal form.

Exempelvis vill din Arduino överföra data om temperatur.
Funktionskod för temperatur: 0x01
Temperaturdata: ett 16-bitars (signed) heltal som anger temperatur i centigrader Celsius. dvs. -1000 = -10.00°C, 4531 = 45.31°C. (Ett 16-bitars tal har omfånget -32768 till +32767, dvs. du kan överföra temperaturer mellan -327.68 till +327.67 grader, om du väljer detta format.

Talet överförs som 16-bitars hexadecimalt tal, så 5.13°C (513) blir då 0201h.

Så man överför då "$010201xx\n" där xx är checksumman i hexkod-format.
Mottagaren lyssnar hela tiden på UART tills den får in ett $-tecken. Då börjar den fylla på en buffert tills den får ett <enter> tecken.
Då kollar den innehållet.
Skriv svar