Nieuws:

Nu in MSM 244 PRAKTIJK: Een kasteeltje uit Forex * Een diorama uit de mouw schudden: een tutorial door Evan Daes

Hoofdmenu

Arduino met touchscreen en XpressNet interface

Gestart door Dirkh, 10 maart 2019, 17:02:12 PM

dani

ZALIG projectje...    chapeau !

Ik ga er van uit dat alles via I2C babbelt ?  (arduino en scherm)...

Fijne vooruitzichten, toch ..  Pakweg 5 jaar geleden was dit soort experimenten ONBETAALBAAR en buiten bereik van de hobby bouwer, nu kan het zomaar.
YESS !! Ik volg in spanning
De kruik is te water gegaan...
De kruik is niet meer.

Dirkh

de communicatie tussen scherm en arduino gebeurt via rs232, ( die nextion heeft zelfs geen i2c) daarom ook dat ik geopteerd heb om een arduino mega te gebruiken. 1 seriele poort voor de xpressnet interface, 1 voor het scherm en dan heb je nog een seriele poort over voor debugging en zelfs nog een extra.

De schermpjes zijn te vinden rond de 20€ voor een 3.5" enhanced en dus best te doen. Spijtig dat de grotere schermen direct veel duurder uitvallen.

Voordeel van die nextion is dat je via een sd kaart een configuratie kan laden voor het scherm en zo snel een andere baanplan kan laden zonder opnieuw een programma in de arduino te moeten laden. Bij het opstarten stuurt de nextion in mijn geval een configuratie naar de arduino zodat die weet welke wissels of functies er moeten behandeld worden.

En het projectje is bijna klaar nog een behuizing en dan alles nog eens extra testen met de baan aangesloten.

Heel soms word er bij het opstarten en inlezen van de wisselstanden nog eentje gemist, maar bij het gewoon gebruik heb ik geen problemen meer.

Dirkh

Voor volgend probleem de oorzaak gevonden :
CiteerHeel soms word er bij het opstarten en inlezen van de wisselstanden nog eentje gemist, maar bij het gewoon gebruik heb ik geen problemen meer.

Ik heb geen rekening gehouden met volgende toestand volgens de XpressNet spec :

CiteerAccessory Decoder information response
...........
Data 3: Z3 Z2 Z1 Z0 Definitions for the status flags
In the case of a turnout accessory decoder: Z1 and Z0 represent the status of the first turnout in the
nibble, Z3 and Z2 represent the status of the second turnout in the nibble.
Possible combinations:

Z1 Z0 (the first turnout in the nibble)
0 0 turnout has not been controlled during this operating session.
0 1 last command sent was ,,0", turnout ,,left".
      This is only relative.
1 0 last command sent command was ,,1"
1 1 invalid combination - both end switches of a Turnout with feedback are indicating that they are active.

The same structure is used for Z3 and Z2, the second turnout in the nibble. For a feedback module, the 4
bits Z3 toZ0 directly represent the value of the 4 inputs of the requested nibble.

Ik heb geen rekening gehouden met de toestand 0 0 voor Z1 - Z0  en Z3 - Z2 , dus als de wissel nog geen commando heeft ontvangen na het opstarten van de multimaus krijg je deze responce. Daarom dat ik soms bij het opstarten wissels miste als ik direct de read optie gebruikte.

De oplossing is van bij het opstarten eerst de init routine te selecteren (Die zet alle decoder adressen in de gespecificeerde default toestand) zodat alle wissels en schakelaars een keer bediend zijn en nadien werkt alles wel correct. Lijkt me logisch dat na een powerup de multimaus de standen van de wissels niet kent als deze nog niet gebruikt zijn.

Valt weinig aan te doen tenzij ik een routine ga maken die als ik deze response krijg ik de wissel in de default toestand zet.

Hier moet ik nog eens over nadenken of/hoe ik dat ga implementeren want de arduino's die ik gebruik voor de wissels te zetten onthouden de laatste toestand in EEPROM,  daarom is de stand van de wissels en schakelaars ook niet altijd de default toestand na het opstarten van de baan.

Het is uiteindelijk een klein schoonheidsfoutje .

Robrecht

Is er iets van terugmelding beschikbaar? Anders kan je proberen adhv de terugmelding ergens centraal de stand op te slaan?
H0 - 2 rail DCC-EX - Arduino - JMRI
Brussel Schuman, ooit zal het klaar zijn...

Dirkh

Citaat van: BrainFeeder op 25 maart 2019, 09:26:09 AM
Is er iets van terugmelding beschikbaar? Anders kan je proberen adhv de terugmelding ergens centraal de stand op te slaan?

Helaas geen terugmelding. Maar uiteindelijk maakt het niet zoveel uit, als ik de baan opstart wil ik alles initialiseren zodat ik zeker ben van de wisselstanden.
Nadien werkt alles correct.

Maar nog een probleempje gevonden.
Bij het inpluggen van de XpressNet interface zijn ondertussen al 3 RS485 modules gesneuveld. (Gelukkig had ik een set van 10 gekocht)
Ik maak gebruik van volgende modules van bij aliexpress :



Ik heb wel niet echt die module nagemeten van hoe de opbouw is en welke weerstanden enz.. erop zitten vooraleer ze te gebruiken. Volgens de spec zou die op 5V dc moeten werken en de XpressNet interface is volgens de specificaties die ik heb gevonden ook 5 V. Maar ergens sneuvelt de module telkens.

