LocoNet på Arduino - att koda en "Multi-dongel"

Boostrar, dekodrar, signaler, m.m. Montering av dekodrar i lok. Datorprogram och programmering.
Meddelande
Författare
Användarvisningsbild
AlexanderEhn
Inlägg: 575
Blev medlem: 2017-07-11, 23:47
Kontakt:

LocoNet på Arduino - att koda en "Multi-dongel"

#1 Inlägg av AlexanderEhn » 2019-03-26, 15:18

Som en spinoff på tidigare tråd skapar jag en ny tråd för att inte blanda ämnena för mycket. viewtopic.php?f=30&t=3826



Behovsspecifikation
- Behovet är att kunna köra två eller fler lok/motorvagnar som en mult
- Multen ska enkelt och med få minimala instruktioner kunna brytas och loken därefter köras separat
- Två eller flera lok/motorvagnar ska enkelt köras som en mult från att tidigare körts separat.


Lösningsidéer
- Loken kan köras med Advance Consist via CV19 och när multen behöver brytas så sätts CV19 till 0 för åtminstone ett av loken
- Två körhandtag används för att att köra loken på varsin lokadress
- En körkontroll används som kan hantera styra två lokadresser simultant
- En hårdvara med mjukvara sätts i ett Loconet-uttag som replikerar kommandon från en specifik adress till en annan


Vald lösning
En hårdvara med mjukvara sätts i ett Loconet-uttag som replikerar kommandon från en specifik adress till en annan

Mer utförlig behovsspec:
  • När Loconetkommandon skickas till en specifik lokadress ska dessa kommandon replikeras på en annan address
  • Initialt kan både källadress och replika-adress vara hårdkodade.
    • En framtida version kan ha konfigurerbara adresser, antingen genom fysisk knapp eller genom dispatch av adress liknande metoden för att skicka en adress från en UT4'a till en FREDI
  • Hårdvaran ska vara LocoNet-kompatibel
  • Lösningen ska ge så liten ökad belastning på LocoNet, centralenhet och DCC som möjligt.
  • Funktioner replikeras rakt av.
    • Om exv. F2 aktiveras för käll-adressen ska F2 aktiveras på replika-adressen.
    • Ingen kontroll av replika-adressens funktioner görs
    • Ingen funktionalitet för scenarion eller beroende lokadresserna sinsemellan krävs.
  • Ingen specifik programmering för denna lösning av respektive lokdekoder ska behövas
  • När Multi-dongeln inte längre används ska loken/motorvagnarna kunna köras enskilt på respektive adress. (Käll- eller replikaadress kan i sig vara en Advance Consist, men det pårverkar inte funktionaliteten för Mulit-dongeln)

Teknisk lösning
Hårdvara
En paneldekoder från MGP har valts som hårdvara. Anledningen till valet av hårdvara var att det var lättillgängligt och enklaste vägen för att få hårdvara för arudino och LocoNet ihop.

Mjukvara
- LocoNet-biblioteket "Model Railroading for Arduino" används.
- Arduino IDE används för kodutveckling.


Det är självklart uppskattat med input och kommentarer kring ovanstående.
Senast redigerad av 1 AlexanderEhn, redigerad totalt 2019 gånger.
Bygger Långenäs Långa & Långenäs Korta i N-RE. Byggtråd här!
Kalhyggena byggs tillsammans med pappa, byggtråd här!

Användarvisningsbild
AlexanderEhn
Inlägg: 575
Blev medlem: 2017-07-11, 23:47
Kontakt:

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#2 Inlägg av AlexanderEhn » 2019-03-26, 15:22

daniel skrev:
2019-03-20, 13:26
AlexanderEhn skrev:
2019-03-20, 11:51
Kan någon vänlig själ vägleda mig i hur kommunikationen funkar mellan Loconet och arduinon? Eller innehåller ett "LocoNet-kort" även logiken och översättning från LocoNet till Arduino? Och inte bara hårdvaran?
Dokumentet LocoNet Personal Edition beskriver protokollet på LocoNet. Dokumentet är inte helt enkelt att förstå, men vi är några som programmerar mot LocoNet på forumet och som kan hjälpa dig.

LocoNet-centralen har ett antal "slots". Varje slot har ett antal bytes av data som anger status, lokadress, m.m. För att styra ett lok börjar man med att fråga vilken slot som har den aktuella lokadressen med kommandot OPC_LOCO_ADR. Kommandot har fyra bytes:
Byte 0: 0xBF
Byte 1: (adress / 128) & 127
Byte 2: adress & 127
Byte 3: Checksumma (denna räknas ut av biblioteket som du använder, se inlägget från LLJ)

Som svar får du SLOT DATA READ (OPC_SL_RD_DATA), 10 bytes.
Byte 0: 0xE7
Byte 1: 0x0E
Byte 3: Slot-nummer
Övriga bytes har olika data, t ex lokets hastighet.

