Sequenza di invio dei pacchetti DCC

L'angolo degli smanettoni .Discussioni inerenti lo sviluppo di nuovi progetti DCC o l'hack di sistemi commerciali.

Moderatore: Seba55

Messaggio
Autore
greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

Sequenza di invio dei pacchetti DCC

#1 Messaggio da greenant »

Sto progettando il software per comandare una centrale digitale. Ho dato un occhiata al codice della centrale del Merg e quella del MiniDcc.

Il funzionamento di quella del merg non l'ho capito molto bene, ma quella del MiniDcc, in sostanza, continua a rotazione a mandare le info riguardo la velocità  e le funzioni relative alle sue 4 loco comandabili

Codice: Seleziona tutto

call    DCCIdle
call    DCCZero        
call    SyncPulse
call    SendDCCPulse1   ;Send Loco#1 info (Preamble/Address/Speed)            
call    SendDCCPulse2   ;send loco#2 info ...
call    SendDCCPulse3
call    SendDCCPulse4
call    DCCIdle
call    FuncGroup1_1        
call    FuncGroup1_2        
call    FuncGroup1_3        
call    FuncGroup1_4
Io invece avevo pensato ad un altro approccio.
Ovvero, non appena mi arriva un comando dal throttle, creo il pacchetto DCC e lo invio alcune volte (due o tre volte), poi mi metto a mandare IDLE packet fino a quando non mi arriva un altro messaggio dal throttle.

Voi che ne pensate? Suggerimenti?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

BuddaceDCC
PlasticoDigitale
Messaggi: 710
Iscritto il: martedì 9 marzo 2004, 16:17
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Località: Torino
Contatta:

#2 Messaggio da BuddaceDCC »

Voi che ne pensate? Suggerimenti?
La ripetizione continua dei pacchetti DCC serve a far ripartire le loco in caso di mancata captazione di corrente. La ripetizione dei pacchetti "marcia" è obbligatoria secondo lo standard DCC NMRA mentre quella delle funzioni è solo consigliata.
Sistema digitale : TBX-TMWDCC, zDCC, Lokmaus 2 , Select, Arnold

http://www.DCCWorld.com - il sito dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario.

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#3 Messaggio da greenant »

Packets sent to Digital Decoders should be repeated as frequently as possible
Nel caso io comandi 5 treni è fattibile. Basta tenere in memoria le info per ciascun treno. Ma nel caso la centralina comandi 100 treni? O 1000? àˆ improponibile fare il refresh di tutti i treni? Forse è meglio ripetere solo gli ultimi N treni, avendo così un compromesso tra affidabilità  e "spazio occupato per memorizzare le info di ogni treno"?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#4 Messaggio da greenant »

Mi rispondo da solo. Devo fare il refresh di tutti i treni.

Ma toglietemi una curiosità . C'è qualche plastico con qualche centinaio di treni comandato da una sola centralina DCC, oppure i grandi numeri promessi dalle varie centraline (9999 indirizzi della intellibox) sono solo limiti teorici ma nessuno si è mai spinto a tanto?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

denny
Site Admin
Messaggi: 427
Iscritto il: lunedì 2 febbraio 2004, 12:59
Scala: N
Ho il plastico: No
La mia centrale digitale.: Analogico

#5 Messaggio da denny »

greenant ha scritto:Mi rispondo da solo. Devo fare il refresh di tutti i treni.

Ma toglietemi una curiosità . C'è qualche plastico con qualche centinaio di treni comandato da una sola centralina DCC, oppure i grandi numeri promessi dalle varie centraline (9999 indirizzi della intellibox) sono solo limiti teorici ma nessuno si è mai spinto a tanto?
9999 e' alla fine un limite teorico (ma raggiungibile). il grosso numero serve solo per rendere univoca ogni locomotiva, ma non per questo le loco devono essere tutte contemporaneamente presenti - e soprattutto marcianti - sul plastico.

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#6 Messaggio da greenant »

Il problema sarebbe che per ogni loco si devono tenere almeno 2 byte per la velocità  e la direzione e indirizzo (nel caso migliore). Se si hanno 200 loco contemporaneamente servono come minimo 400 byte, che non sono molto facili da trovare su un microcontrollore non troppo costoso.

