I/O över nätverk

Berätta om dina pågående projekt.
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

I/O över nätverk

Inlägg av cjonash »

Nytt år, nya projekt...

Först ut på det nya året blir en uppdatering (om man kan kalla det för det, det är egentligen mera än så) av ett gammalt projekt: http://elektronikforumet.com/forum/view ... =3&t=66010

Det som från början var ett tidtagningssystem, skall nu kompletteras med lite extra funktioner som under de dryga två åren det har varit använt har visat sig vara användbara. Det nya systemet skall, när allt är klart, ha följande funktioner:

- 16 ingångar (mot tidigare 8 )
- 8 utgångar (relä eller open collector)
- Kommunikation över nätverk
- Ingång för TC (tidkod från broadcastsystem)
- Ingång för externa klockor, RS232 och RS422 (data från klockor i t.ex. sporthallar)
- Emulering av Sony 9-pin remote protokoll (används i broadcast för att styra apparater)

Ingången för externa klockor är lite speciell. Den skall fungera med ett antal olika system och protokoll, vissa på RS232 och vissa på RS422. Tanken är att ha en gemensam kontakt, och sedan göra övergångskablar till de olika systemen (och på så sätt ansluta dem till antingen RS232 eller RS422). I mjukvaran väljer man sedan vilket system man önskar läsa. På så sätt hoppas jag att det ska vara hyfsat lätt att lägga till nya protokoll i framtiden. Den lästa klockan skickas sedan vidare på nätverket i ett eget protokoll, vilket gör att våra grafiksystem inte behöver bry sig om vilken typ av klocka man är kopplad till. Även våra egna mjukvaruklockor (som används när det inte finns någon hallklocka, eller den inte går att koppla på sig på) får samma protokoll.

Själva enheten är tänkt att bestå av anslutningarna för I/O, en 16x2 raders display + några knappar för meny (framförallt inställning av IP-adress) och ev. en 8-teckens display för tid och tidskod. Jag har tänkt mig att bygga det runt en Arduino MEGA, kombinerat med en Ethernet shield och en egen shield för alla interface.

Första steget är att göra en prototyp så klart, och material till denna är insamlat (och i vissa fall inköpt):
Labdelar.jpg
Jag har tänkt att börja med att koda den interna klockan (som skall få hjälp av en extern klocka i form av ett DS3231 chip), som blir systemklockan (med 1/1000 upplösning).
Därefter tänkte jag få ordning på nätverksinterfacet. Planen är att göra en mjukvara som används för konfigurering från en PC (dvs våra grafikmaskiner), så att den lokala menyn egentligen bara behövs för att sätta IP adress i de fall DHCP inte går att använda. I den planen ingår att mjukvaran automatiskt skall hitta alla enheter som finns på nätverket, så att man kan hitta dem utan att veta dess IP.

Första produktion där en sådan här enhet behövs är redan 12 januari... Men det lär ju få bli med någon form av prototyp.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av cjonash 20 februari 2016, 21:58:26, redigerad totalt 4 gånger.
RadioDJ
Inlägg: 402
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: I/O över nätverk

Inlägg av RadioDJ »

Ska bli roligt att följa.
Ditt gamla projekt, som du dessutom hjälpte mig med att få igång, har fungerat utmärkt.
Jag har gjort egna små ändringar för att passa mina behov.
Ser fram emot en fortsättning på detta projektet.
Det var tack vare dig som jag började lära mig processor världen och C programmering.
Användarvisningsbild
Anahka1975
Inlägg: 1271
Blev medlem: 30 augusti 2006, 21:49:46
Ort: Säffle

Re: I/O över nätverk

Inlägg av Anahka1975 »

Ditt förra projekt har jag helt missat. Detta verkar intressant.
Efter att båda barnen börjat med hockey så har jag blivit mer och mer involverad i hockeyklubben. Och tekniken i ishallen faller sig naturligt att jag blir extra intresserad av.
Tyvärr verkar det som ingen i klubben tidigare intresserat sig för detta så det finns massor att "ta tag i".

Jag blir direkt nyfiken på vad ni proffs använder för mjukvara i era grafikmaskiner?
I hallen har vi en riktigt OK projektor och stor duk som man skulle kunna använda som "fattigmas jumbotron" men trots att jag Gogglat timmar efter nån bra programvara har jag hittills inte hittat något som skulle ens kunna va i närheten av en matchklocka mjukvara för visning på storbild.
Än mindre hittat nått om vår gamla matchur/tavla från Westerstrand. om man skulle kunna synka den på nått sätt med den mjukvara jag använder för musik/ljudeffekter (Multiplay).
Du sitter inte på någon info om vilket protokoll Westerstrand använder i sina system?

