RS 485 Mellan två picar och en dator
Re: RS 485 Mellan två picar och en dator.
RS485 behöver en kontroll-lina TXE som slår på och av sändaren, det är det enda.
Dock för att det skall kunna fungera så måste du implementera ett master-slav protokoll, vilket kanske inte är det enklaste, om man inte tar ett färdigt.
Det innebär i princip att du låter PCn vara master som pollar dina slavar (PICar), vilket naturligtvis komplicerar det hela.
Enklast är ju naturligtvis att ta ett befintligt protokoll som Modbus, och då är man rätt långt ifrån vanlig RS232-kommunikation, eftersom det innebär två stopp-bitar och paritetsbit, CRC och en kritisk timing.
För att få det att funka så blir det rätt stora förändringar.
Dock för att det skall kunna fungera så måste du implementera ett master-slav protokoll, vilket kanske inte är det enklaste, om man inte tar ett färdigt.
Det innebär i princip att du låter PCn vara master som pollar dina slavar (PICar), vilket naturligtvis komplicerar det hela.
Enklast är ju naturligtvis att ta ett befintligt protokoll som Modbus, och då är man rätt långt ifrån vanlig RS232-kommunikation, eftersom det innebär två stopp-bitar och paritetsbit, CRC och en kritisk timing.
För att få det att funka så blir det rätt stora förändringar.
Re: RS 485 Mellan två picar och en dator.
för att förtydliga vad Tomas menar:
När du kör RS232 så har du ju full duplex hela tiden, dvs. kan skicka och ta emot data samtidigt. Du behöver inte heller bädda in data i någon ram eller protokoll.
När det gäller RS485 så blir det helt annorlunda:
Har du flera enheter inkopplade på samma lina uppstår ju problemet att de måste prata en i taget.
Då måste var och en veta när den ska prata. Dessutom måste de veta vilket meddelande som är till vilken enhet, så att inte all data läses in till alla enheter. Därför löses detta med master/slav. Det är då mastern som bestämmer när de olika enheterna får prata. Normalt skickar då mastern ut en adress först, för att visa vilken slav den ska prata med. Sedan följer data från mastern. Om Mastern vill ha in data från slaven så skickas ett kommando där data begärs - då börjar slaven att sända data. Så det är ju en hiskelig massa extra kod jämfört med RS232 som bara är att skicka de tecken man vill skicka.
När du kör RS232 så har du ju full duplex hela tiden, dvs. kan skicka och ta emot data samtidigt. Du behöver inte heller bädda in data i någon ram eller protokoll.
När det gäller RS485 så blir det helt annorlunda:
Har du flera enheter inkopplade på samma lina uppstår ju problemet att de måste prata en i taget.
Då måste var och en veta när den ska prata. Dessutom måste de veta vilket meddelande som är till vilken enhet, så att inte all data läses in till alla enheter. Därför löses detta med master/slav. Det är då mastern som bestämmer när de olika enheterna får prata. Normalt skickar då mastern ut en adress först, för att visa vilken slav den ska prata med. Sedan följer data från mastern. Om Mastern vill ha in data från slaven så skickas ett kommando där data begärs - då börjar slaven att sända data. Så det är ju en hiskelig massa extra kod jämfört med RS232 som bara är att skicka de tecken man vill skicka.
Re: RS 485 Mellan två picar och en dator.
Jag har i mitt (med hittills en enhet
) 485 nät ett adressprotokoll samt att ingen egentligen är master utan vilken enhet som helst ska kunna skicka till vilken som helst. Det hela bygger på att man får hoppas att inte två enheter sänder exakt samtidigt. OCH när det väl sänder så väntar de andra enheterna tills all kommunikation är klar. Såklart med omsändning mha enkel checksum.
Jag använder den inbyggda 9:e bit adressen som finns i PIC och detta är ytterligt smidigt. Det fungerar som så att man aktiverar paritet (eller vad det nu var) när man vill att alla på linan ska lyssna sen skickar man adress och därefter pratar man bara med en av PIC:arna. Dock är detta kanske överkurs i detta fallet är det bara datorn som initierar kommunikationen behövs inget sånt.
Den transcievern jag hänvisade till sköter det hela automagiskt iom att den aktiverar sändning när man skickar nåt och annars ligger den i mottag, samma får man implementera i PIC:en.
Ethernet däremot är svindyrt om man vill ha många ställen (som tex jag vill) i jämförelse med 232/485. Dessutom använder man den inbyggda hårdvaran i PIC:en så mycket lite kod behövs. Vad jag minns är mitt adressprotokoll max 50 rader kod (asm).