Qualche fortunato possessore della IB, oppure TwinCenter, sa dirmi che microcontrollore usano?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

Despx
DCCMaster
Messaggi: 1489
Iscritto il: mercoledì 4 febbraio 2004, 19:49
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: KDCCX - KDCCX2
Località: Torino
Contatta:

#7 Messaggio da Despx »

Per esperienza diretta posso dire che il numero massimo ammissibile di locomotive presenti su di un plastico non dovrebbe superare le 30 unità  (per centrale) altrimenti non è tanto il problema dei byte da tenere in memoria, ma soprattutto il lento refresh dei comandi sui binari ed il conseguente tempo morto della reazione delle locomotive ai comandi impartiti (anche 2-4 secondi). Per fare un'esempio, il Loktopo, sulla carta comanda 99 indirizzi ma in realtà  invia comandi per soli 20 gestendo la cosa, o usando gli stack programmati dall'utente, o, raggiunti i 20 indirizzi, per comandare il 21esimo, elimina il primo ricevuto, assumendo che sia il meno significativo. Sottolineo che i 20 indirizzi possono avere valori singoli tra 1 e 99! Quindi il mio consiglio è NON QUELLO di usare un 486 con 2MB di memoria ram per comandare 200 locomotive MA di usare un semplice pic da 4K in su tipo quelli della famiglia 16F8xx e gestire al massimo 20-30 stack (cioè spazi di memoria dove memorizzare i dati delle locomotive).

Ciao
Despx 8)
Progettista e realizzatore delle centrali KDCCX e KDCCX2, della basetta di conversione K652 e del sistema di illuminazione KIT KLed.

Sito: http://www.despx.it

Si è giovani fino quando si ha voglia di giocare.

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#8 Messaggio da greenant »

io appunto devo usare un 16F877A.

Sorge però anche un altro problema, che però mi porrò solo quando avrò finito la centralina base.
Le specifiche loconet richiedono uno stack di 120 slot da 10 bytes ciascuno, e quindi 1,2K circa. Ma io dove li trovo 1200 byte di memoria
The model of the MASTER refresh stack is an array of up to 120 read/write refresh SLOTS. The slot
address is a principal component and is generally the second byte or 1st argument of a message to the
master. The refresh SLOT contains up to 10 data bytes relating to a Locomotive and also controls a task in
the Track DCC refresh stack.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#9 Messaggio da greenant »

Tu, per creare la tua centrale digitale del progetto KDCC, che PIC usi?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#10 Messaggio da greenant »

Voi dite che fare il refresh delle funzioni è facoltativo.
Credete che sia meglio farlo o no? Le centrali commerciali come si comportano?

Qualche anima pia, dotata di centrale commericale, potrebbe mandarmi un log di qualche centinaio di righe catturato con ShowDCC, con due o tre treni all'opera?

Vorrei vedere come si comportano le centrali commerciali, ed agire di conseguenza

Vi ringrazio molto per la vostra pazienza
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

BuddaceDCC
PlasticoDigitale
Messaggi: 710
Iscritto il: martedì 9 marzo 2004, 16:17
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Località: Torino
Contatta:

#11 Messaggio da BuddaceDCC »

Credete che sia meglio farlo o no? Le centrali commerciali come si comportano?
Lo fanno anche le commerciali ed è bene farlo..altrimenti se ad esempio ai carrozze illuminate con decoder le luci si spengono quando non capta corrente e non si riaccendono più.
Sistema digitale : TBX-TMWDCC, zDCC, Lokmaus 2 , Select, Arnold

http://www.DCCWorld.com - il sito dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario.

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#12 Messaggio da greenant »

Allora provvederò anche a questo. Grazie
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

Despx
DCCMaster
Messaggi: 1489
Iscritto il: mercoledì 4 febbraio 2004, 19:49
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: KDCCX - KDCCX2
Località: Torino
Contatta:

#13 Messaggio da Despx »

