Doel:€250.00
Donaties:€130.00

Per saldo:€-120.00

Steun ons nu!

Laatst bijgewerkt
op 24-04-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Toon hier je (model)TRAM foto's. door hervé
Vandaag om 12:32:19
Toon hier je nieuwe (model-) spooraanwinst(en)... door brutus1
Vandaag om 12:14:03
Gewoon wat busfoto's door hervé
Vandaag om 12:10:47
"Nederlandse" modellen door Modellbahnwagen
Vandaag om 12:04:06
h0 diorama USA “The Paintshops” door Mudhen
Vandaag om 11:58:57
RhB H0m, Albulisch door Eric v C
Vandaag om 11:57:44
Doornvliet door mass am see
Vandaag om 11:44:10
BNLS modules: de groeten uit Berkel door Hans van de Burgt
Vandaag om 11:42:40
03-05-2024 - afscheidsrit NS ICMm 4011 door Modellbahnwagen
Vandaag om 11:34:24
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 11:14:38
Kleine Baan in H0 (≤ 0.5m²) door Jack Black (NS1220)
Vandaag om 11:14:03
19 Toen door PlanU
Vandaag om 11:01:05
Piko lok digitaal rijdt direct weg door bellejt
Vandaag om 10:58:48
Schrootplaats door Kees (NS Blokpost 21 Klein Bruntendijk, Friesland)
Vandaag om 10:45:54
Alt Wutachbahn - Sau-Schwänzle-bahn Weizen - Zollhaus - Blumberg door Eric v C
Vandaag om 10:42:29
EifelBurgenBahn door Eric v C
Vandaag om 10:25:57
Bahnbetriebswerk "Altendorf" door Eric v C
Vandaag om 10:22:59
Bouw van tijdperk 1 HSM en SS rijtuigen door TonM
Vandaag om 10:09:06
20 en 21 april MobExpo door MOVisser
Vandaag om 09:52:38
Baan 'begroenen', hoe, wat en waarmee? door RBlok
Vandaag om 09:52:13
2nd Dutch US Convention, DRU Ulft NL 6/7 april 2024 door D_Loc
Vandaag om 09:38:55
Les Billards du Vivarais door Sven
Vandaag om 09:04:33
Station Roodeschool door spoorijzer
Vandaag om 08:36:23
diorama, voor lange treinen. door Benelux795
Vandaag om 07:54:29
Raadplaatje door Benelux795
Vandaag om 07:51:23
US diorama in H0 door puntenglijder
Vandaag om 07:31:13
Bouw NS C 8605, BC 6012 en C 6820 door prutser
25 april 2024, 23:33:55
NS 6000 (in schaal 0) door FritsT
25 april 2024, 23:04:33
Toon hier je pas gereed gekomen (model-)spoorbouwsels ... door Bob R.
25 april 2024, 22:40:14
Nederland jaren 50 op basis van mijn roots door defender
25 april 2024, 22:23:03
  

Auteur Topic: Arduino en Selectrix  (gelezen 26917 keer)

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #75 Gepost op: 13 januari 2016, 12:10:02 »

Nu we onbeperkt toegang hebben tot de SX-bus, wordt het tijd dat we de Arduino wat nuttigs gaan laten doen. Wissels normaal of met servo's, seinen en via de centrale treinen alles is mogelijk. Gezien de worsteling van velen hier op het forum met een schakeltableau lijkt het mij leuk om hier mee te beginnen. Er zijn twee wegen te beandelen:
  • Uitgebreid schakeltableau met externe latches en input
  • Meerdere Arduino's als er meer inputs/outputs nodig zijn
Ik ga voor de tweede optie, gezien de prijs van een Arduino. Hoeveel pennen zijn er nu nog beschikbaar op de Arduino:
Dat zijn:
  • Alle digitale ingangen die niet door de SX-bus software gebruikt worden (8 stuks)
  • Alle analoge ingangen digitaal gebruiken (6 stuks)
  • SX-bus programmeer interface (2 stuks)
De laatste kunnen weggelaten worden, als je er als gebruiker voor kiest om de configuratie "vast" in het programma te zetten. Dit geeft dan twee extra in/uit gangen voor het schakeltableau. Dus in totaal 16 in/uit gangen. Nu proberen de elektronica zo te maken dat er 16 LEDs en 16 drukknoppen aangesloten kunnen worden.
Eerst het schema per ingang:

