Jadu.. bättre problembeskrivning.. det är ju ett problem! Men ska försöka
Först en ritning, det är så här det är kopplat på mitt breadboard. RS485-A samt RS485-B är det som sammankopplar processorerna, plus en matning +5V samt GND/Jord.
node_general_v1.jpg
Varje processor och dess kringkomponenter, som jag kallar "Node", fungerar var och en för sig utan problem. De kör på sin inbyggda kristall 8MHz, vilket schemat ovan visar - ingen extern kristall. Senare kommer det givetvis vara en extern, men eftersom det bara är prototyp just nu så vill jag bara få kommunikationen att fungera innan jag går vidare.
Detsamma gäller övrigt som ska kopplas in på ADC pinnar och övriga portar på processorn, jag har helt enkelt inte kommit så långt då jag fastnat på kommunikationen.
Det som inte fungerar verkar vara just kommunikationen, på RS485 bussen mellan MAX kretsarna?
Det som fungerar är, om jag kopplar in RS232 kretsen som sitter på STK500 utvecklingskortet till UART pinnarna ut från varje processor, innan MAX kretsen, så får jag korrekt och fin data. Det visar ju att varje "node" fungerar var för sig.
Jag har ju en USB-485 modul som jag kan koppla in på RS485 bussen. Den är ju medlem i det team som ska kunna kopplas ihop en massa av, så här ska jag ju kunna använda den för att lyssna av bussen.
Det kan jag, men bara för data som kommer ut från node 1. Jag har provat att byta plats på A och B på mitt breadboard, ut från de andra MAX kretsarna. Och i ena läget kommer det rent skräp ut (helt enligt reglerna, man kan inte byta plats på dem, det vet jag), i det andra läget kommer det vad som verkar en mer konsekvent längd av en sträng, men fortfarande skräp.
- Gjorde en check igen medan jag skriver det här, om A och B sitter "korrekt" så får jag ut korrekt data från node 1, men skräp från node 2 och node 3 där jag får ut exakt samma data varje gång (en sorts skräp från node 2 och en sorts skräp från node 3).
Kod: Markera allt
Node 1
NOD 50 - Klar för drift!
Node 2
NO„ªŠ Z±ar2Ùr ¤®ËÑ…
á
Node 3
NODê2 KZ±…ÉAfö."ÉifWj
Jag kan alltså inte lyssna av RS485 bussen mer än data från node 1. Det är givetvis inte så att de skickar data samtidigt och strular upp det så sätt, för jag resettar dem en åt gången, så jag vet när och vilken node som skickar ut data.
Samtidigt så har jag en delay som är 500ms högre för varje node, så node 1 har ingen delay innan den påbörjar programmet, node 2 har 500ms och node 3 har 1000ms. Så de kan helt enkelt inte skicka samtidigt. Något jag även ser på de lysdioder som är inkopplade på MAX_CONTROL signalen, på schemat ovan.
Någon gång kan jag få lite annorlunda output, men oftast är det som det ovan. Men här är ett exempel;
Kod: Markera allt
Node 1
NOD 50 - Klar för drift!
Node 2
ŽJ5±jKìX.²Ùr ¤.ËÑ…
Node 3
NŠ52 KZ±ar²Ù²"ÉifôHC¡È
Här har Node 3 lyckats få ut ett N och sedan 52 vilket tyder på att det är rätt node som skickat datan, i rätt ordning också. (Om man har tur, det kan ju vara slumpmässiga tecken som hamnar rätt också)
Någon gång har jag fått ut;
Sedan har vi sändingen från master, som i nuläget är datorn. Om jag skickar ett "paket" som i mitt fall ser ut som följande;
Så har vi först node 1 som har adress 50, sen har vi kommandogrupp 31 och underkommande 01.
Om jag skickar ut detta på RS485 bussen via min USB-485 så får jag ett fint svar från node 1.
Om jag istället ändrar till följande;
Så får jag skräp tillbaka från
node 2. Så det verkar som att node 2 vet att det är den som ska ta emot datan, det verkar som att den vet att den ska svara.. Men ändå kommer det ut skräp på RS485 bussen..
Lyssnar jag på UART sidan för node 2 så får jag både ren data in från RS485 bussen och ren data ut från node 2, på UARTen.
Hur det är tänkt att fungera? Ja varje processor ska ju fungera var för sig, de ska sedan vara kopplade till en RS485 buss där de kan kommunicera med en master, efter förfrågan från denna.
Det är här jag befinner mig just nu.
Sen var det ju det med varför jag "måste" ha en lysdiod och ett motstånd mot GND/jord på MAX_CONTROL signalen för att det ska gå att kommunicera över huvudtaget. Ett pulldown direkt på MAX_CONTROL hjälper ju inte, inte heller ett pullup.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.