GEIGER PIC

"tu que entiendes de pics, podrias hacer un contador digital para el geiger", era lo que me faltaba para hacer un proyecto que se me habia pasado por la cabeza hace tiempo.

Ya de poner un pic en geiger era una pena no usarlo tambien para:

1º CONTROLAR EL TRAFO. Evita oscilador, y posible utilidad en estudios de respuesta/AT.

2º CONTROLAR EL ALTAVOZ, multiples soniditos, alarmas

3º DAR ALARMAS, de muchas cuentas, pila baja, y trafo saturado.

4º ALMACENAR DATOS.

5º VOLCARLOS POR RS232.

6º UN DAC, Y UN ADC.

7º DISEÑO "MODULAR".

 

hacer esto no es como hacer una sopa de sobre, hay que tener una cierta idea de electronica y pic para interpretar mis explicaciones y esquemas.

 

EL HARD.

1º se eligio una caja metalica minima para contenerlo todo. 125*60*85

2º se eligio un lcd de 16x2 como pantalla, mas util y menos hilos que con leds.

3º 4 teclas para navegar.

4º piezo+ NBC + interuptor + toma 12v + RS232 + salida voltios.

5º pilas, al final me decidi por 12v por ser los que tiene el coche.

6º la PCB.

PCB

Tuve la suerte de encontrar un trafo adecuado para esto en unas chatarrillas que tenia como tesoro por gentileza del profe, aunque necesita gran frecuencia, en el limite del pic.

La referencia de AT se toma del 1º condensador de AT, parece que deberia ser del 2º, pero los dos con la R forman una red de retardo, y produciria oscilaciones, el pic mediante el trafo intenta mantener lo mejor que pueda el 1º C a la tension requerida, la R y el 2ºC es para alisar.

El transis del trafo puse un mos BS170, del que soy admirador, rapido y fuerte, probe BCs pero parecen ir peor. 60vmax dice el pdf, pero esta aguantando picos de 75 o mas.

Los pulsos del primario se aprovechan para principio del secundario, ademas se rectifican y van a un C por si se necesitan, y a un divisor que ademas de drenar va a un adc del pic por si se quiere controlar la AT según los pulsos del primario.

Me parece un éxito dejar una parte para pinchar una plaquita conteniendo la parte del C y R del geiger, a esta plaquita llegan pines de: masa, ADC, contador, +10,y-10v (proceden del max232, util para operacional), DAC, 5v, pila, libre y AT.

El pic tiene un pin que se puede programar como oscilador de cuadrada (PWM), regulando el ciclo y tiempo arriba, alisando la salida con redes RC se obtiene la DAC. El PWM se puede variar de 0 a 1023, por lo que necesita dos bytes.

La idea es pinchar otra plaquita distinta según el caso, por ejemplo si el geiger necesite preamplificacion se pondria en ella, o incluso hacer un barrido de la altura de los picos de detector alfa o escintilador para hacer un espectro, aunque el profe asegura que se hace de otra manera yo imagino dos:

- 1º: metodo del liston, se va subiendo el liston por pasos y se graba cuantos pasan en cada paso, despues se haya diferencia de cada paso de liston con el anterior, y da la cantidad que saltan cada altura. Esto se haria con el DAC, es lento, y hay el problema de la definicion (clicks maximos=255, otros 256 pasos de liston= 1 click/paso).

- 2º metodo de la lectura directa, el pico se amplia y llena condensador, periodicamente se lee voltios, según esto se incrementa en tabla, Tras lectura un pulso del puerto vacia el condensador. Seria mas rapido, Problemas: la interrupcion va a 33khz, como hay que atender tambien al trafo, los pulsos no deben llegar a mas de 16khz. Si llegan varios casi seguidos falsea el resultado (igual que el metodo del liston).

Otras plaquitas podrian registrar terremotos, ruidos, o clima. Un frecuencimetro esta a tiro de piedra.

La lectura de la AT por el pic para controlar el trafo conviene una preamplificacion, problemas de impedancias. El divisor de tension tambien es pinchable, por ejemplo ahora mismo tengo 4 zeneres de 75v y dos R de 10M, y al final R de 100K, esto hace que salte de 0v a casi 400, y varie hasta los 1200, con esto gano precision en la AT, a costa de no ser lineal la indicacion, pero de querer cambiar no ha mas que preparar otro peine para sustituir, como otro que tengo para detectores alfa, que tiene zener de 110v y R de 10M, con esto barro de 100v a 400v.