Pin X is de uit / ingang van de Arduino (open deur)
S1 is een drukknop (geen schakelaar), waarmee bv het wissel omgelegd kan worden.
R2 is een weerstand, die biij indrukken van S1 de pin voldoende laag trekt, om een "0" aan de ingang te krijgen. Mocht er gedrukt worden terwijl de LED aangestuurd wordt, dan zal de weerstand de uitgang beschremen tegen kortsluiting.
De combinatie R1 en LED1 is standaard. De weerstand mag niet veel lager, omdat dan de spanning op de pin tehoog wordt als de schakelaar ingedrukt wordt. Verhogen om de LED wat te dimmen kan geen kwaad.
Om dit allemaal aan te sturen heb ik een library geschreven die allerlei functionaliteit ondersteund.
Voor de led alleen het invers aansturen, voor de schakelaar:
  • Stand op halen (met ontdendering)
  • Pulse sturing
De code hiervoor is getest voor twee LEDs/schakelaars. Ik zal binnenkort  nog 14 extra maken, zodat alle 16 de poorten gebruikt kunnen worden. Voorlopig is hier de library (cpp file:):
/*
 * Schakelbord.cpp
 *
 *  Created on: 15-01-2015
 *  Version: 0.1
 *  Changes: Initial version
 *
 *  interface hardware needed !
 */
#include <Arduino.h>

#include "Schakelbord.h"

Schakelbord::Schakelbord(int Pin): _pin(Pin) {
    pinMode(_pin, OUTPUT);
digitalWrite(_pin, HIGH);    // LED off
_stand = 0;
_pulse = 0;
_dender = SETDENDER;        // Set waittime back to start.
}

Schakelbord::Schakelbord() {
_stand = 0;
_pulse = 0;
_dender = SETDENDER;        // Set waittime back to start.
}

// Initialize pin for reading switch and driving LED
void Schakelbord::pin(int Pin) {
_pin = Pin;
    pinMode(_pin, OUTPUT);
digitalWrite(_pin, HIGH);    // LED off
_stand = 0;
_pulse = 0;
    _dender = SETDENDER;        // Set waittime back to start.
}


// Lees de stand van de schakelaar/drukknop
int Schakelbord::read() {
int temp;

// Set pin to input and read
    pinMode(_pin, INPUT);
    temp = digitalRead(_pin);
// Set pin to output and restore
    pinMode(_pin, OUTPUT);
set(_stand);
if (temp == 0) {
_dender = SETDENDER;     // Set waittime back to start.
} else {
if (_dender != 0) {
_dender--;            // Continue waiting,
temp = 0;             // Report open switch
}
}
return temp;
}

int Schakelbord::pulse() {
    int temp;
int result;

temp = read();
_pulse = _pulse ^ temp;     // Last 0 and new 1 and last 1 and new 0 both give 1
result = _pulse & temp;     // But only if new 1 then result = 1
_pulse = temp;
return result;
}

// Set LED on or off
void Schakelbord::set(int stand) {
if (_invers) {
if (stand == 0) {
digitalWrite(_pin, LOW);      // LED on
} else {
digitalWrite(_pin, HIGH);     // LED off
}
} else {
if (stand == 0) {
digitalWrite(_pin, HIGH);     // LED off
} else {
digitalWrite(_pin, LOW);      // LED on
}
}
_stand = stand;
}

// Get state LED
int Schakelbord::get() {
return _stand;
}

void Schakelbord::setInvers(bool value) {
_invers = value;
}

// Get SX_bus parameters
bool Schakelbord::getProcessed() {
return _processed;
}

void Schakelbord::setProcessed(bool value) {
_processed = value;
}

int Schakelbord::getAdresLED() {
return _adresLED;
}

void Schakelbord::setAdresLED(int value) {
_adresLED = value;
}

int Schakelbord::getBitLED() {
return _bitLED;
}

void Schakelbord::setBitLED(int value) {
_bitLED = value;
}

int Schakelbord::getAdresSwitch() {
return _adresSwitch;
}

void Schakelbord::setAdresSwitch(int value) {
_adresSwitch = value;
}