Ciao,
io uso un 16F876 per il KControl, per la centrale KDCC un 16F877 (interfacce RS485, RS232) ed un 16F86 interfacciato con un bus parallelo a 10 bit al 16F877 per generare il segnale dcc. Tutti i pic vanno a 10MHz.
Le informazioni dcc alle rotaie, vanno sempre ripetute ciclicamente altrimenti, in caso di cattiva captazione di corrente di una loco o altro, il decoder si resetta e rimane inerte (la loco x esempio si ferma e non riparte...).
Se vuoi un consiglio, non appoggiarti a bus tipo loconet o xpressnet, perchè sono proprietari. Se non devi per forza usarli, ti consiglio di fare un giro su sourceforge e cercare nei progetti opensource, troverai altri protocolli più performanti e opensource anche dedidcati al dcc!
Una cosa che infatti farò appena pubblicherò il progetto KDCC sarà  quella di dare le specifiche del bus di comunicazione tra i controlli e la centrale per chi vorrà  interfacciarsi con propri progetti.

Ciao
Despx 8)

PS: Anche i signori zDcc dovrebbero pubblicare tali specifiche.... :wink:
Progettista e realizzatore delle centrali KDCCX e KDCCX2, della basetta di conversione K652 e del sistema di illuminazione KIT KLed.

Sito: http://www.despx.it

Si è giovani fino quando si ha voglia di giocare.

Despx
DCCMaster
Messaggi: 1489
Iscritto il: mercoledì 4 febbraio 2004, 19:49
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: KDCCX - KDCCX2
Località: Torino
Contatta:

#14 Messaggio da Despx »

16F84 non 16F86 sorry!

Ciao
Despx 8)
Progettista e realizzatore delle centrali KDCCX e KDCCX2, della basetta di conversione K652 e del sistema di illuminazione KIT KLed.

Sito: http://www.despx.it

Si è giovani fino quando si ha voglia di giocare.

greenant
PlasticoDigitale
Messaggi: 521
Iscritto il: lunedì 2 febbraio 2004, 17:50
Scala: H0
Ho il plastico: Si
La mia centrale digitale.: Analogico
Contatta:

#15 Messaggio da greenant »

Il mio intento iniziale era di creare qualcosa simile al TMWDCC, ma con l'hardware che facesse l'eco di cio che arrivava dal pc. Cosi non serviva scrivere software in rea-time (driver) per il pc, poichè al real time ci pensa il pic

Poi ho cambiato idea ed ho pensato di creare una centrale stand-alone, poichè ho capito che il mio progetto era assurdo e anche perchè ho visto che in giro ce ne sono poche (merg, minidcc, la tua. Io non ne ho viste altre).

L'idea di fondo del pc però rimane. Infatti la centrale non ha ne throttle, ne lcd, ne altri bottoni intrgrati. Solo un led per dire che è accesa, un interruttore per accenderla ed un megapulsante per lo stop di emergenza. Tutti i comandi arrivano via pc o via throttle collegati con dei bus.

Qui ci sono 2 aspetti: pc e bus

Pc: l'idea di usare il pc c'è sempre e mi piace molto, anche se è poco ferromodellistica. Via rs232 parlo con la centralina e le mando i comandi. Adesso devo trovare un protocollo ma non sarà  molto difficile. Volevo emulare la intellibox, ma cmq si vedrà .
Intanto sto scrivendo delle librerie per windows per interfacciare il pc ad una qualsiasi centralina

Bus: l'idea è di utilizzare uno o più bus che vengono utilizzati normalmente, in modo da potere utilizzare la mia centralina anche con prodotti commerciali.
Il loconet mi sembra molto interessante e potente. àˆ proprietario ma questo non significa che io non lo possa utilizzare. Ci sono molti prodotti non commerciali che lo utilizzano con successo (LocoBuffer, LocoIo, ...). Fred è il più importante di questi. Mi piacerebbe appunto potere collegare fred alla mia centralina.

Poi potrei anche implementare lo XpressNet. Si vedrà 

Andare ad utilizzare un bus nuovo od inventarmene uno io, credo che sia la scelta peggiore

Io non ho capito una cosa della tua centrale. Usi 2 processori? Non riesci con uno? Io per ora credo di farcela anche se non sono soddisfatto dei PIC. Volevo provare degli Z8 o M68HC05 ma non sono così diffusi in italia come i PIC
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning

Rispondi