Om du tycker detta är OT säg till så raderar/flyttar jag inlägget.

/AndersW
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk

Inlägg av cjonash »

Westerstrand är en av de klockor som jag i förlängningen har tänkt att ha en mjukvara för.
Jag har tidigare gjort en PC-baserad läsare för deras klockor. Det som gör just deras interface lite speciellt är att gränssnittet är en 20 mA slinga. Dvs, man kan inte direkt koppla den till en serieport utan det krävs en konverter. Du skall ju dessutom in i den slingan som redan används. När det är mera traditionella seriella protokoll (RS232 eller RS422) brukar vi "bara" parallellkoppla oss på den befintliga utgången.

Jag har protokollet till Westerstrand någonstans, men jag vet inte var - det var många år sedan jag skrev den mjukvaran. Men protokollet är, som jag minns det, förhållandevis "dumt". Alla displayer är konfigurerade för att visa innehållet i en viss adress (vare tal är en egen adress, så minuter och sekunder tar upp fyra adresser), och data från klockan skickas med en start adress och sedan alla värden - OM jag minns det riktigt. Jag ska se om jag kan hitta antingen protokollet eller mjukvaran vid tillfälle.

Vi använder våran egen mjukvara för att generera grafiken. Eller mer korrekt ett antal olika mjukvaror. I grunden är det alltid våran grafikmotor, som är den mjukvara som skickar ut videosignalen via ett videokort (Bluefish eller Blackmagic använder vi). Till denna hör en editor där man skapar grafiken (denna används normalt inte under produktion). Till sist ett kontrollprogram som är det som operatören använder. Detta laddar en projektfil som är anpassad för den aktuella produktionen, och innehåller i sin tur kopplingar till alla externa system (databaser, klockor eller vad det nu kan vara). Dessa kopplingar kan liknas vid plugin-moduler som i verkligheten är små applikationer med ett ActiveX (COM) interface.
Det finns ett antal andra tillgängliga system (de största är VizRT, ChyronHego och Inscriber) som fungerar på motsvarande sätt, men prislapparna är så höga att vi valde att utveckla eget (just nu har vi ca 30 maskiner som vi använder), hittills med tillräckligt bra framgång även om vi givetvis ligget efter de andra i funktioner. De har trots allt varit aktiva i många, många år innan oss - och har betydligt flera utvecklare (jag är den enda i vårat företag). Inte desto mindre gjorde vi Eurovision Song Contest 2014 på just detta system... :D
Vill du veta mera, så skicka ett PM. Det finns en produkt som kanske kan vara intresserant för dig, men då det i princip skulle kunna vara en konkurrent till oss vill jag inte skriva för mycket om det öppet...
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk

Inlägg av cjonash »

Dagens insats har resulterat i att jag nu har en fungerande intern klocka med millisekundsupplösning.
I princip har jag använt delar av koden från mitt tidigare projekt, men kompletterat efter ett tips från Icecap: viewtopic.php?p=1104429#p1104429

Dessutom har jag lagt in kod för att kontroller den OLED display och den LED display jag har tänkt att använda. Nu visas tiden på båda två, men tanken är att OLED-displayen skall vara för menyer, och LED displayen skall hela tiden visa systemtid eller tidskod (valbart med en knapp).

Så här ser labbmiljön ut just nu:
Lab_1.jpg
Nästa steg blir att få igång nätverk och menysystemet.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk

Inlägg av cjonash »

Då är menysystemet delvis implementerat. Saknas några funktioner, men den viktigaste (att kunna sätta IP-adressen) fungerar.
Gränssnittet kommer att bestå av totalt 6 knappar och en pulsgivare.

En knapp har som enda funktion att välja mellan att visa tidskod och systemtid på LED-displayen. Vald funktion visas med två LED.

Under OLED-displayen kommer det att sitta 5 knappar. En väljer vad som visas på displayen. De övriga används för att navigera när man är i menyn (utöver menyn kan displayen visa ett antal olika status-texter) med traditionella SET, UP, DOWN, EXIT. Till sist används pulsgivaren för att ändra numeriska värden.

På sikt kan det nog vara så att jag bör bygga ett bättre menysystem än det jag har nu. Men jag måste få klart det här i tid för första produktionen. Sedan kan man jobba med förbättringar.

Så här ser labbplattorna ut nu:
Lab_2.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk

Inlägg av cjonash »

Efter en stunds övervägande, har jag beslutat att plocka bort LED-displayen, och istället låta systemtid och tidskod visas på två nya sidor på OLED-displayen.
Anledningen är att det underlättar designen av lådan, då den både kan bli mindre (om det inte blir en rack-modell) och man slipper fönster och filter till den displayen.

Därmed försvinner också de två LED som indikerade valet mellan klocka och TC, och den tillhörande switchen.

Nätverksmodulen är nu inkopplad och testad så att den fungerar med inställningarna för IP. Man kan i menyn välja mellan DHCP eller fast IP, och vid fast IP får man ställa in IP, Nätmask och Gateway.

Mindre knappar, utan LED display och med ethernetmodul:
Lab_3.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk

Inlägg av cjonash »

Idag har jag varit på plats i en arena och försökt att läsa in data från deras matchklocka in i mitt I/O interface.
Deras data kommer som en RS485 seriell dataström (57600 baud). Det som gör den lite speciell är att den använder 9 bitars datalängd.

Efter lite trixande med koden, så lyckas jag att läsa data. I korthet kan man säga att alla paket startar med ett adressbyte - det identifieras med att bit 8 (alltså MSB) är satt till ett. I alla andra byte är denna bit 0. Ett paket avslutas med en checksumma, som identifieras med att bit 7 är satt till 1. I alla andra byte är denna bit 0.

Jag läser data genom att vänta på en adress (bit 8 = 1), och läser tills dess att det kommer en checksumma (bit 7 = 1). Det fungerar fint - så när som att IBLAND kommer ett extra byte in i paketet (oftast 0x00, men inte alltid). Var i paketet det kommer varierar (men det är ju alltid mellan adress och checksumma, annars skulle min inläsningsrutin kasta bort det).
Tyvärr kan man inte alltid använda checksumman för att identifiera problemet, för den räknas ut genom att multiplicera alla byte. För att till sist göra en OR med 0x80. Det gör att checksumman alltid blir 0x80 om NÅGOT byte i paketet är 0x00 - vilket det är i ca 60% av alla korrekta paket, och i de flesta felaktiga.

Genom att räkna alla bytes i paketet, har jag lyckats filtrera ut de flesta problemen (ett extra byte gör då paketet ogiltigt). Men jag får fortfarande en del skräp - bytes som borde innehålla ett värde kan plötsligt ha ett annat. Det inträffar inte ofta, och helt oregelbundet. Men det ställer till med problem då värden till matchklockan bara skickas när de uppdateras - dvs får jag ett felaktigt värde på t.ex. antalet hemmamål så ligger det kvar tills det riktiga värdet ändras.

Jag ska tillägga att displayerna i hallen visar så klart det riktiga värdet hela tiden, så det är något som bara tycks hända hos min inläsning.

Någon ide om vad det kan vara?
Jag läser data med en interrupt från UART, och har så vitt jag kan se inte tappat ett enda värde så det tycks inte vara där problemet ligger. Vad kan få en UART att generera en extra eller felaktig byte. Det ska noteras att i de fall det kommit en extra byte, så har de följande i paketet varit korrekta. Och i de fall där antalet byte är riktigt, så är det bara ett enda byte i paketet som är felaktigt - de övriga före och efter är korrekta.

Tacksam för alla tips. Jag har inte koden tillgänglig nu, men den kan jag eventuellt ladda upp senare om någon känner sig manad att titta på den.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av Icecap »

Jag har haft en del knas med RS485 och höll på att flippa på slutet där alla noll-slingor var brutna osv.

Men då kom jag ihåg en grej jag läste någonstans för ett bra tag sedan:
DC-förspänning! Billiga RS485 drivkretsar kan vara kinkiga med att vilovärdet är för nära noll så att de ger lite hursomhelst.

Då jag kom ihåg detta kopplade jag 3 motstånd (1,5k):
1 st motstånd mellan VDD (5V) och A.
1 st motstånd mellan A & B.
1 st motstånd mellan B & GND.

Efter detta blev kommunikationen totalt stabil!

På den nya version styrkort som ska komma när de nuvarande tar slut är dessa motstånd numera ritat in.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43150
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av sodjan »

> Det som gör den lite speciell är att den använder 9 bitars datalängd.

Inte ovanligt för att hantera adresser i ett multi-drop nät.
Jag vet inte hur det är i en Arduino (men det borde vara liknande),
men i en PIC så kan man slå på 9-bitars mode samt "address detection".
Då behöver man inte själv i koden leta efter adress byten, USART'en ger
inget interrupt fören nionde biten är satt. Då får man kolla om det är
"min adress" och i så fall slå av "address detection" för att läsa "mitt" paket.
Annars väntar man på nästa interrupt vid nästa adress byte...

Jag har dock ingen ide kring data felen...
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av cjonash »

Arduino har inte stöd för 9 bit seriell data, men det har däremot ATMega kontrollern, så det gick att få till genom att inte använda det seriella bibliotek som är standard på Ardunio. Genom att själv sätta registren så fungerar den delen fint.

Jag har gjort så att jag läser in alla bytes med 9 bitar och sparar dem som words i min RX-buffer.

Icecap: Du har nog löst problemet! I mitt schema så sitter dessa motstånd inritade, eftersom jag gjort så tidigare när jag använt RS485. Och på det första testet för ett par veckor sedan var motstånden inkopplade, men då använde jag inte 9-bitars läsning (jag försökte "fuska" genom att göra läsaren lite mera intelligent, genom att gissa - baserat på att checksumman är det enda byte med bit 7 aktiv - vad som var adressbyte). Det fungerade inte). I dag när jag skulle testa, så glömde jag att montera dessa motstånd (testerna utförs än så länge på labbplattor. Det inser jag nu när jag tänker efter. Säkerligen kan problemen härledas till det. Dumt - nästa chans att testa är om en vecka, och då är det två dagar kvar tills den skall användas i TV...

Men tack Icecap! Jag kommer att sova bättre nu - magkänslan är att du har rätt, och då är projektet fortfarande på banan!
Användarvisningsbild
Jan Almqvist
Inlägg: 1580
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av Jan Almqvist »

Att ha "biasing" är mycket viktigt vid RS-485.

http://www.ni.com/support/serial/resinfo.htm
cjonash
Inlägg: 613
Blev medlem: 20 maj 2011, 08:53:58
Ort: Göteborg

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av cjonash »

Fast nu blir jag ju lite orolig igen....
För jag har ju kopplat in mig på en existerande (och fungerande) slinga. Så som jag tolkar det som står på sidan som Jan länkade till, räcker det (beroende på värde) att en nod har motstånden. Och det kan man ju utgå ifrån att minst en av de existerande enheterna har.

Så då blir ju frågan om det här trots allt är det som var mitt problem?
En annan detalj värd att notera, är att det finns ingen jordanslutning i den slinga som vi är inkopplade på. Bara de två datasignalerna. Kabeln vi kopplar in oss med är ca 1 meter lång, och sitter direkt i den ena enheten (mastern).
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av Icecap »

cjonash: "Och det kan man ju utgå ifrån att minst en av de existerande enheterna har."

FEL!!! Anta ALDRIG något!

Vissa trancieverkretsar har ett offset på ingången som gör att de inte behöver DC-bias men anta alltid att allt vill jävlas!
Om det finns terminering ska man räkna in detta i bias-motstånden och behöver såklart inte motståndet mellan A & B då det redan finns som termineringsmotstånd.
daer
Inlägg: 355
Blev medlem: 13 juni 2008, 22:15:27
Ort: Höör och Helsingborg, Skåne

Re: I/O över nätverk (upd: fråga om seriell RX)

Inlägg av daer »

cjonash skrev:En annan detalj värd att notera, är att det finns ingen jordanslutning i den slinga som vi är inkopplade på. Bara de två datasignalerna. Kabeln vi kopplar in oss med är ca 1 meter lång, och sitter direkt i den ena enheten (mastern).
Låter här som om du inte har koll på common-mode nivåerna alls. Finns det någon annan gemensam jordförbindelse?
Om inte kan det förklara att kommunikationen fungerar ibland och ibland inte.
Om det inte finns någon "return loop" så hjälper det inte att koppla pullup/down på bussen.
Det ser ut som om det kan hjälpa ibland, men det enda de då gör är att hålla nere common-mode nivåerna.
Skriv svar