int Schakelbord::getBitSwitch() {
return _bitSwitch;
}
void Schakelbord::setBitSwitch(int) {
_bitSwitch = value;
}
en het H-file:
/*
 * Schakelbord.h
 *
 *  Created on: 27.09.2015
 *  Version: 0.1
 *  Changes: Initial version
 *
 *  interface hardware needed !
 */
#ifndef Schakelbord_H_
#define Schakelbord_H_

class Schakelbord {
public:
  Schakelbord(int);  // Constructor with pinnumber
  Schakelbord();     // Empty constructor
  void pin(int);     //  Initialise pin``
  int read();        //    Read value switch
  int pulse();       //    Read value switch and make it a pulse
  void set(int);     //    Set LED on/off_type
  int get();         //    Get state LED
  void setInvers(bool);
  bool getProcessed();
  void setProcessed(bool);
  int getAdresLED();
  void setAdresLED(int);
  int getBitLED();
  void setBitLED(int);
  int getAdresSwitch();
  void setAdresSwitch(int);
  int getBitSwitch();
  void setBitSwitch(int);
 
protected:

private:
  const int SETDENDER = 3;
  int _pin;
  int _stand;
  int _dender;
  bool _invers;
  int _pulse;
  int _adresLED;
  int _bitLED;
  int _adresSwitch;
  int _bitSwitch;
  bool _processed;
};

#endif /* Schakelbord_H_ */

Zo de andere 14 in elkaar zetten, en dan komt de sketch.

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino en Selectrix
« Reactie #76 Gepost op: 13 januari 2016, 12:38:37 »
Hoi Gerard,

Als je de led dooft door de pullup te activeren ipv de uitgang hoog te trekken sla je twee vliegen in één klap. Als eerste kan je dan R2 achterwegen laten, kortsluiting is niet mogelijk. En nu vertrouw je er nu op dat de led de uitgang nu altijd hoog trekt. Waarschijnlijk gaat dat wel goed maar zeker als je een witte led ofzo gebruikt is dat wel een erg zwakke pullup. Dus als je ook daar de pullup activeert ben je wat zekerder en is het ook mogelijk de led te laten zitten als je dat voor een uitgang niet zou willen.

Ennuh
// Set LED on or off
void Schakelbord::set(int stand) {
  if (_invers) {
    digitalWrite(_pin, stand);
  }
  else{
    digitalWrite(_pin, !stand);
  }
  _stand = stand;
}
;D Andere was zo langdradig  :P :P :P


Timo
Verzonden vanaf mijn desktop met Firefox

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #77 Gepost op: 13 januari 2016, 13:43:38 »
Is een idee dat ik uit moet proberen. Stuit me wel tegen de borst een uitgang kortsluiten naar ground. Ik verwacht dat het misgaat, want de LED wordt 90% van de tijd geactiveerd.

Was even vergeten dat digitalWrite een macro is. De Arduino zelf heeft alleen maar instructies om de uitgang hoog of laag te maken.

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino en Selectrix
« Reactie #78 Gepost op: 13 januari 2016, 18:40:24 »
digitalWrite is geen macro maar gewoon een functie.

De Arduino zelf heeft alleen maar instructies om de uitgang hoog of laag te maken.
Wat bedoel je hiermee? Zijn digitale uitgnagen dus ja, hoog of laag. Maar je kunt ze ook gewoon on the fly schakelen naar een input.

Is een idee dat ik uit moet proberen. Stuit me wel tegen de borst een uitgang kortsluiten naar ground. Ik verwacht dat het misgaat, want de LED wordt 90% van de tijd geactiveerd.
Hoezo zou dit mis gaan? Als de led geactiveerd is dan is de pin toch ook gewoon al laag? Enige effect is dat de knop nu iets meer effect heeft op de led. Nu heeft het alleen tijdens het pollen even effect dus afhankelijk van hoe vaak je pollt.