Tambien posible zener entre divisor y base del transis.

Si se puentean las Rs (no todas por seguridad) del divisor con un C, se solapan las variaciones a la AT leida, esto nos convien.

En casi todos los generadores de AT regulados, como el propuesto por el profe en su geiger, usan una frecuencia fija y se modula el ancho del pulso. Aquí no, el pic da un golpe al trafo, todos iguales, cuando alcanza la requerida no hay golpe, para colmo se producen trenes de golpes, esto produce un tremendo rizado, que pueden llegar a solaparse con los clicks de geiger o escintilador, el puente propuesto reduce algo el problema.

Deje pensada la opcion de cambio de polaridad, que puede ser util en fotomultis, pero es algo rollento el cambio: 1º como los picos del trafo son positivos hay que invertir o bien el primario o el secundario. 2º girar el diodo, 3º ahora se aprovecha el pulso del primario, en negativo estorba, hay que tomar desde masa. 4º el final del divisor no puede seguir a masa hay que darle +5v. 5º nada de zener antes de la base del transis, 6º por ultimo el actual programa funcionaria al reves, por soft habria que invertir la lectura.

Un moñazo que deje sin desarrollar.

Tenia pensado otra placa de alimentacion, que contendria baterias y un carga pilas y el estabilizador para entregar pila, 5v, y masa, pero ya me fallaron las fuerzas, y puse un regulador donde pude, que fue al lado del enchufe de la plaquita, esto convendria corregirlo, pienso usar 12v, =8 pilas de 1v5. En version final se dejo pistas para soldar el regulador en plan smd.

El LCD resulto no funcionar con 5v, necesita un pelin mas, por lo que todo funciona con 5v6, cuestion de poner un diodo en la masa del regulador. El trafo y el preampli del divisor van a pila directa.

El lcd se puede usar version 4 y 8 hilos en bus de datos, aquí se usan 4, el bus de control tiene 3 hilos, pero como uno es para leerlo, y no lo leo, a ultima hora sobra este pin del pic. La lectura principal consistia en mirar si esta listo para recibir, pero comprobe que dandole tiempo suficiente no se necesita. Parece que tambien hay que polarizar el display, yo use una r de 1k entre el terminal 1 (masa) y 3, hasta que un dia se puso muy oscuro y puse otra msd entre 2(+) y 3, ya no puedo ver su valor, probar antes de soldar.

4 teclas, ^ sube, >selecion/grabar/acelera, < retorno en menu, v baja.

Se dejo pensado un multiplicador de tension por condensadores aprovechando el reloj del max232 pero no lo use, descartado en version final.

El conector RS232 se debe puentear los pins 4, 6, y 8, el 5 va a masa, el 2 va al 14 del max232, es el de trasmision, y el 3 va al 13, es el receptor.

Para volcar datos el pc debe de enviar un byte, el que sea, es indiferente, el geiger entrega el 1º de la tabla e incrementa puntero, y asi sucesivamente. Si la R de alimentacion del MAX232 se pone pinchable se puede extraer facil para evitar consumo del max232.

A 12v y en vacio esto es lo que traga el bicho sin conectar el MAX232: 27ma a 0v AT, y 43ma a 1k2v en este caso la ocupacion del trafo era del 55/256, comprobando los 1k2v con la sonda con 10M en serie (carga de 10M), el trafo trabaja al 110/256. El MAX consume unos 10mA adicionales.

 

 

 

 

EL PROGRAMA

Esta condicionado por las muchas limitaciones del pic 16f876: escasez de ram y muy paginada, paginacion de la memo de programa, y sobre todo 8 niveles de pila de stack, lo que obligo a incomodos y feos gotos y repeticiones en vez de call/return, esto se vio bien en la gestion de menus, de todas formas se logro, todos los menus y seleccionados estan a "nivel del suelo", la rutina que mas nivel consume es la del lcd, que junto con las 2 de la interrupcion da un pico de 7 niveles, creo que sobra uno.

Hay un problema irresoluble: mientras graba en eprom se queda tonto un rato, aunque los perifericos siguen funcionando (timer, contaclicks, ADC, y DAC), el trafo se controla por soft, por lo que se para dos veces en cada final de t. integracion (+ otra cada 256), esto da un pico de bajada de algun voltio en la AT, (paseos por el menu tambien microcuelges).

