Sim, a conversão em ambas as direções é necessária se você desejar uma borda única garantida cada vez que a chave mudar de estado.
Felizmente, você não precisa de nenhum hardware adicional para rebater se o switch estiver conectado a um microcontrolador. Se o micro possui um pullup interno, o que muitos fazem, você não precisa de nada mais externamente do que a troca entre o micro pin e o terra.
Acho 50 ms é um bom tempo de debounce. A maioria dos switches salta por muito menos que isso, mas alguns podem demorar quase tanto. Porém, 50 ms ainda parecerão instantâneos para um usuário humano; portanto, você também pode ser extremamente confiável. A única diferença é o número com o qual você conta no firmware, portanto, não há nenhum custo extra. Geralmente, eu tenho uma interrupção periódica de 1 ms por outros motivos, portanto, se o comutador estiver no mesmo estado 50 vezes seguidas nessa interrupção, você declara que ele foi devolvido ao novo estado.
Detalhes sobre a lógica de debounce em resposta ao comentário:
Geralmente, você terá um bit global que indica o estado oficial de devolução do comutador. É isso que qualquer lógica que precisa saber de que maneira o switch está configurado usa. O único estado adicional necessário é um contador, geralmente um byte, na rotina de interrupção. Digamos que a interrupção seja a cada 1 ms e o tempo de debounce seja 50 ms. Para cada interrupção:
Se o estado instanâneo corresponder ao estado devolvido:
Redefinir contador para 50
Feito
Se o estado instantâneo for diferente do estado de devolução:
Contador de diminuição
Se o contador atingir 0:
Declare o novo estado debitado
Redefinir contador para 50
Feito