Timo
Verzonden vanaf mijn desktop met Firefox

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #79 Gepost op: 14 januari 2016, 10:58:19 »
digitalWrite is geen macro maar gewoon een functie.
Wat bedoel je hiermee? Zijn digitale uitgnagen dus ja, hoog of laag. Maar je kunt ze ook gewoon on the fly schakelen naar een input.
Ik ken de Arduino nog maar kort, maar heb al een aantal jaren ATtiny2313 erop zitten. Deze allemaal in assembler geprogrammeerd. Recent ook de SXArduino library bekeken op assembler niveau om vast te stellen wat de belasting. Wat ik bedoel is dat er alleen maar een instructie is om een uitgang te setten (SBI P,b) of te clearen (CBI P,b). Stukken waarbij als parameter de waarde van een poort meegegeven worden zijn dus complexere code. Aangezien ik de assembly vrij goed ken, begin ik af en toe zelf voor compiler te spelen en doe alvast wat zaken die in de macro gebeuren.
Hoezo zou dit mis gaan? Als de led geactiveerd is dan is de pin toch ook gewoon al laag? Enige effect is dat de knop nu iets meer effect heeft op de led. Nu heeft het alleen tijdens het pollen even effect dus afhankelijk van hoe vaak je pollt.
Ik denk dat ik je niet goed begrijp. Maar als ik het goed begrepen heb stel jij het volgende voor:
// Lees de stand van de schakelaar/drukknop
int Schakelbord::read() {
int temp;

// Set pin to input and read
        pinMode(_pin, INPUT);
digitalWrite(_pin, HIGH);                    // Set pullup on      <-- Toevoeging
        temp = digitalRead(_pin);
// Set pin to output and restore
        pinMode(_pin, OUTPUT);
set(_stand);
// Ontdender de terugmelding
if (temp == 0) {
_dender = SETDENDER;            // Set waittime back to start.
} else {
if (_dender != 0) {
_dender--;            // Continue waiting,
temp = 0;             // Report open switch
}
}
return temp;
}
Maar corrigeer me als ik je fout begrepen heb.

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino en Selectrix
« Reactie #80 Gepost op: 14 januari 2016, 11:38:57 »
Aangezien ik de assembly vrij goed ken, begin ik af en toe zelf voor compiler te spelen en doe alvast wat zaken die in de macro functie gebeuren.
Hehe, in de meeste gevallen is de compiler aardig goed dus is het vaak beter om niet de compiler te slim af te zijn. Meestal heeft dat toch niet het gewenste effect... Compiler zal er waarschijnlijk gewoon een compare met 0 van maken ofzo. Of, als je gewoon een bool gebruikt kan dat direct als input voor de vergelijking dienen.

Maar corrigeer me als ik je fout begrepen heb.
Bij deze.  ;D Nee ik bedoel het volgende:
// Lees de stand van de schakelaar/drukknop
bool Schakelbord::read() {
bool temp; //bool is groot genoeg ;)

// Set pin to input and read
    pinMode(_pin, INPUT_PULLUP);
    temp = digitalRead(_pin);
   
// Just restore
  //pinMode(_pin, OUTPUT);
set(_stand);
 
if (temp == 0) {
_dender = SETDENDER;     // Set waittime back to start.
} else {
if (_dender != 0) {
_dender--;            // Continue waiting,
temp = 0;             // Report open switch
}
}
return temp;
}

// Set LED on or off
void Schakelbord::set(int stand) {
  //Zou er overigens er een bool van maken ipv een int...
  //Overigens zouden volgens mij alle int's vervangen kunnen worden door een bool of byte
 
_stand = stand;
 
  if(_invers){
    stand != stand;
  }
 
  if(stand){
    digitalWrite(_pin, LOW);  //Need this order! Otherwise the output is pulled
    pinMode(_pin, OUTPUT);    //high for a short time => shortcircuit possible
  }
  else{
    pinMode(_pin, INPUT_PULLUP);
  }
  /*if (_invers) {
if (stand == 0) {
digitalWrite(_pin, LOW);      // LED on
} else {
digitalWrite(_pin, HIGH);     // LED off
}
} else {
if (stand == 0) {
digitalWrite(_pin, HIGH);     // LED off
} else {
digitalWrite(_pin, LOW);      // LED on
}
}
_stand = stand;*/
}
Je stelt de pin dus nooit in als output die HIGH is. Je wisselt tussen output HIGH (led aan) en input met pullup (led uit).

Overigens is digitalWrite(pin, HIGH) na pinMode(pin, INPUT) de oude pullup methode. Werkt nog steeds maar kan ook direct met pinMode(pin, PULLUP). En omdat pinMode(pin, OUTPUT) het out register NIET aanpast is het dus hier nodig eerst deze laag te maken voor naar pinout te wisselen. pinMode(pin, OUTPUT) als de pullup aan staat resulteert in een output die HIGH is. En dat willen we hier voorkomen (geeft kortsluiting als de knop is ingedrukt).