Me parecio elegante volver por donde fuimos en el menu, para ello hubo que escribir en la eprom (byte "opcion elegida" de tablas)

Consta de dos parte, la rutina de interrupcion y el resto.

La interrupcion lo es solo por un temporizador, (el TMR1), uso un xtal de 16Mhz, que da 4Mint./s, llama cada 120 ciclos, dando unos 33khz en la interrupcion, mas rapida se puede trabucar y el ADC los necesita.

La interrupcion hace:

1º guarda registros.

2º CLICK, y asociados (divisores, contadores, da la voz).

3º ¿fin de tiempo de integracion?. Si si, cierra ejercicio.

4º prepara cuenta atras para la siguiente interrupcion.

5º actualiza el reloj.

6º comprueba que no trabuco (ejem. escribir eprom), si tal va a 4º.

7º gestiona el trafo. Lo enciende si procede

8º o mira la pila y el ADC y no el trafo una vez por segundo.

9º decrementa una variable para retardos.

10º mueve altavoz.

11º restaura registros. apaga trafo, y return.

Hay tambien una serie de pseudo interrupciones, cosillas que han de hacerse aunque sin prisas, estas pseudoint. son llamadas desde la rutina de teclas, porque cuando espera tecla es que esta ocioso, y suele estar alli el programa.

Son:

1º final de t de integracion, resetea/actualiza variables implicadas, no toca remanente en divisores. Si procede guarda en eprom, saca cuentas por LCD, sonidito, si esta en modo barriendo AT barre, iden DAC, si modo espectro espectra.

2º cada segundo: ¿alarma de pila?, ¿alarma trafo?, actualiza reloj, ajuste fino del reloj,

3º cada 1/200’’: ¿alarma muchos clicks?, ¿RS232?.

 

 

El resto del programa es:

1º main: raiz de todo, inicializa lo inicializable, desvia al "menu", #includes.

2º menu: como mejor el LCD con menus, en vez de hacer muchos programas de menu hice uno solo, y cambio las parrafadas y las ordenes asociadas, esto ultimo esta en las tablas.

Aqui esta tambien la rutina del teclado, con 4 opciones, "tecla": lee ya, "tecla nueva": espera que no se pulse nada y despues devuelve la pulsada, "tecla repeticion":, como la nueva pero si es la misma no necesita paso por cero, y ademas el retardo disminuye paulatino. "tecla repeticion con cero":, lo mismo pero tomando no tecla como tecla.

Tambien rutina de retardo,

Tambien rutinas de sonidillos.

3º "conversores" de hexa a decimal, y ascii, y hora.

4º "LCD", rutinillas del lcd.

5º "EPROM", rutinillas de escritura en la eprom.

6º "GEIGER", respuesta a los menus del LCD. El otro meollo del asunto.

7º "TABLAS 0,,,", aquí las parrafadas de los menus y sus aciones asociadas, todas con mismo patron: byte de opciones maximas, byte de opcion seleccionada (escribible), 2 bytes con direccion de la tabla de la que depende (de retorno), 14 pares de bytes, cada par direccion de la rutina asociada. 14(max)*16 bytes de texto para parrafadas menu. En total 14 parrafos maximos para un mismo (sub)menu, no necesario llenar los 14, en este caso la tabla ocupa 1/4kb. Se pueden meter varios menus cortos en la misma pagina. Todas las tablas han de estar en el bloque 1, (de 800h a fffh), cada tabla ha de estar dentro de una pagina de 1/4K por problemas de paginacion.

 

 

 

 

USO DEL MENU

Al encender deberia poner "GEIGER", es la raiz del menu, se oiran ruiditos y al rato 3 ceros abajo, arranca en geiger sin memorizar. Con las variables que esten grabadas.

GEIGER

>RUN

>>RUN OFF

>>RUN SIN MEMO

>>RUN CON MEMO

>>RUN BORRA MEMO

>>RUN BARRE AT

>>RUN BARRE DAC

>>RUN ESPECTRO

>TIEMPOS

>>T INTEGRA ( ">"= graba)

>>PROMEDIO (graba siempre)

>>>1

>>>1/2

>>>1/4

