Progetto DCC decoder per deviatoi/accessori

<b><font size="1"> Area di lavoro per portare all'attenzione degli appassionati, soluzioni pratiche che fanno uso della piattaforma Arduino e Processing.</font id="size1"></b>

Moderatore: Tito2

Messaggio
Autore
Docdelburg
supporter
supporter
Messaggi: 4808
Iscritto il: mar set 04, 2012 6:16 pm
Località: Lombardia
Data di Nascita: Si
Contatta:

Progetto DCC decoder per deviatoi/accessori

#1 Messaggio da Docdelburg » mer mar 29, 2017 1:39 pm

Ciao, sto ultimamente giocando con Arduino; chi mi conosce sa che faccio il medico e quindi fate conto che sto giocando al "piccolo" elettrotecnico! [:I]
Mi incuriosisce la sfida a programmarmi un Arduino Uno Rev.3 in un decoder DCC in grado di pilotare motori per deviatoi, ma ci devo arrivare da solo, pur con tutti gli aiuti del caso.
Al di là che siano motori a bobina, lenti o servo, sono arenato al momento al problema di decodificare e interpretare i pacchetti di segnali in arrivo dal bus DCC.
In pratica ho adottato uno schema frequentemente riportato in rete per connettere il bus DCC alle porte digitali di Arduino con un sistema otpoisolato per evitare guai visti i diversi voltaggi.
Lo schema è questo

Immagine:
Immagine
36,99 KB

Ho caricato librerie e sketch da questo sito e in effetti il tutto funziona:

http://www.mynabay.com/dcc_monitor/

Posso vedere a monitor (seriale) i vari pacchetti DCC che cambiano man mano che invio comandi ad un ipotetico decode deviatoi.

Immagine:
Immagine
121,35 KB

Pur essendoci in rete altri esempi, quello che non riesco a capire è come diversificare un comando impartito allo stesso indirizzo per la deviata o il corretto tracciato.
Mi spiego, ci sono esempi in rete in cui ad ogni indirizzo si associa un'azione di arduino. Ma se allo stesso indirizzo arrivano due comandi opposti, deviata e corretto tracciato appunto, come faccio a distinguere tali due comandi e di conseguenza impartire ad esempio un "HIGH" in un pinoutput per deviata e un altro "HIGH" in un secondo pinoutput per il corretto tracciato?

Grazie a chi mi potrà dare un suggerimento

gavinca
supporter
supporter
Messaggi: 1654
Iscritto il: mar mag 22, 2012 1:07 pm
Località: Piemonte
Data di Nascita: Si
Contatta:

#2 Messaggio da gavinca » mer mar 29, 2017 3:14 pm

Ciao Doc
non conosco nello specifico la libreria e gli sketch che hai scaricato, ma tempo fa quando per curiosità avevo studiato l'interfaccia tra arduino e DCC, per comandare gli accessori usavano il pacchetto dcc delle "funzioni", quindi F0, F1, F2, ecc che possono valere 1 o 0 (deviata o corretto tracciato).

Docdelburg
supporter
supporter
Messaggi: 4808
Iscritto il: mar set 04, 2012 6:16 pm
Località: Lombardia
Data di Nascita: Si
Contatta:

#3 Messaggio da Docdelburg » mer mar 29, 2017 4:26 pm

Grazie Carlo,
a furia di cercare le decodifiche sono riuscito a capire lo sketch di Papeniglio che ho modificato e che ai primi test sembra funzionare egregiamente.

http://www.papeniglio.net/elettronica/decoder-dcc/

Da questo sketch si parte per comandare ad ogni indirizzo un relè monostabile; ora sono di fretta ma farò tutta una serie di prove e poi relazionerò......

Stay tuned! :wink:

Avatar utente
matteob
Junior
Messaggi: 808
Iscritto il: ven giu 12, 2015 12:06 pm
Località: Veneto
Data di Nascita: Si
Contatta:

#4 Messaggio da matteob » mer mar 29, 2017 4:53 pm

Docdelburg ha scritto:

Grazie Carlo,
a furia di cercare le decodifiche sono riuscito a capire lo sketch di Papeniglio che ho modificato e che ai primi test sembra funzionare egregiamente.

http://www.papeniglio.net/elettronica/decoder-dcc/

Da questo sketch si parte per comandare ad ogni indirizzo un relè monostabile; ora sono di fretta ma farò tutta una serie di prove e poi relazionerò......

Stay tuned! :wink:


Non ti ferma nessuno! :wink:

Fabio_C
Junior
Messaggi: 81
Iscritto il: ven nov 18, 2011 9:15 pm
Località: Campania
Data di Nascita: Si
Contatta:

#5 Messaggio da Fabio_C » dom apr 02, 2017 10:02 am

Buongiorno,

Ho utilizzato il progetto Rudy sul mio plastico senza alcuna difficoltà.
La IB con la IB Switch ci lavorano senza problemi.

Prossimo step gli S88......

Docdelburg
supporter
supporter
Messaggi: 4808
Iscritto il: mar set 04, 2012 6:16 pm
Località: Lombardia
Data di Nascita: Si
Contatta:

#6 Messaggio da Docdelburg » lun apr 03, 2017 4:18 pm

Fabio_C ha scritto:

Buongiorno,

Ho utilizzato il progetto Rudy sul mio plastico senza alcuna difficoltà.