Sedan styr du lokets hastighet med OPC_LOCO_SPD och lokets riktning med OPC_LOCO_DIRF.
AlexanderEhn skrev:
2019-03-26, 01:52
PerEklund skrev:
2019-03-20, 12:54
Här finns mer info runt Arduino och LocoNet
https://mrrwa.org/loconet-interface/

Jag har svårt att hitta någon dokumentation på LocoNet-biblioteket.
Exemplena finns, men det hade vart gött med en lista på alla objekt och metoder.

Någon som vet om det finns?
LLJ skrev:
2019-03-26, 11:49
Osäker på om det finns, men mycket förstår man genom att läsa koden.
Det underlättar om man har tillgång till dokumentet "LocoNet Personal edition" från Digitrax. Det förklarar de olika meddelanden som finns i LocoNet. Finns dock några felaktigheter och dokumentet är gammalt.

/Lars

Jag har läst "LocoNet personal edition" parallellt med att jag har tittat på exemplena i Aruinobiblioteket, men det är svårt att se sambanden.
Det hade underlättat med en dokumentation som beskriver vilka objekt och metoder i biblioteket motsvarar vad i LocoNet.
Bygger Långenäs Långa & Långenäs Korta i N-RE. Byggtråd här!
Kalhyggena byggs tillsammans med pappa, byggtråd här!

Användarvisningsbild
LLJ
Inlägg: 3727
Blev medlem: 2012-05-08, 10:27

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#3 Inlägg av LLJ » 2019-03-26, 15:28

Som jag ser det så behöver inte CV19 ändras. Däremot bör man aktivt välja "mult" på/av "Multidongeln" så att sloterna för respektive fordon kan tas över/frigöras.

/Lars

Användarvisningsbild
AlexanderEhn
Inlägg: 575
Blev medlem: 2017-07-11, 23:47
Kontakt:

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#4 Inlägg av AlexanderEhn » 2019-03-26, 15:41

LLJ skrev:
2019-03-26, 15:28
Som jag ser det så behöver inte CV19 ändras. Däremot bör man aktivt välja "mult" på/av "Multidongeln" så att sloterna för respektive fordon kan tas över/frigöras.

/Lars
Korrekt, lösningen bygger inte på användning av CV19.

Är sloterna i LocoNet kopplade till ett specifikt körhandtag menar du?
Bygger Långenäs Långa & Långenäs Korta i N-RE. Byggtråd här!
Kalhyggena byggs tillsammans med pappa, byggtråd här!

Användarvisningsbild
LLJ
Inlägg: 3727
Blev medlem: 2012-05-08, 10:27

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#5 Inlägg av LLJ » 2019-03-26, 16:19

Ja. Varje handtag har ett id.

/Lars

Användarvisningsbild
AlexanderEhn
Inlägg: 575
Blev medlem: 2017-07-11, 23:47
Kontakt:

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#6 Inlägg av AlexanderEhn » 2019-03-26, 22:26

Aha.... hmm. Det får jag kolla upp. Lär återkomma med frågor. :)
Bygger Långenäs Långa & Långenäs Korta i N-RE. Byggtråd här!
Kalhyggena byggs tillsammans med pappa, byggtråd här!

Användarvisningsbild
daniel
Inlägg: 2953
Blev medlem: 2012-05-08, 10:15

Re: LocoNet på Arduino - att koda en "Multi-dongel"

#7 Inlägg av daniel » 2019-03-27, 02:09

Alexander:

Innehållet i varje slot finns beskriven i LocoNet personal edition, sidorna 11-12.

Byte 0: Slot nr. Värde 0-7F hexadecimalt, 0 - 127 decimalt.

Byte 1: Slot status.
Bit 0-2: Dekodertyp.
Bit 3: Om någon annan slot är länkad till denna för consist
Bit 4-5: Viktig: 0=Ingen data, 3=Slot:en används. Vad 1 och 2 betyder är jag lite osäker på.
Bit 6-7: Consist

Byte 2: De 7 minsta bitarna i lokadressen, alltså (address & 0x7F)

Byte 3: Lokets hastighet (0=stop, 1=emergency stop, 2-127 hastighet)

Byte 4: Riktning och funktioner. Bit 0: F1, Bit 1: F2, Bit 2: F3, Bit 3: F4, Bit 4: F0 (lyse), Bit 5: lokets riktning, bit 6-7 är reserverade för framtida bruk.

Byte 5-6 är jag osäker på

Byte 7: De 7 högsta bitarna i lokadressen, alltså (address >> 7)
Operatorn >> betyder att shifta värdet ett antal bitar åt höger.

Byte 8: Samma som byte 4, men för funktionerna F5-F8.

Byte 9-10 är jag osäker på.
Ordförande i ModulSyd

Skriv svar

Återgå till "El, elektronik och programvara"

Vilka är online

Användare som besöker denna kategori: 1 och 0 gäst