Zoals ik in de code al aan gaf is eigenlijk geen enkel gebruik van int gerechtvaardigd...  ::) In geval van stand enzo voldoet een bool en in andere gevallen een byte (uint8_t). Scheelt aardig wat geheugen en ook best was code slagen.

Ow, en de code ziet er wat raar uit omdat jij hard taps gebruikt in je code en ik 2 spaces (Arduino standaard). In de editor ziet dat er hetzelfde uit maar het forum maakt een tab 4 spaces breed... Zucht...


Timo
Verzonden vanaf mijn desktop met Firefox

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #81 Gepost op: 14 januari 2016, 13:05:37 »
Zal geen tabs meer gebruiken, hoef je niet meer te zuchten. Kijken of Notepad++ dat ook snapt bij autoindenting.
Nu snap ik je. Zal het eens door de compiler halen en kijken wat die ervan bakt. Dit is een veiliger methode van werken dan die ik gemaakt had. De pin is alleen uitgang als die laag is, en dan is het potentiaal "hetzelfde" als bij ingedrukte schakelaar. Hierdoor is de kans op kortsluiting inderdaad nog kleiner geworden.
int is inderdaad 16 bit. Werken daarmee scheelt maar 3 of 4 ticks ten opzichte van een byte (u_int8 of bool). Compiler gebruikt R26/R27 (register X) als ALU. Deze is geoptimaliseerd voor 16 bit gebruik (vrijwel alle bewerkingen 1 clock tick).

Je code geaccepteerd.

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Arduino en Selectrix
« Reactie #82 Gepost op: 14 januari 2016, 13:35:47 »
Zuchten was niet om jou hoor Gerard! Meer om het forum die dus de opmaak verdraait. Schrijf zelf ook in Notepad++ en die ondersteund dat. Vinkje bij Tab settings => Replace by space. Mag je ook gewoon de tab toets blijven gebruiken.

Is ook niet dat het een fout is en het ander goed maar meer een coding style. En aangezien 2 spaces als tab door arduino wordt gebruikt en omdat het wat compacter is dan 4 spaces heb ik het zo staan. Maar goed, net zoiets als de bracket na de functie of op een nieuwe regel etc. Bij het Multipass project ging het er de eerste week over welke coding style te gebruiken  ;D

Maar inderdaad, pin als HIGH output komt nooit voor dus kan er geen kortsluiting zijn. En het werkt nu met of zonder de led op de uitgang. Mooi dat het nu duidelijk is  (y)

Van de int optimalisatie ben jij meer op de hoogte dan in. Zelden in ASM geschreven en in ieder geval nooit voor een ATmega. Maar is het nog steeds geoptimaliseerd als het signed is? Maar goed, het scheelt ook RAM en die is natuurlijk ook beperkt (ook al ben ik nog nooit ook maar in de buurt van max gekomen...)


Timo
Verzonden vanaf mijn desktop met Firefox

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #83 Gepost op: 14 januari 2016, 14:08:44 »
Signed / Unsigned maakt niets uit. Bij signed is niet de C-flag maar de V-flag de melder. En verder probeer altijd checks met 0 te doen. Register R1 wordt speciaal daarvoor met 0 gevuld. Dit vind ik weer overdreven, daar een AND, OR of TST net zo snel op 0 kan testen als CP r,1 r2, waarbij r2 altijd R1 is.
Wat RAM betreft. Ik ben op deATtiny2313 met 168 bytes ook altijd ruim uit de voeten gekomen. Ik verzuip in deze 2k.

Groet en bedankt,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

fredjansen

  • Offline Offline
  • Berichten: 17
Re: Arduino en Selectrix
« Reactie #84 Gepost op: 13 maart 2020, 20:21:53 »
Vraagje van meer algemene aard.

Bestaat er al een selectrix centrale op basis van een arduino ?

ik heb het forum wat doorgelezen en kom af en toe wel artikelen tegen maar ik krijg de indruk dat er nog niet iets is nabouwbaars is.

wie geeft mij wat licht op deze zaak ?

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #85 Gepost op: 16 maart 2020, 16:30:19 »
Officieel niet. Maar een goede knutselaar maakt wel eens wat.

Groeten,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.

bask185

  • Offline Offline
  • Berichten: 4067