>>>dif.

>>CLICK / ( ">"= graba)

>>PRESCALE / ( ">"= graba)

>>> 1,2,4,8,16,32,64,128.

>VOLTIOS

>>AT +/->>>0,,,254 ( ">"= graba)

>>DAC>>>0,,,1023 ( ">"= graba)

>>adc

>>pila

>>trafo

>DUMP

>>clicks tot.

>>segundos tot.

>>dump memo.

>VOZ

>>VOZ ON

>>VOZ 1/2

>>VOZ OFF

>>VOZ TODO

>>VOZ SOLO ALAR

>>VOZ DEF. ALAR ( ">"= graba)

>>VOZ GRABA ( ">"= graba)

>>VOZ ENCLABA

COSILLAS:

* en el paso al 1º nivel de menu se ve un flisflas en el lcd, es un reseteo, muy util en pruebas, porque la metir (tocar) alta tension da un pico que loquea al lcd, con reset recupera cordura, si loquea retroceder generoso menus y subir uno.

* se puede navegar incluso funcionando, lo que puede ser malo para las medidas, por ejemplo variar los divisores o tiempos. Malo tambien por microcuelges. Malo por distraer las pseudointerrupciones.

* "run reset memo" para el geiger, llena los 4Kb de memo libre con 0xff, resetea el puntero de memo,.

* "run sin memo" echa a andar el geiger con la AT y PWM (=DAC, =liston) actual y sin memorizar los datos.

* "run con memo" igual pero guardando datos.

* en toda operación con almacenado de datos, aparece un numerito, que el maquinista debe recordar para despues distinguir la sesion.

* en toda operación con almacenado de datos, se inicia la memoria con cabecera de parametros, que contiene:

-sincronismo "1,2,3,4",

-numero de sesion, (para despues distinguir).

-codigo de lo que hace, (2=geiger con memo, 3=barre AT, 4=barre DAC [liston], 5=espectro)

-segundos integracion h,

-iden l (nada de minutos),

-presecaler/,

-click/,

- promedio

-AT requerida.

-DAC H actual

-DAC L actual

-lectura del ADC con DAC actual

-lectura del ADC con el DAC a 0

-lectura del ADC con el DAC a tope (utiles como referencia de cómo tenemos los potenciometros)

-4 x libres,

-sincronismo de fin de cabezera "4,3,2,1".

En total 25 bytes, despues los click ya divididos, sin promediar. Escribe al final de cada t de integracion. La cosa termina o bien por soft, o por orden de tecla, o por apagado, de seguir escribiendo despues lo hace a continuacion de lo escrito. Acabados los 4kb empieza desde el principio machacando lo que hay, ojo con esto.

* "run barre AT", graba como con memo, pero hace un barrido de la AT, desde 0 a 254, despues se para.

* "run barre DAC", graba como con memo, pero hace un barrido de la DAC, desde 0 a 1023, en saltos de 1, 2, o 4 según el "promedio", despues se para.

*"run espectro" hace un barrido de DAC, que hace de liston para filtrar los pulsos, muestra el total de clicks en anterior periodo de integracion menos los de esta, mas 100 para evitar feos negativos. Para evitar el problema expuesto arriba usa el contador total de clicks de 16 bits , por lo que no se pueden mostrar en "dump clicks totales". El resultado es de 8 bits, por lo que si no se eligen bien los tiempos y divisores puede confundirse, por ejemplo 0x0012 con 0x0212.

* "t integracion" = tiempo sumando clicks, selecionable desde 1’’ a 16h. Teclas ^/v incremen/decre. Si ademas pulsamos ‘>’ acelera. Pulsando solo ‘>’ graba seleccion.

* "click divide" es para dividir en caso de saturacion del contador, se graba con ‘>’ .

* "preescaler divide", lo mismo con el preescaler del hard.

* "promedio" puede ser: en modos "geiger sin/con memo" significa: 1: en este caso se ve el ultimo conteo, ½: hace una media con el penultimo, ¼ numerito =actual/4 + ¾ anterior, o dif: =anterior-actual, al promediar con anteriores se pierde 1 o 2 bites, por lo que el numerito mostrado es menor al real. Tambien se usa en barrido de DAC y espectro, en estos casos selecciona 1024, 512, o 256 cortes.

