Hola a todos, primero agradecer y aplaudir vuestro esfuerzo y trabajo que habéis compartido!!
Me uno a este hilo ya que he montado la misma placa que Pecetero. En mi caso de momento solo tengo la central DCC de Arduino y de momento estoy estudiando como va con la idea de integrarlo todo en una central hecha con Arduino.
He estado revisando el esquema del circuito y no termino de ver el sentido a ese condensador. Hay que tener en cuenta que si la idea era "aplanar" un poco los pulsos del DCC para que la señal sea más estable en la entrada del optoacoplador, hay que tener en cuenta que en los extremos de los diodos, que es donde conectamos el optoacoplador tenemos trenes de pulsos positivos y negativos, vamos como semiciclos positivos y negativos ya que no está rectificada la señal, de esta forma cuando llega un semiciclo "positivo" no parte de 0 sino de la tensión del semiciclo negativo que será aproximadamente los 1,2v que caen en los diodos, por lo que en mi opinión, en este tipo de configuración, el condensador sobra, y aquí unas señales que he medido con el osciloscopio que vienen a confirmar lo que digo:

- Señal medida en la entrada del optoacoplador con condensador

- Señal medida en la entrada del optoacoplador sin condensador
Como se puede apreciar, el condensador "se come" parte de la señal curvándola y perdiendo una parte de la misma, si aumentamos la capacidad esa curva será cada vez más pronunciada hasta que directamente se aplane toda la señal. Es una reactancia capacitiva y se comporta como una resistencia en corriente alterna, que en realidad es lo que estamos aplicando y de ahí que en este sentido creo que es contraproducente que lleve un condensador, salvo quizá por desacople de ruidos en la señal, en cuyo caso lo normal es usar 10nF, pero como lo único que ataca es un diodo IR de un optoacoplador, que haya un poco más o menos de ruido, dudo que le afecte.
Respecto al problema que genera el
cut-out de
RailCom, creo que se puede solucionar de diferentes formas. Quizá la más "sencilla" sea modificando el sketch. En mi opinión casi lo mejor sería quitar la lectura de los puertos de la interrupción y en el
main hacer que lea continuamente los puertos pero solo actualizar la variable global que contiene todos los bits correspondientes a los sensores si ha habido un cambio, y que dicho cambio solo se valide si tras varios muestreos, suficientes para superar el hueco del RailCom se confirma dicho cambio, vamos, como han comentado algo igual que se hace con la supresión de rebotes.
Otra opción un poco más complicada sería el equivalente a disparar justo en el blanco, que sería tomar la muestra solo cuando sabemos que vamos a obtener un resultado correcto, para esto lo podríamos hacer con el flanco de subida de otra interrupción del arduino, de esta forma, nunca vamos a medir en los huecos del RailCom ya que no se dispararía nuestra medición sino que solo se haría cuando la señal polariza en directo el diodo del optoacoplador. Así el código y lectura estarían optimizadas al máximo (creo).
Claro que para hacerlo lo más fino posible, lo ideal sería utilizar otro tipo de optoacoplador, usar optoacopladores con entrada AC, vamos que llevan dos diodos de infrarrojos contrapuestos de tal forma que se activan en ambos ciclos, esta en principio sería la mejor solución ya que medimos la carga siempre, y aquí si se podría poner un condensador a la salida del optoacoplador para mantener el nivel durante un tiempo.
https://www.vishay.com/docs/83641/il755.pdfPor otra parte, permitidme que de una última vuelta de tuerca sobre el circuito ya que con tan baja tensión y poco probable que entren transitorios peligrosos, ¿no sería una buena opción prescindir de los optoacopladores y atacar directamente al arduino con solo unos transistores contrapuestos para ambos semiciclos? los transistores son económicos y ocupan poco espacio, más sin son smd, pudiendo reducir el PCB y costes. Claro que lo mismo es marear mucho el tema para una cosa de hobby que tampoco es que lo vayamos a producir en masa, pero por tener vuestra opinión.
En fin, si puedo ir aportando algo lo haré, estoy un poco oxidado con el tema de la programación, aunque espero ir cogiendo más soltura.
Saludos!