Jag använder den inbyggda 9:e bit adressen som finns i PIC och detta är ytterligt smidigt. Det fungerar som så att man aktiverar paritet (eller vad det nu var) när man vill att alla på linan ska lyssna sen skickar man adress och därefter pratar man bara med en av PIC:arna. Dock är detta kanske överkurs i detta fallet är det bara datorn som initierar kommunikationen behövs inget sånt.
Den transcievern jag hänvisade till sköter det hela automagiskt iom att den aktiverar sändning när man skickar nåt och annars ligger den i mottag, samma får man implementera i PIC:en.
Ethernet däremot är svindyrt om man vill ha många ställen (som tex jag vill) i jämförelse med 232/485. Dessutom använder man den inbyggda hårdvaran i PIC:en så mycket lite kod behövs. Vad jag minns är mitt adressprotokoll max 50 rader kod (asm).
Re: RS 485 Mellan två picar och en dator.
TomasL> Det innebär i princip att du låter PCn...
pajn> "Datorn" är i det här fallet en nas som jag installerat linux på.
Hade kanske varit tyligare och svårare att missa om det hade stått "NAS"...
Personligen tycker jag att det är väldigt slarvigt att skriva usb, rs, pic o.s.v
Texten blir så mycket svårare att läsa helt i onödan bara för att någon tycker
att "tiden det tar för mig att skriva är mycket mer värdefull än tiden det tar för
andra att läsa". För det är exakt det det handlar om.
pajn> "Datorn" är i det här fallet en nas som jag installerat linux på.
Hade kanske varit tyligare och svårare att missa om det hade stått "NAS"...
Personligen tycker jag att det är väldigt slarvigt att skriva usb, rs, pic o.s.v
Texten blir så mycket svårare att läsa helt i onödan bara för att någon tycker
att "tiden det tar för mig att skriva är mycket mer värdefull än tiden det tar för
andra att läsa". För det är exakt det det handlar om.
Re: RS 485 Mellan två picar och en dator.
Jag vill att att både PICen och datorn ska kunna snacka, utan poll.
Det går inte så mycket trafik i nätet men när det kommer nått vill jag snabbt få över det.
Så jag kommer köra på Sodjans förslag, det blir enklast och billigt. Dessutom slipper jag strul med att PICarna snackar samtidigt.
PICarna är två trådlösa sändare/mottagare och jag behöver just två för att få till räckvidden (betongväggar
). Men om nån enhet sänder som står mitt i mellan dem så kommer dem ju ta emot meddelandet och skicka det till datorn samtidigt.
@V-G Mycket intressant! Har du någon tråd du beskriver det mer i?
Har själv velat ha ett sånt nät men har lagt det på is tills vidare.
Helst skulle jag ha ett CAN nät pga. att det har prioritet på meddelandena (ifall två enheter sänder samtidigt) och att meddelandena har ett id istället för enheterna. Men jag antar att det går att få till på 485 också.
@Sodjan Ursäkta! Jag brukar försöka vara ganska noga med det men ibland slarvar man. Dock brukar jag, när jag "gör ord" av namnen, skriva dem med små bokstäver tex. picarna. Men skrev dem med stora nu
Jag är väldigt tacksam för hjälpen och självklart är inte tiden det tar för mig att skriva mer värdefull än tiden det tar för er att läsa.
Det går inte så mycket trafik i nätet men när det kommer nått vill jag snabbt få över det.
Så jag kommer köra på Sodjans förslag, det blir enklast och billigt. Dessutom slipper jag strul med att PICarna snackar samtidigt.
PICarna är två trådlösa sändare/mottagare och jag behöver just två för att få till räckvidden (betongväggar

@V-G Mycket intressant! Har du någon tråd du beskriver det mer i?
Har själv velat ha ett sånt nät men har lagt det på is tills vidare.
Helst skulle jag ha ett CAN nät pga. att det har prioritet på meddelandena (ifall två enheter sänder samtidigt) och att meddelandena har ett id istället för enheterna. Men jag antar att det går att få till på 485 också.
@Sodjan Ursäkta! Jag brukar försöka vara ganska noga med det men ibland slarvar man. Dock brukar jag, när jag "gör ord" av namnen, skriva dem med små bokstäver tex. picarna. Men skrev dem med stora nu

Jag är väldigt tacksam för hjälpen och självklart är inte tiden det tar för mig att skriva mer värdefull än tiden det tar för er att läsa.
Re: RS 485 Mellan två picar och en dator.
Tyvärr inte det hör till RGB-trappan som finns i min signatur. Tror det finns en glimt av programmet däri också, det är skrivet i VB6.
Re: RS 485 Mellan två picar och en dator.
Utan Poll kan du inte använda RS485 eftersom det inte finns någon kollisionsdetektering (du kan ju iofs göra den i mjukvara, typ).
RS485 är konstruerat för ett master-slav nätverk.
RS485 är konstruerat för ett master-slav nätverk.
Re: RS 485 Mellan två picar och en dator.
TomasL:Precis så funkar min kod men det bygger också på att inte två pollar går av precis samtidigt, vilket iofs är osannolikt men men.
Paketbaserat är ju tiptop men kostnaden per nod går ju upp därefter. Jag har testat lite med flera noder (på labbdäck) och det fungerar prima, dock är ju inte mitt avsett att skicka data kontinuerligt utan snarare lite då och då. Skulle inte ha respiratorn inkopplad på nätet om vi säger som så
Paketbaserat är ju tiptop men kostnaden per nod går ju upp därefter. Jag har testat lite med flera noder (på labbdäck) och det fungerar prima, dock är ju inte mitt avsett att skicka data kontinuerligt utan snarare lite då och då. Skulle inte ha respiratorn inkopplad på nätet om vi säger som så

Re: RS 485 Mellan två picar och en dator.
Att göra ett protokoll som tar hand om det mesta är knappast ett problem. Om båda tar emot samma radiobesked är det bara att göra en liten "slump"-generator som ändrar en fördröjning före svar. Om man startar båda PIC exakt samtidig och de har kristall kommer de att gå skapligt lika - men inte helt! Detta vill med tiden se till att väntetiden blir olika. Man kan även använda adressen som väntetid, då kommer den med kortaste väntetid att skicka meddelandet om 2 stationer mottar radiosignalen.
Att fixa en lyssning på linan som avkänner att minst en startbit har gått iväg är ganska enkelt också, därför borde "prata i munnen"-problem kunde klaras av ganska enkelt. Med en kvittens på mottagit besked försvinner alla problem, kommer det inte en kvittens inom en viss tid återsänds meddelandet.
Detta medför att meddelanden bör ha löpnummer, det kan ju vara att det var kvittensen som felade och då kan löpnumret avslöja att det bara är en repetition. Löpnumret kan fint bara vara en byte som räknas upp ett steg vid varje nya meddelande.
Att göra en RS232 <-> RS485 själv är ingen större raketvetenskap, har man fast baudrate behövs egentligen bara en timer, en MAX232 (eller klon) samt en MAX485 (eller klon). Enklast är bygga är det med en µC med dubbla UART, då kan man skippa timern. Det finns lösa sådana adapters att köpa lite varstans.
Att fixa en lyssning på linan som avkänner att minst en startbit har gått iväg är ganska enkelt också, därför borde "prata i munnen"-problem kunde klaras av ganska enkelt. Med en kvittens på mottagit besked försvinner alla problem, kommer det inte en kvittens inom en viss tid återsänds meddelandet.
Detta medför att meddelanden bör ha löpnummer, det kan ju vara att det var kvittensen som felade och då kan löpnumret avslöja att det bara är en repetition. Löpnumret kan fint bara vara en byte som räknas upp ett steg vid varje nya meddelande.
Att göra en RS232 <-> RS485 själv är ingen större raketvetenskap, har man fast baudrate behövs egentligen bara en timer, en MAX232 (eller klon) samt en MAX485 (eller klon). Enklast är bygga är det med en µC med dubbla UART, då kan man skippa timern. Det finns lösa sådana adapters att köpa lite varstans.
Re: RS 485 Mellan två picar och en dator
Tar upp denna tråd igen. Jag funderar också på att använda rs485 med upp till 32 enheter (fast till en början blir det nog snarare 4-8 enheter). Avstånd totalt kanske 7 meter... enheterna ligger då utspridda på vägen.
Jag funderar på vilken typ av kontaktdon som skulle vara lämpligast för enkel anslutning - och gärna mljöigheten att lätt kunna ansluta fler enheter på samma lina.
Först tänkte jag nätverkskabel, men det innebär att jag måste ha två RJ45-kontakter på varje enhet där signalen går vidare till nästa - alternativt att jag har en förgrening på kabeln vid varje enhet, men det känns lite klumpigt.
Men så tänkte jag på flatkabel. Det går ju att pressa på kontakter direkt på kabeln var som hest. Borde väl vara perfekt? Hur viktigt är det att det är partvinnade trådar för rs485? Jag tänkte ha full duplex (4 trådar rs485) samt matningsspänning 3.3 eller 5 volt i kabeln. Med dubbla kablar för matningen (för att halvera spänningsfallet) blir det totalt 8 trådar.

Enheter ska lätt kunna plockas loss och bytas utan att man behöver klippa i kabeln.
Dock så får inte någon kontakt lossna pga vibration etc. Det finns väl nån slags lås för IDC-kontakter, men är inte dom extremt skrymmande? Eller de kanske sitter ordenligt i sådana här "headers"?

Jag funderar på vilken typ av kontaktdon som skulle vara lämpligast för enkel anslutning - och gärna mljöigheten att lätt kunna ansluta fler enheter på samma lina.
Först tänkte jag nätverkskabel, men det innebär att jag måste ha två RJ45-kontakter på varje enhet där signalen går vidare till nästa - alternativt att jag har en förgrening på kabeln vid varje enhet, men det känns lite klumpigt.
Men så tänkte jag på flatkabel. Det går ju att pressa på kontakter direkt på kabeln var som hest. Borde väl vara perfekt? Hur viktigt är det att det är partvinnade trådar för rs485? Jag tänkte ha full duplex (4 trådar rs485) samt matningsspänning 3.3 eller 5 volt i kabeln. Med dubbla kablar för matningen (för att halvera spänningsfallet) blir det totalt 8 trådar.

Enheter ska lätt kunna plockas loss och bytas utan att man behöver klippa i kabeln.
Dock så får inte någon kontakt lossna pga vibration etc. Det finns väl nån slags lås för IDC-kontakter, men är inte dom extremt skrymmande? Eller de kanske sitter ordenligt i sådana här "headers"?

Re: RS 485 Mellan två picar och en dator
De brukar sitta ganska bra utan lås men då ska det hela vara skapligt vibrationsfritt.
Re: RS 485 Mellan två picar och en dator
Jag tror inte det blir några problem att köra icke partvinnat på de korta avstånden men det hänger förstås på vilken baudrate du tänkt du köra. Jag har en test-setup med 4 noder, där jag köra med vanlig "telefonkabel" (4-ledare, ej partvinnad), kör matning och kommunikation i samma, 115k halv duplex och jag har inte märkt några problem:
Och visst finns det lås till IDC-kontakter, typ 43-630-08 (fast kanske inte just DEN från ELFA då med tanke på priset...)
RS232<->485 convertern är en billig (typ 40:-) från EBAY, sen är det 4*10m kabel. Möjligen, eftersom du ska köra full duplex, att det kan bli "överhörning" mellan trådarna men om du lägger matningspänningen "i mitten" på flatkabeln och har korrekt terminering i ändarna på RS485-trådarna så kan jag inte tänka mig att det skulle bli några problem.Och visst finns det lås till IDC-kontakter, typ 43-630-08 (fast kanske inte just DEN från ELFA då med tanke på priset...)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: RS 485 Mellan två picar och en dator
Egentligen borde jag kunna köra halv duplex. Det är ju ändå en master som styr kommunikationen. Blir bara att jag måste filtrera bort en hel del onödig inkommande data. Sedan funderar jag på hur jag skulle kunna implementera ett system för automatisk adressering - alltså att man ska kunna hänga på ytterligare enheter och mastern ger den nya en adress beroende på vilka tidigare enheter som redan sitter där.
Det är lite lurigt att lösa. Främst blir ju problemet att kunna skilja dem åt och dels måste ju mastern polla ibland efter oadresserade nya enheter (vid reset t.ex.) och då får ju inte flera svara exakt samtidigt.... Får kanske överge det. Då blir alternativet antingen att lagra färdiga adresser i EEPROM eller kanske ha en liten DIP-omkopplare. Även här har båda varianterna fördelar och nackdelar. Det lutar kanske åt DIP-omkopplaren även om den är lite skrymmande.
Det är lite lurigt att lösa. Främst blir ju problemet att kunna skilja dem åt och dels måste ju mastern polla ibland efter oadresserade nya enheter (vid reset t.ex.) och då får ju inte flera svara exakt samtidigt.... Får kanske överge det. Då blir alternativet antingen att lagra färdiga adresser i EEPROM eller kanske ha en liten DIP-omkopplare. Även här har båda varianterna fördelar och nackdelar. Det lutar kanske åt DIP-omkopplaren även om den är lite skrymmande.
Re: RS 485 Mellan två picar och en dator
Ganska enkelt faktisk!
Mastern pollar alla kända adressor och exekverar sedan ett massanrop: "Någon som inte har blivit pollad?"
Då svarar den nya och väljer som adress den högsta adress som är sett + 1. Klart.
Mastern pollar alla kända adressor och exekverar sedan ett massanrop: "Någon som inte har blivit pollad?"
Då svarar den nya och väljer som adress den högsta adress som är sett + 1. Klart.
Re: RS 485 Mellan två picar och en dator
Det fungerar ju dock bara om man hakar på en ny enhet i taget