Nu de module eens bekeken van dichtbij en zie ik de R1, R2, R3 en R4 langs een zijde verbonden zijn met Vcc en dienen als pullup weerstanden voor RO, RE, DE en DI van de MAX485.

Volgens de spec van de MX485 :

Citeerpin 2  RE  Receiver Output Enable. RO is enabled when RE is low; RO is high impedance when RE is high.

pin 3  DE  Driver Output Enable. The driver outputs, Y and Z, are enabled by bringing DE high. They are high impedance when DE is low. If the driver outputs are enabled, the parts function as line drivers. While they are high impedance, they function as line receivers if RE is low
.

Dus eigenlijk is de module niet geschikt om zo direct aan te sluiten zonder DE (pin 3)  LOW (0 V) te maken. Bij het opstarten van de arduino (na het inpluggen) duurt het even eer de output die deze pin bedient in de lage stand komt waardoor even de DE ingang hoog is en bijgevolg de driver actief is en dus in conflict komt met de drivers van de andere aangesloten toestellen. Die zijn iets beter beveiligd en overleven deze fout maar op deze module sneuvelt de driver/receiver.

Default is een ouput/input pin van de arduino een HIGH impedance, dus de pullup weerstand op de module gaat ervoor zorgen dat de driver actief wordt tot de arduino de pin laag stuurt. (dit gebeurt in de setup routine maar kan wel even duren eer de arduino is opgestart en de pin laag stuurt)

Volgens mij een ontwerp fout in de module, je zou veronderstellen dat je de outputs/inputs default in een hoge impedantie brengt en niet de output driver activeert wanneer er spanning op de module komt.

Eigenlijk ook een beetje mijn fout door een kant en klare module te willen gebruiken zonder die goed te bestuderen. Gelukkig zijn de drivers in mijn andere aangesloten toestellen niet gesneuveld.  Dus een kleine aanpassing maken aan de module en R3 los te maken van de 5V en te verbinden met GND. (Doeme moet ik toch nog solderen  ;D) Dacht weer het simpel te maken door een module te gebruiken zodat ik niet zelf een klein printje moest maken voor de MAX485.

Straks de aanpassing eens doen en dan nog maar een aantal keren testen om te kijken of de module het deze keer wel overleeft.


Dirkh

En voila aanpassing gedaan , het is niet een mooi stukje soldeerwerk maar het voldoet om te testen en eventueel te gebruiken.
Ik heb nu eenmaal niet direct het materiaal om SMD onderdelen te solderen. Zelfs mijn fijnste punt van de soldeerbout is redelijk groot voor die kleine weerstandjes.

Links de originele module , rechts de aangepaste versie, weerstandje R3 (10k) losgemaakt en verschoven naar onder en dan de losse zijde verbonden met de GND aan C1 via een stukje lakdraad.


rs485 modification by D Ha, on Flickr

Zal eens eens een feedback schrijven op ALIEXPRESS om gebruikers er op te wijzen dat dit geen HOTPLUG module is.

Reeds een 10 tal keer ingestoken en getest , zonder problemen.  :) Het werkt eindelijk zonder errors te genereren in koploper en op de multimaus.
Ik heb wel veel tijd verloren omdat ik tekens dacht dat ik een programmeer fout had gemaakt bij de laatste aanpassingen en uiteindelijk was het de hardware die ondertussen gesneuveld was.

Als er iemand zich geroepen vind om hiervoor in 3D een behuizing te tekenen, die mag zich altijd melden. Ik ben er zelf al eens mee bezig geweest maar ben geen 3D tekenaar en daar kruipt dus enorm veel tijd voor mij in.

beertje

Dirk,
Als je een schets van maakt met de maten,
wil ik het wel proberen.een goede leerstof voor mij.
gr.

Erik84750

TOP gedaan, deze RS485 module modificatie! Zeer goed gevonden, goed gedocumenteerd Dirk. Deze module is erg in gebruik, ik heb er hier 4 van liggen, ik heb ze deze ochtend per direct aangepast.
Dit soort bevindingen zouden in een soort gepinde vorm op het forum moeten komen.

Dirkh

En welke voor welke toepassing ga je die gebruiken?
Ik ben altijd benieuwd naar nieuwe toepassingen.

Erik84750

Dag Dirk, sorry ik heb nu pas jouw laatste berichtje op deze thread ontdekt.

RS485 toepassingen: op modelspoor vooral alles wat met C/MRI betrekking heeft. Dat is een decennia oud protocol maar nog even robuust.
Op Trainboard.com zijn er een aantal discussies over dat onderwerp:
https://www.trainboard.com/highball/index.php?threads/24-in-48-out-card-for-jmri.116454/
https://www.trainboard.com/highball/index.php?threads/jmri-and-c-mri-node-and-output-addressing.141712/#post-1205601

Maar wat jouw misschien ook interesseert is dit onderwerp over een Nextion-gebaseerde handheld controller:
https://www.trainboard.com/highball/index.php?threads/a-nextion-based-controller-for-dcc-and-dcc-ex.146008/
en
https://github.com/normhal?tab=repositories

Mocht er interesse zijn dan start ik wel een nieuw onderwerp hier om die projecten aan het licht te brengen.
Grt
Erik