* "voltios AT" seleccion la AT, ‘>’ = graba en eprom la AT, para nuevo encendido o tras barre AT.

* puede haber dudas entre grabar con ‘>’ o no, la idea y el problema es que es muy comodo pulsar ^/v para subir o bajar la AT, tiempos, o el DAC, pero seria muy incomodo tener que pulsar ‘>’ a cada incremento, por lo que en estos casos el geiger y demas funcionan con estas variables, pero una vez que se reenciende o termina barridos/espectro toman las grabadas en eprom con ‘>’.

* "voltios DAC" es el usado en el DAC, manda la visualizada, ‘>’ la graba.

*"adc" visualiza el ADC, actualiza cada segundo. Util con la plaquita espectrometro.

* "pila" informa de su nivel. Tope =255. Por soft salta la alarma de pila baja a 0x85, unos 8v.

* "trafo" informa de su uso, Tope =255 (=saturado).

*"clicks totales", pues eso, desde la ultima orden de funcionar, maximo en LCD = FFFFh. Pensado para impacientes en t. de integracion largos. No funciona en modo espectro, porque se usa este contador de 16bits para la cuenta pasada.

* "segundos totales", tiempo ultimo funcionando, las horas se resetean en 96 = 4 dias, y no a las 100.

* "dump eprom" visualiza eprom, ‘>’ acelera paseo.

* "voz on, ½ , off", eso.

* "voz todo/solo alarma", para dormir sin clicks pero avisando de alarmas.

* "voz alarma" fija los clicks para saltar alarma. ‘>’ graba.

* "voz graba", guarda en eprom la selección anterior.

* "voz enclava", si salta la alarma suena mientras se mantiene, pero podemos estar ausentes, dejando funcionando aquí mantiene la alarma aunque haya pasado, acustica si esta habilitado el altavoz, en todo caso aparece un ‘*’ en LCD.

MODO ESPECTROMETRO.

Espero se pueda sacar el espectro de gamas mediante fotomulti o de alfas con detector. No solo dan pulsos, sino que el pico es proporcional a la energia incidente. Para esto:

Hay que disponer de estos detectores, y dejar el invento fijo, porque le lleva su tiempo porque se usa el metodo del liston, y si andamos moviendo falseamos.

Hice una plaquita para el espectrometro, que por supuesto tambien funciona como geiger. La idea es que los pulsos se dividen en un divisor de condensadores, una RC poda el pico, que interfiere con una continua, si el pico es capaz de bajar este voltaje tanto que le roba la polarizacion de un transistor, este dara un pulso. La continua se controla por la DAC (pin PWM del pic), para mejor aprovechamiento del recorrido he puesto 3 ajustables, regulan la atenuacion de los impulsos del detector, otra da una polarizacion minima (ajuste de cero), y la 3ª ajusta la influencia del DAC (ajuste de maximo).

Supongamos que el gieger da pulso de 4v una vez recortado y dividido, y que el escintilador de 2 a 3v7 según isotopo, y que el de neutrones da 1v. El DAC puede variar de 0 a 5v, y entonces en el caso de escintilador solo interesa una pequeña zona de ese recorrido, un desperdicio, para aprobechar todo el recorrido del DAC estan los potenciometros de minimo y maximo, es una especie de lupa.

MAYO 06