Re: Arduino en Selectrix
« Reactie #86 Gepost op: 16 maart 2020, 21:12:04 »
Vraagje van meer algemene aard.

Bestaat er al een selectrix centrale op basis van een arduino ?

ik heb het forum wat doorgelezen en kom af en toe wel artikelen tegen maar ik krijg de indruk dat er nog niet iets is nabouwbaars is.

wie geeft mij wat licht op deze zaak ?
Pluis het protocol voor me uit en ik regel code voor je  ;)
Train-Science.com
Train-Science github
It ain't rocket science ;-)

HansQ

  • Offline Offline
  • Berichten: 2032
  • Daar waar de rook is, is de kortsluiting...
HansQ, RailClub Utrecht
spoor N modulebouw, electronica, Selectrix

bask185

  • Offline Offline
  • Berichten: 4067
Re: Arduino en Selectrix
« Reactie #88 Gepost op: 16 maart 2020, 21:52:10 »
Top  (y)

Nou Gerard het zijn korte documentjes dus ik denk dat je er niet veel werk aan heb.

Mijn duits is roestig, ik moet MM2 ook nog doen en ik heb een chronisch gebrek aan tijd (maarja wie niet?). Als jij deze vertaalt in begrijpbaar Nederlands kan ik het coderen.

Ik heb vluchtig gekeken, ik snap het onderscheid tussen de '0'en en '1'en niet. Hoe verstuur ik een 0, hoe een 1 en hoe zijn die data pakketten precies opgebouwd?
Train-Science.com
Train-Science github
It ain't rocket science ;-)

gvandersel

  • HCC!m maar toch Selectrix (RMX)
  • Offline Offline
  • Berichten: 3602
  • Als het maar elektrisch is.
    • Homepage Gerard van der Sel
Re: Arduino en Selectrix
« Reactie #89 Gepost op: 17 maart 2020, 16:32:25 »
Vrij simpel  ;D
Hoe verstuur ik een "1": wissel van polariteit.
Hoe verstuur ik een "0": wissel niet van polariteit
Hoe zijn de datapakketten opgebouwd:
96 bits, die als volgt georganiseerd zijn:
Opbouw telegram (96 bits):
  0  0 0  1  S 1 A3 A2 1 A1 A0 1     synchronisatie 'byte'
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1         7 data 'bytes'
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1   ieder 'byte' is de inhoud
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1         van een adres
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1
 D0 D1 1 D2 D3 1 D4 D5 1 D6 D7 1

 0 = Logische 0
 1 = Logische 1
 S = Spanning rails (0 = uit, 1= aan)
 Ax = Gezamelijk het nummer van het telegram
 Dx = D0 t/m D7 vormen de data op een Selectrix adres.

 Verdeling adressen over de verschillende telegrammen:
 telegram  '0' : 111, 95, 79, 63, 47, 31, 15
 telegram  '1' : 110, 94, 78, 62, 46, 30, 14
 telegram  '2' : 109, 93, 77, 61, 45, 29, 13
 telegram  '3' : 108, 92, 76, 60, 44, 28, 12
 telegram  '4' : 107, 91, 75, 59, 43, 27, 11
 telegram  '5' : 106, 90, 74, 58, 42, 26, 10
 telegram  '6' : 105, 89, 73, 57, 41, 25,  9
 telegram  '7' : 104, 88, 72, 56, 40, 24,  8
 telegram  '8' : 103, 87, 71, 55, 39, 23,  7
 telegram  '9' : 102, 86, 70, 54, 38, 22,  6
 telegram '10' : 101, 85, 69, 53, 37, 21,  5
 telegram '11' : 100, 84, 68, 52, 36, 20,  4
 telegram '12' :  99, 83, 67, 51, 35, 19,  3
 telegram '13' :  98, 82, 66, 50, 34, 18,  2
 telegram '14' :  97, 81, 65, 49, 33, 17,  1
 telegram '15' :  96, 80, 64, 48, 32, 16,  0

Ga ervan uit dat het laatste bit een "1" was bij het opstarten.
Let erop dat er iedere 50usec gedurende 10usec 0V op de rails staat. Het leifst wordt dit gedaan door de rails kort te sluiten.

Groet,

Gerard van der Sel.
Holzburg (IIIb/IVa) schaal N.
Kijk ook eens bij de bouw en lees de avonturen.