Kommunikation mellan PIC processorer?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
optimizer
Inlägg: 74
Blev medlem: 5 juli 2006, 17:35:10
Ort: norrköping
Kontakt:

Kommunikation mellan PIC processorer?

Inlägg av optimizer »

Tjena. ska bygga ett antal (kanske runt 10st) olika enheter som behöver kommunicera med en masterenhet åt båda håll.
Skulle vilja ha en ledare eller max 2st för kommunikationen. Tanken från början var att göra så att "mastern"
skickar ut en adress och ett kommando och sen svarar den "slaven" som har den adressen och skickar tillbaks datan som begärts.
Kopplade upp detta på labbordet med 1 ledning. alla slavar som ingång, mastern som skickar ettor och nollor genom att sätta ingången till hög ut eller ingång med pullupp motstånd och sen tvärtom när slaven ska svara. Allt funkar bra men när jag utökar längden på kabeln mellan dessa så slutar det funka.
Misstänker (gissar) på att det kanske är kapacitansen i kabeln som strular till det? läste runt lite.

EDIT: Såg att jag inte skrev nått om längderna. är i min villa. så 100 meter nånting typ.

blev lite rörigt förklarat.

Är jag helt ute och cyklar om jag försöker kommunicera så här eller behöver jag bara dunka huvet i väggen lite till och lösa det? :)

Vill ha en simpel kommunikation med så lite komponenter som möjligt.

Tacksam för ideer.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Kommunikation mellan pic processorer?

Inlägg av Icecap »

Svaret är ganska sannolikt RS485!

Det behövs en drivkrets (t.ex. 73-218-05 till 8:48 + moms) till varje µC. Använd sedan en hastighet på 19200 baud och ett partvinnat kabel, då kan du kommunicera över 1500m eller mer! Med så långt avstånd behövs dock terminering i kabeländorna.

Och det man får är just seriell kommunikation med en UART. Bufferkretsen har et par ingångar som kan man koppla ihop, sedan ska man styra nivån. Ena nivån ger att mottagning aktiveras och andra nivån ger att sändning aktiveras.

På TP-kabeln kan man ha många enheter och de har såklart var deras adress och då kan man göra exakt som du vill ha:
* Master slår på sändning, skickar en förfråga/kommando och när den är helt klar (sista bit sänd) växlas riktningen till mottagning.
* Slaverna kollar adress (lyssnar enbart).
* Rätt slav svarar vid att slå på sändning, skicka svar och slå över till mottagning igen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kommunikation mellan PIC processorer?

Inlägg av sodjan »

> Misstänker (gissar) på att det kanske är kapacitansen i kabeln som strular till det?

Du kan ha nästan vilken kapacitans som helst i kabeln, om du bara kör
tillräckligt långsamt. Så ett tips är väl att inte köra onödigt fort. :-)

Något som löser mycket av kommunikationsproblemen är CAN. Men
å andra sidan så kanske det tillför andra "spännande" problem, jag
gissar att det är lite overkill för det som du beskriver...
optimizer
Inlägg: 74
Blev medlem: 5 juli 2006, 17:35:10
Ort: norrköping
Kontakt:

Re: Kommunikation mellan PIC processorer?

Inlägg av optimizer »

icecap: rs485 är ju helt klart ett alternativ nu när jag läser om det.

sodjan: hastigheten har egentligen ingen som helst betydelse för mig. vore ju så himla nice med ett osciloskop så man kunde se hur signalen blir.

Ska sänka hastigheten rejält (dum som man är så har man ju spridit ut alla enheter i huset nu) och göra ett test, annars får det bli rs485.

Tack för all hjälp.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Kommunikation mellan PIC processorer?

Inlägg av blueint »

Vilka spännande problem medför CAN ..?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kommunikation mellan PIC processorer?

Inlägg av sodjan »

> Vilka spännande problem medför CAN ..?

T.ex val av kretsar och helt andra programmeringsutmaningar.

Samtidigt är det en trevlig arkitektur där det är meddelanderna
som har adresser, inte de olika fysiska enheterna. Väldigt enkelt
att lägga till enheter, eftersom det inte finns någon adressplan
att administrera. Enheten som sänder "temperatur på verandan"
behöver inte veta om det är en eller fyra andra enheter som
lyssnar på just det meddelandet...

Men som sagt, det är ju ett rejält kliv upp från den enkla
lösning som har beskrivits här.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Kommunikation mellan PIC processorer?

Inlägg av blueint »

Hur gör man då om man vill veta "vad är temperaturen på verandans vänstra sida?" ..?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kommunikation mellan PIC processorer?

Inlägg av sodjan »

Jag förstår inte frågan. Har menar du?
Det självklara svaret är ju att "då sätter man en temp givare där".
Man kan ju inte veta temperaturen om man inte mäter den.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: Kommunikation mellan PIC processorer?

Inlägg av dangraf »