Como tanto ajuste es un rollo, como guia se puede usar el ADC. (que se lee como "adc" en el menu de voltios.

Vamos a ver como ajustar el asunto:

1º como ando perdido quiero darle mucha inportancia al DAC, osea, sin lupa, "a vista de pajaro". ¿Cómo hacer que el DAC este mas cerca del ADC?, me fijo en el esquema, hay que poner el DAC a 0 a traves del menu, y nos vamos al menu que nos da el ADC, movemos el potenciometro de liston maximo buscando la menor lectura, ahora se potenciometro es como si no existiese. Y ahora vamos a por el de minimo, ponemos el DAC a tope, y mientras miramos el ADC movemos hasta la maxima lectura.

2º ahora los potenciometros es como si no estubiesen, ponemos el detector con la muestra, con una AT apropiada, y hacemos un barrido del liston (=DAC). Estamos atentos al margen en que funciona, miramos en la ADC el numerito de esos margenes y los apuntamos.

3º ahora que sabemos los margenes vamos con "la lupa". Ponemos el DAC a 0, y ajustamos el potenciometro minimo hasta casi el numerito minimo leyendo el ADC. Despues DAC a tope, ajustar pot max hasta algo mas numerito max.

La antigua plaquita aunque iba bien era francamente mejorable, a parte de aligerar el esquema, la principal mejora consistio en meterle un estabilizador de AT. Como la AT se regula por soft mete mucho ruido, segun los casos hasta 10vpp de rizado, esto invalida el invento para espectros con escintiladores, porque el aparato confunde los clicks con el ruido de la AT. con el estabilizador se reduce a menos de 0.5vpp en el peor de los casos (depende de la AT requerida), y lo que es mejor los picos son muy lentos, de unos 1ms de ancho, y asi no mueven el contador.

Tambien el liston puede producir ruido, ahora se aliso un poco mas.

Ahora, haciendo barridos del liston no hay zonas de cuentas fantasmas.

5ms/div, abajo entrada del estabilizador 10v/div, arriba ya establilizado, con 10M de carga, izquierda AT= 300v 1v/div salida, derecha AT=1Kv 0,1v/div. Sin carga el alisado es muchisimo mejor.

A 100Hz:

con onda de sierra necesito 5vpp, con el liston bien ajustado,el liston es critico, sacado de cierta cifra concreta las cuentas caen y obliga a subir voltios de la sierra. estos 5vpp es exagerado comparado con otras frecuencias, el problema debe de estar en que la sierra baja en 1ms, que es mucho, cambiando a onda cuadrada no necesita ni 1vpp.

A 10Khz:

a partir de aqui hay que meter divisores. con onda triangular de sierra, que baja en 1us, solo necesita 0.5vpp a liston ajustado.

A 100Khz:

con onda triangular, baja en 1us, necesita 2vpp con el liston ajustado. pasan cosillas raras con onda cuadrada; parece necesitar algo mas de voltios y bajar algo el liston dependiendo si son picos para arriba o para abajo.

A TOPE:

con el preescaler a 126, y un click/ 100, sobrepasa un poco el Mhz, no sin problemas: , hay que subierlo un par de puntos el liston con respecto al critico a 100Khz; el "duty" de la onda ha de estar a 50%; necesita onda de 15vpp; onda cuadrada, porque la triangular requiere mas voltios.

 

Con el programa en C se vuelcan los datos, con Ecxel se pueden traducir a grafico, es algo laborioso, hay que encontrar las cabeceras. Suministro 3 programas en c. TODOS PARA PUERTO COM1.

"rs_eco.c" es un test para el cable, y hay que hacer un conector rs232 para eco, que se explica en el propio programa,

"gp_rs232.c" simplemente vuelca en c: el contenido de la memoria, con el nombre "gpdat.dat". al encender el PC parece que se cuelan bytes por la rs232, y como el pic no es adivino piensa que le estan pidiendo datos, por lo que cuando se los pedimos su puntero ya no apunta a la 1ª posicion, para evitar esto es mejor apagar y encender el geigerpic antes del volcado.

"gp_rs_b.c" es una mejora del anterior, mientras lee busca las cabeceras, si casualmente hay una secuencia "1234" la tomara como sincronismo de cabecera equivocandose, conviene repasar despues. Tambien ordena las sesiones en columnas, pero por problemas de memoria cada sesion no deberia superar los 2k de datos, y no debe haber mas de 15 sesiones, si hay mas las desprecia, al encontrar cabecera salta de columna, por lo que se limita el tamaño de la antigua, pero en la ultima sesion no puede distinguir los datos del valor tras formatear la memoria, por lo que aparecen 0xFF (=255), creyendo el programa que son datos y alargando la ultima columna, que como forman un rectangulo aumentan todas, para evitar esto se puede ordenar "geiger con memoria" hasta superar la sesion 15, asi, aunque de error dara las sesiones tabuladas bastante limpias. Conviene apagar y encender la unidad y leer cuando no hace nada (en "geiger off").

 

2 ejemplos de barrido de AT, y 8 de barridos de DAC.

 

fotolitos y esquemas. Para IVEX.

programa para el pic, en asm.

Programa para el PC, en c.

Dos intentos de ejemplo en EXCEL.

www.ic-prog.com de aquí se baja uno el programa programador.

www.microchip.com datos sobre el pic16f876, y el mplab, para copilar y simular el programa del pic.