Buongiorno Fabio,
concordo che il progetto di Rudy è il più calzato per le nostre necessità; in effetti permette di dare un impulso a due uscite di Arduino con un indirizzo unico in modo da muovere correttamente un motore a solenoide. Ovviamente lo fa a soli 5V e servono sovrastrutture che diano un impulso di maggior potenza.
Quello che non ho capito, nella mia ignoranza circa il linguaggio C, è come replicare correttamente le istruzioni dell'indirizzo 1 per avere fino a 6 indirizzi diversi. Sono riuscito a cambiare i punti di output ma replicando le istruzioni mi chiede definizioni che non so.

DECODER SOLENOIDI.doc (34,41 KB)

Fabio_C
Junior
Messaggi: 81
Iscritto il: ven nov 18, 2011 9:15 pm
Località: Campania
Data di Nascita: Si
Contatta:

#7 Messaggio da Fabio_C » lun apr 03, 2017 10:11 pm

Ciao Doc, ecco quanto funzionante sul mio plastico

Arduino con DCC Sniffer
Immagine

Relè d'interfaccia con i motori a solenoide Hornby/Peco dotati di circuito a scarica capacitiva
Immagine

Sottoriportato lo sketch contenete 8 deviatoi
Code.txt (10,13 KB)

Docdelburg
supporter
supporter
Messaggi: 4808
Iscritto il: mar set 04, 2012 6:16 pm
Località: Lombardia
Data di Nascita: Si
Contatta:

#8 Messaggio da Docdelburg » lun apr 03, 2017 10:32 pm

Grazie Fabio, mi hai tolto qualche dubbio! :smile:
Tu però, per avere porte digitali oltre la 13 hai evidentemente un Mega, giusto?
Io arrivo a 6 motori con le porte digitali; potrei usare anche le analogiche?

SteaMarco
Junior
Messaggi: 809
Iscritto il: dom dic 06, 2015 8:30 am
Località: Piemonte
Data di Nascita: Si
Contatta:

#9 Messaggio da SteaMarco » lun apr 03, 2017 10:41 pm

Ciao,

a volte penso che non sò come intervenire, non capisco a volte dite che di elettronica non sapete nulla e poi si scopre che siete programmatori della nasa... :grin:
Non ho letto gli sketc ma secondo me basta un banale datashift per moltiplicare le uscite ad Arduino...

Ma quà sul forum non c'è H0Master che ha pubblicato cose simili? Non trovo più la discussione sennò la linkavo.

Ciao Marco

Fabio_C
Junior
Messaggi: 81
Iscritto il: ven nov 18, 2011 9:15 pm
Località: Campania
Data di Nascita: Si
Contatta:

#10 Messaggio da Fabio_C » lun apr 03, 2017 11:49 pm

Docdelburg ha scritto:

Grazie Fabio, mi hai tolto qualche dubbio! :smile:
Tu però, per avere porte digitali oltre la 13 hai evidentemente un Mega, giusto?
Io arrivo a 6 motori con le porte digitali; potrei usare anche le analogiche?

Uso 8 deviatoi (maxaccesories) tab 0 a 7 con indirizzo DCC da 10 a 16 (il 9 é libero e usato x alcuni test)

Il primo lo chiamo tab (0) in DCC 10 e le uscite Arduino sono quelle pin 6e5 ecc...
A volte le uscite non sono in sequenza per esempio DCC 12 per non scablare i relè con i comandi di Normale\Rovescio ho fatto prima ad invertirli via software, sai noi della NASA facciamo cosí :geek:

Edgardo_Rosatti
supporter
supporter
Messaggi: 3766
Iscritto il: ven ott 28, 2011 12:59 am
Località: Lombardia
Data di Nascita: Si
Contatta:

#11 Messaggio da Edgardo_Rosatti » mer apr 05, 2017 12:55 am

Docdelburg ha scritto:

Grazie Fabio, mi hai tolto qualche dubbio! :smile:
Tu però, per avere porte digitali oltre la 13 hai evidentemente un Mega, giusto?
Io arrivo a 6 motori con le porte digitali; potrei usare anche le analogiche?


Si, tecnicamente e limitatamente al funzionamento di Arduino, le 6 uscite PWM D3,D5,D6,D9,D10,D11 (non analogiche) dell'UNO sono configurabili anche come digitali, quindi arrivi a 12 (D2-D13). Sarebbero 14 con la D0 e la D1, ma queste ultime sono usate per la comunicazione seriale tra PC e Arduino.

Inoltre è possibile utilizzare i 6 pin di ingressi analogici A0-A5 come pin digitali definendoli nel seguente modo:
Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

Es. Per dichiarare A0 come uscita digitale:
pinMode(14,OUTPUT);
oppure come ingresso digitale:
pinMode(14,INPUT);

e i soliti comandi di scrittura/lettura:
digitalWrite();
digitalRead();

arrivando così a 18 porte I/O digitali

http://alessandro-riva-elettronica.blog ... -come.html

http://www.mauroalfieri.it/informatica/ ... ogici.html

SteaMarco
Junior
Messaggi: 809
Iscritto il: dom dic 06, 2015 8:30 am
Località: Piemonte
Data di Nascita: Si
Contatta:

#12 Messaggio da SteaMarco » mer apr 05, 2017 11:22 am

La discussione che mi riferivo era questa che mi sembra avesse risolto già queste cose...

http://www.scalatt.it/forum/topic.asp?TOPIC_ID=12113

P.S. Io ivece appartengo alla categoria Copia/incolla! :wink:

Marco

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite