El método de la resistencia tiene una muy pequeña desventaja... no sé mucho sobre histéresis, pero hay un retraso como de 64us entre el cruce de cero y la detección del PIC de éste.
En la nota AN236 de Microchip dice:
------------
In this application, RB0 is configured for external interrupts,
and the input buffer is a Schmitt trigger. This
makes the input threshold 0.8 VDD = 4V on a rising
edge and 0.2 VDD = 1V on a falling edge.
Upon each interrupt, the Interrupt Edge Select bit within
the OPTION_REG register is toggled, so that an interrupt
occurs on every zero-crossing. Using the following
equation, it is possible to calculate when the pin state
will change relative to the zero-crossing:
V = Vpk*sin(2*pi*f*t), where Vpk = 165Vand f = 60 Hz
On a rising edge, RB0 will go high about 64 us after the
zero-crossing, and on a falling edge, it will go low about
16 us before the zero-crossing.
More information on interfacing PICmicro MCUs to AC
power lines can be found in the application note
AN521, “Interfacing to AC Power Lines”, which is
available for download from the Microchip web site.
------------
No sé que tanto te afecten esos 64us.
Cuando yo optoacoplé una salida con un 4N28 (en otra aplicación), el tiempo de subida o bajada del opto era de 4us, lo cual me destruía una señal de 120kHz.
Si piensas aplicar el CNY17 y necesitas mucha precisión en tu medición sería bueno que revisaras sus tiempos de subida y bajada.
Ese circuito lo he usado para montar portadoras de 120kHz a corriente alterna y para hacer un dimmer. Para el caso de la de 120kHz la precisión que yo buscaba era menor a 300us, y en el dimmer, no necesitaba tanta precisión.
Ah y si te preocupa la protección del PIC pordrías ponerle un varistor para los picos de voltaje.