Jag skulle oxå kört på CAN.
det finns färdiga exempel för att få igång kommunikationen med både master och slave för CAN
Jag vet inte riktigt hur RS485 fungerar, har fått för mig att det är som rs232 dvs att man ha kontroll på byte nivå. Med CAN skickar man "frames" som har en fördefinierad längd. Via CAN får man automagiskt även felhantering mm vilket kan vara väldigt skönt om man inte är så jättebra på att programmera. T.ex om 2 noder skickar meddelanden samtidigt via RS485 kommer kommunikationen förstöras. Men om detta skulle hända via CAN så går ena meddelandet fram medan den andra node upptäcker att det blivit fel och skickar om meddelandet vid ett senare tillfälle. Allt hanteras av hårdvaran.
En annan skilnad är att CAN har multimaster så att noder kan skicka meddelanden på eget initiativ. Vad jag förstått så måste mastern polla alla sina slavar för få veta vad de har att säga. Man kanske vill både veta värdet och batterinivån eller andra varningar/fel.

Om man ändå vill köra single master multi slave variant så är nog ändå LIN att föredra, vilket är en enklare variant av CAN. Mycket hanteras av hårdvaran till skilnad från RS485.

Addresseringen är nog ung samma både för CAN och RS485. Alla noder måste ha en specifik address så att mastern vet vem som skickar/svarar på meddelandena.
Oftast finns filterfunktioner i hårdvaran så att man kan få ett interrupt när någon skickar till ens egen address.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kommunikation mellan PIC processorer?

Inlägg av sodjan »

> Addresseringen är nog ung samma både för CAN och RS485.

Nej, inte alls! I CAN saknar noderna helt adresser!
Det är enbart meddelanderna som har ett "ID".
Att kalla det för en "adress" rör bara till det... :-)

Ett meddelande kan t.ex vara "Ge mig temp på varandan"
och den node som kan svar på just det svarar. Nästa gång så kanske
man har byggt om det och bytt ut just den noden men meddelandet
är fortfarande "Ge mig temp på varandan". Den node som frågar
behöver inte veta att det är en annan fysisk nod som svarar.

Ett annat meddelande kan vara "Aktuell tid" som en nod sänder och
som alla andra noder tar emot. Man behöver alltså bara sända det
*en* gång oavsett hur många som lyssnar på just det meddelandet.

Varje nod sätter upp sina egna filter över vad den vill lyssna efter.
En nod kan lyssna på flera olika meddelanden (med olika "ID").

> Alla noder måste ha en specifik address så att mastern vet vem som skickar/svarar på meddelandena.

Nej!

Mastern (det finns egentligen ingen "master" i CAN) behöver inte veta vem
som skickar vad, enbart vad varje meddelande innehåller. Om det kommer
ett meddelande med "temp på varandan" så bör det ju vara från en nod
som faktiskt vet just det.

> Oftast finns filterfunktioner i hårdvaran så att man kan få ett interrupt när någon skickar till ens egen address.

Som sagt, det finns inga "adresser" som är specifika för noderna.
Däremot så får varje nod sätta filter för de meddelanden som
just den noden vill lyssna efter.

Det hela är helt meddelande styrt!
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Kommunikation mellan PIC processorer?

Inlägg av Icecap »

Sedan har CAN en hel del logik för att ta hand om kommunikationskollisioner.

Det finns ju ingen master varför t.ex. temperatursensorn på verandan skickar ut sina mätningar lite då och då - och om två enheter då skickar samtidig blir det en krock. Detta brukar CAN-kretsen ta hand om (AFAIK).

Slut resultatet är att alla kan lyssna på bussen och ta de upplysningar som behövs, därmed kan man expandera modulärt.

Så CAN har många fördelar - men om det är det bästa till detta projekt vill jag inte sia om.
Användarvisningsbild
NULL
Inlägg: 2522
Blev medlem: 15 september 2010, 12:59:25
Ort: Örebro

Re: Kommunikation mellan PIC processorer?

Inlägg av NULL »

Tack Sodjan, bra förklaring. :tumupp:
optimizer
Inlägg: 74
Blev medlem: 5 juli 2006, 17:35:10
Ort: norrköping
Kontakt:

Re: Kommunikation mellan PIC processorer?

Inlägg av optimizer »

Tänkte jag skulle skriva vad resultatet blev..
Jag gjorde en helomvändning och gick på trådlöst.
Hade en hel del nrf24l01+ moduler (enkla utan antenn) sen en tidigare ebay impuls köp. Dessa funkar rätt okej faktiskt.
Men fick inte till att sända i hela huset förut (bor i ett stenhus med 3 våningar och massa armering).
Men bytte modulen i mastern till en nrf24l01+ med antenn på. Nu funkar allting i hela huset.
Och som grädde på moset så slipper jag ju all kabeldragning.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Kommunikation mellan PIC processorer?

Inlägg av blueint »

Som grädde på moset lär nog WiFi och mikrovgsugn knuffas i etern ;)

Klarar CAN av att hantera t.ex en videoström från en kamera med vettig bitrate?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kommunikation mellan PIC processorer?

Inlägg av sodjan »

Kan man köra 10 europapallar in en Fiat Lupo?
Det är helt fel verktyg till jobbet. CAN är för att
läsa av sensorer och tända blinkersen, i princip.
Skriv svar