Il n'y a que le bouton CFG qui est partagé avec l'IT DCC (ou l'ACK si pas de modif)
Donc, pas de soucis pour brancher un bouton sur une broche servo si la broche en question est programmée pour gérer un bouton. À noter que les broches servo sont tirées à 5V via une résistance de 10k. Donc INPUT_PULLUP n'est pas nécessaire.
De manière générale, toute broche non raccordée à un autre circuit de la carte peut être utilisée pour un autre usage que celui prévu. C'est le cas des 8 broches pour les servomoteurs : 6, 7, 8, 9, A0, A1, A2, A3. Il vaut mieux laisser le SPI et l'IT_CAN tranquilles si le 2515 est en place. Si rien n'est branché sur le connecteur DCC, la broche IT_DCC peut être également utilisée.
La carte est prévue pour supporter tous les modes simultanément : CAN + DCC en même temps.
Ceci dit, les AVR 8 bits ne supportant pas les interruption nichées, c'est à dire qu'une interruption ne peut pas en interrompre une autre de plus faible priorité, plus il y a d'interruptions en route et plus l'IT DCC risque d'être imprécise. Par défaut il y a l'interruption du TIMER 0 qui sert à compter le temps (c'est là dessus que se basent millis(), micros(), delay(), ...). Il y a également la bibliothèque Servo qui utilise l'interruption du TIMER 1. Certe l'IT DCC est la plus prioritaire mais ça ne joue qu'en cas de concurrence avec plusieurs IRQ présentes simultanément. Si une IT de faible priorité est en court d'exécution l'IT DCC sera prise en compte avec du retard.
Je vois les choses comme ça :
1) on ne peut pas se passer du comptage du temps car le DCC l'utilise
2) on ne peut pas se passer de la bibliothèque Servo
3) on peut se passer de l'IT CAN si la carte est utilisée en DCC
Donc selon le mode DCC ou CAN on a
Mode DCC : pas d'IT CAN, IT DCC. Si rétrosignalisation, on a seulement de l'émission de messages CAN à un rythme assez faible (10 fois par seconde ?)
Mode CAN : pas d'IT DCC, IT CAN
Donc quoiqu'il en soit 3 IT actives
Les IT du TIMER 0 et du TIMER 1 sont assez courtes. Celle du CAN est très courte.
Celle du DCC me semble courte également.
Concernant le fonctionnement des servos qui, alors que la consigne est censée ne pas changer, bougent faiblement. Comme les interruptions ne sont pas nichée et qu'on a une IT externe de plus forte priorité (IT DCC > IT CAN > IT TIMER 1 > IT TIMER 0) la synthèse du signal de commande des servos subit un peu de gigue. Donc au lieu d'avoir un beau signal carré de x µs de large, on a un signal qui varie de x µs à x µs + durée de l'ISR externe +durée de l'ISR TIMER 0.
Le pire scénario est :
à t0, l'IT du TIMER 0 survient
à t0+dt, l'IT du TIMER 1 et l'IT externe surviennent (dt € [6,25ns, durée d'exécution de l'ISR du TIMER0])
Lorsque l'IT du TIMER 0 termine, on continue du l'IT externe et lorsque cette dernière termine, l'IT du TIMER 1 s'exécute.
La solution est d'arrêter de générer ce signal quand le servo a atteint sa position en appelant detach sur l'objet servo. C'est pris en charge automatiquement dans SlowMotionServo.