debes hacerlo por fases, primero deberas contar con un A/D ya sea externo o propio del Pic.
y necesitas un trasnformador de tension, para poder trabajar con menos voltaje pero sabiendo la relacion de vueltas que tiene tu transformador para poder hacer los calculos bien en el pic.
lo del cruce por cero, es facil, hay muchas formas de hacerlo, esa señal la atenuas a una senoidal de 5v pico y la rectificas con un diodio, asi solo veras media onda positiva. esa señal ira al A/D. cuando veas la primera caida a 0, ¿como verlo?, cuando veas un valor binario entre 0 y 1. ese sera tu cruce. el otro cruzo es cuando este en 0 y llegue a 1. hay muchas formas de hacerlo.
lo del valor eficaz, hay un circuitito que no tengo a la mano, sacado de un libro couglinh o algo asi que son dos operaciones conectados en cascadas y realimentados, tiene un arreglo de resistencias el cual te da ya el valor efizcas de una onda senoidal. trata buscando en internet que debe haber.. es directo eso..
lo del frecuencimetro, agarras la onda rectificada y la pasas por un comparador o detector de cruce por cero, es un operacional conectado en lazo abierto que actua como comparador, le pones un voltaje de referencia bajito, cercano a 0 o directo a tierra puede ser!!.. convertiras esa señal en cuadrada, y ya depende del PIc pero la logica del frecuencimetro es la misma y depende de cuantos Hz vas a medir, como tu vas a medir frecuencia de la red, no se por alla pero aca es de 60hz y si es diferente alla, no debe ser mucho asi que un frecuencimetro de 1-999hz te sirve.
como hacelro¿?.. debes saber usar interrupciones y utilizar el Timer0 del Pic si es que lo tiene. El timer 0 es un contador / temporizador y lo tienes que configurar como contador y sin Preescaler, es decir, 1:1. por ejemplo, el pic 16f84 tiene un pin Ra4 que tambien es Clock in, ese es el pin del timer0, ahi vas a conectar esa señal cuadrada que generastes. que va a hacer es? el pic va a contar cada pulso que entre ahi en un flanco que tu lo deses conveniente, te recomiendo flanco de subida, eso se configura en un registro del pic, en el 16f84a, sino me equivoco es en el Option_reg. bueno.. que debes hacer para que te mida la frecuencia¿?
la cosa es contar cuantos pulsos ves o te llegan en 1 seg. asi que deberas hacerte una rutina muy exacta de 1segundo, te recomiendo el Picloops.
vamos empesando. como tu señal no va a pasar de 100hz, con el timer0 basta.
entonces no creo que necesites interrupcion, y el codigo es cortico:
clrf timer0 "limpias el timer0"
call ret1s " llamas tu rutina de 1s"
movf timer0,0 "pones a timer0 en el acumulador o W"
movwf temp "respaldas temp0 porque temp0 sigue contando"
y ya, en temp tiene en valor binario tu frecuencia, pero si deseas mostrarlo en lcd o display, necesitas llevarlo a BCD.