TODOPIC

Simuladores, editores de PCB, etc => Ejemplos para simular => Mensaje iniciado por: PalitroqueZ en 30 de Marzo de 2007, 11:30:36

Título: CD4094 y 16F84A
Publicado por: PalitroqueZ en 30 de Marzo de 2007, 11:30:36
aquí hay un ejemplo usando el convertidor serial - paralelo CD4094 manejado por un 16F84A mediante una función escrita en C:

Código: C
  1. #include <16F84A.h>
  2. #use delay(clock=4000000)
  3.  
  4. #define dato PIN_A0
  5. #define clock PIN_A1
  6. #define strobe PIN_A2
  7.  
  8. void  escribir_byte(int datob);
  9.  
  10. void main(){
  11. int t;
  12.    while(1){
  13.       for(t=0;t<=255;t++){
  14.          escribir_byte(t);
  15.          delay_ms(100);
  16.       }
  17.    }
  18. }
  19.  
  20.  
  21. void  escribir_byte(int datob){
  22. int contador;
  23.    output_low(clock);
  24.    delay_cycles(1);
  25.    output_low(strobe);
  26.    for(contador=0;contador<8;contador++){
  27.       output_bit(dato,(datob & 0x1));
  28.       datob>>=1;
  29.       output_high(clock);
  30.       delay_cycles(1);
  31.       output_low(clock);
  32.    }
  33.    output_high(strobe);
  34.    delay_cycles(1);
  35.    output_low(strobe);
  36. }

simulación en proteus:

(http://img441.imageshack.us/img441/1881/simulacionoq9.jpg)


debo decir que me guié por la explicación de este documento (http://foros.solocodigo.com/index.php?s=4dd68871144297b62e995d09c5842b76&showtopic=16443) cuyo autor es Hugo Erhard

el adjunto con la simulación
Título: Re: CD4094 y 16F84A
Publicado por: mincho en 12 de Julio de 2007, 21:10:03
Gracias Palitroquez, Entonces este seria el complemento del 4017, que sirve para aumentar las entradas...

Un Saludo...
Título: Re: CD4094 y 16F84A
Publicado por: PalitroqueZ en 13 de Julio de 2007, 13:19:10
hola mincho, no estoy seguro que sean similares porque con el 4017 tendrias las salidas activadas secuencialmente, mientras con el 4094 esperarias tener completados los 8 estados para habilitar los pines de salida.



Título: Re: CD4094 y 16F84A
Publicado por: okapi en 31 de Agosto de 2007, 14:44:15
Saludos muchachos,

¿Alguien sabe cómo sería el programa en PicBasic? o ¿Cómo pasarlo de C a PicBasic?
Por favor, cualquier ayudita es bienvenida.
okapi
Título: Re: CD4094 y 16F84A
Publicado por: PalitroqueZ en 01 de Septiembre de 2007, 14:02:57
hola okapi.

Lamento decirte que no conozco el basic para micros  :(, ¿has pasado por el subforo de basic? de repente encuentres algo.

Título: Re: CD4094 y 16F84A
Publicado por: okapi en 01 de Septiembre de 2007, 20:42:56
¡Saludos PalitroqueZ!
Gracias por responder, me parece buena idea, voy a plantear este tema en el foro de PicBasic.
Una cosa más, ¿podrías indicarme cómo adjunto una imagen al plantear el nuevo tema?
Hasta pronto,
okapi
Título: Re: CD4094 y 16F84A
Publicado por: PalitroqueZ en 03 de Septiembre de 2007, 12:27:04
el servidor mas común es http://imageshack.us/

clicas en el botón examinar, seleccionas la imagen y clicas en Host it!

otra forma rápida es con un programita que te ahorra un paso, se llama imageshackert (http://www.4shared.com/file/27965825/5a62869/subir_imagenes.html)

(http://img213.imageshack.us/img213/2968/imageshackertbu0.jpg)


Título: Re: CD4094 y 16F84A
Publicado por: pachopic en 06 de Septiembre de 2007, 21:50:14
Muy interesante, sobre todo para ampliar las salidas de pics pequeños como el 12F675, aqui en la imagen puede verse como se implementa un voltímetro digital con dicho pic y displays de 7 segmentos...el punto decimal lo implemente con leds..adapte un poco el código de PalitroqueZ :D :D,solo tengo una duda.. ¿proteus tiene display de 1x7seg con punto decimal?  :shock: lo he buscado y no lo encuentro..


(http://img294.imageshack.us/img294/1051/clipimage002wr5.gif) (http://imageshack.us)




Código: C
  1. #include <12F675.h>       //Dispositivo a programar
  2. #device adc=10              // numero de bits de conversion A/D 1023 conteos
  3. #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOCPD,NOMCLR,BROWNOUT
  4. #use delay(clock=4000000)//Reloj a 4Mhz
  5. #ROM 0x3ff = {0x3478} //valor registro osccal
  6. #define GP0 PIN_A0       // Pin del canal cero del ADC
  7. #define GP1 PIN_A1       // Pin del canal uno del ADC
  8. #define GP2 PIN_A2       // pin DATA
  9. #define GP3 PIN_A3       // Pin reset pic MCLR (solo entrada)mclr externo desactivado
  10. #define GP4 PIN_A4       // Pin de reloj CLK
  11. #define GP5 PIN_A5       // Pin de strobe
  12. #define dato PIN_A2      //pin de datos Data
  13. #define clock PIN_A4     //pin de reloj o Clk
  14. #define strobe PIN_A5   //pin de strobe transfiere los datos a la salida del 4094    
  15. #ZERO_RAM //pongo memoria Ram a ceros
  16. /***************************Declaración Global de variables*******************/
  17. int8  bcd_dato[5];     // arreglo de 5 elementos para almacenar los digitos bcd
  18. int32 j;                    //Aqui se guarda conversión de las variables a,b,c int8 en Int32
  19. int16 t;                    //variable ADC, de 1023 conteos
  20. int8 a,b,c,d;            //Variables donde se almacenan los dig del display de 7seg  
  21. float const res=5000.0/1023.0; //resolución como const 5v/1023 16bits 5v=5000.0 por fuct BCD
  22. /******************************************************************************
  23.    Array para formar los digitos de 0 a 9 en  Formato  7 segmentos
  24.    para ser mostrados en los display de cátodo común
  25. ******************************************************************************/
  26. byte const DISPLAY[16] =  {0b11111100, //contiene los digitos
  27.                            0b01100000, //0,1,2,3,4,5,6,7,8,9
  28.                            0b11011010, // en formato para ser
  29.                            0b11110010, // mostrados en display de 7segmentos
  30.                            0b01100110,
  31.                            0b10110110,
  32.                            0b10111110,
  33.                            0b11100000,
  34.                            0b11111110,
  35.                            0b11110110,};
  36. /**************************************************************************                          
  37.  
  38.           FUNCION QUE CONVIERTE A 5 DIGITOS DE BINARIO long int A BCD
  39.          
  40. ****************************************************************************/
  41. void bin16_bcd5(int16 n)// el numero a convertir es un entero largo
  42. {
  43. int i;               // indice del arreglo unidades=bcd_dato [0],d=[1],...m=[5]
  44. for(i=0;i<5;i++)// llena el arreglo con los valores uni,dec,cen,mil,diezm
  45.    {
  46.     bcd_dato[i]=n%10;// mediante la operacion modulo se obtiene el, i digito decimal
  47.     n=n/10;      // n dividido 10 para cada i y tomamos su valor entero:
  48.    }                 // por ejemplo  para i=0,  4358 mod 10 =8, luego 4358/10 =435
  49. }                    // para i=2, 435 mod 10=5,435/10=43 luego 43 mod 10=3
  50. /********************************************************************************
  51.  
  52.   Esta función Muestra el valor de j en el registro de desplazamiento 4094
  53.    
  54. *********************************************************************************/
  55.    
  56. void  escribir_byte(int32 datob){//funcion que carga el registro CD4094 con dato j
  57. int contador;               // variable contador como entero cuenta los bits a sacar por el pin
  58.    output_low(clock);    // EL pin clk se pone en bajo antes de enviar bits
  59.   // delay_cycles(1);    // espera 1 ciclo de instrucción?????
  60.    output_low(strobe);  // strobe en bajo
  61.    for(contador=0;contador<32;contador++){ //el dato a sacar serialmente es de 16 bits
  62.       output_bit(dato,(datob & 0x01)); // operación and para sacar bit a bit
  63.       datob>>=1;          //desplazo un bit a la derecha a datob y lo almaceno en dato
  64.       output_high(clock);// saca un pulso de reloj
  65.       delay_cycles(1);    // de un periodo en alto de 1 ciclo de instrucción
  66.       output_low(clock);
  67.    }
  68.    output_high(strobe); // transfiere los datos a las salidas del registro 4094
  69.    delay_cycles(1);      // al terminar de  enviar el dato, enviando
  70.    output_low(strobe);  // un pulso de strobe
  71. }
  72. /********************************************************************************/
  73. void  escribir_byte(int32 datob); //llamo a la funcion antes de entrar en el main
  74.  
  75. /********************************************************************************
  76.                                  Programa Principal
  77. *********************************************************************************/
  78. void main(){
  79. SET_TRIS_A(0b001011);   // Configuro  GP0-GP1 Como Entradas análogas el resto salidas
  80. SETUP_COMPARATOR(NC_NC_NC_NC);//Desactivo comparadores
  81. SETUP_ADC(ADC_CLOCK_INTERNAL);//Reloj para el ADC interno
  82. SETUP_ADC_PORTS(AN0_ANALOG|VSS_VDD);//AN0 entrada análoga, con rango de 0 a Vdd
  83. /**********************************************************************************
  84.  Bucle infinito Lee constantemente el Canales 0 y 1 AN0 AN1 del pic (ADC)
  85. ***********************************************************************************/
  86.    while(true){
  87.           if (input(pin_A3)) //muestra dos lecturas sen el mismo display
  88.           set_adc_channel(0);//Selecciono el canal cero del ADC
  89.           else               //si no
  90.           set_adc_channel(1);//Selecciono el canal uno del ADC
  91.           delay_us(10);      //Espera 10us
  92.           t = read_adc()*res;//lee el ADC y guarda el valor leido en t                  
  93.           bin16_bcd5(t);    //Conversión de la cifra t int16 a BCD
  94.                             //para posicionar el punto decimal
  95.              a=display[bcd_dato[3]]|0x01;
  96.              b=display[bcd_dato[2]];//muestra los datos decodificados  
  97.              c=display[bcd_dato[1]];//en los display de 7segmentos
  98.              d=display[bcd_dato[0]];//en unidades decenas y centenas      
  99.           j= make32(a,b,c,d);//conversion de los 3 bytes int8 de las variablesa,b,c
  100.           escribir_byte(j);//a int32,saco los tres bytes juntos hacia el reg de dezplazamiento
  101.           delay_ms(100);  //Muestreo de la señal cada 100ms
  102.        
  103.    }
  104. }
  105. /*******************fin programa ppal ********************************************/

Aqui esta la simulación:

ARCHIVO PROTEUS  (http://rapidshare.com/files/53930531/VOLTIM_12F675.rar.html)

Saludos
Título: Re: CD4094 y 16F84A
Publicado por: PalitroqueZ en 07 de Septiembre de 2007, 16:17:52
hola pachopic.

fueras usado el que trae 4 displays unidos, esos si tienen el punto.


PD: el código no es mio, lo que hice fué mudarlo al c
Título: Re: CD4094 y 16F84A
Publicado por: Resistencio en 11 de Abril de 2008, 16:27:06
No me sale una simulacion...como "catso" se hace ??? Es increible como se virtualizo la electronica !!! entre lineas veo que son solo programadores, Yo tengo "cayos" y quemaduras varias haciendo electronica "fierro" y no me sale nada con esto de la simulacion...

Los circuitos que pones arriba, estan hechos con un REGISTRO de DESPLAZAMIENTO FIFO, y el 4017 es un contador de decadas, nada que ver una cosa con la otra...

SALUDOS !!! tratare de seguir viendo como anda este "PUTEOS" del "ORTIS"...

Consegui una version portable del 7.1 con SP4...pense que el problema era ese, pero haciendo correr la simulacion del ejemplo anda bien...cuando quiero hacer lo propio con un .HEX para prender un led (que me lo hizo mi sobrinito mientras miraba los dibujitos en la tele...) NO ME ANDA...XD !!! como cuesta adaptarse a estos tiempos !!!
Título: Re: CD4094 y 16F84A
Publicado por: IAO en 11 de Abril de 2008, 21:34:05
Holaaaaa:

Sr. Resistencio:
Te comento que tuve un problema similar en un atlon 3000, corrìa en cualquier màquina con Intel.
Vendì mi atlon me cambiè a un 2 core duo y sorpresa mi problema continuò.
Por ùltimo y para resumirte me dì cuenta que tenìa instalado el winxp en una tabla de particiòn tipo VFAT32 por conveniencia con linux Suse.
La converti a NTFS y nada. Formateo el disco a NTFS desde el iprincipio y solucionè el problema.
Me arrepentì de vender el atlon 3000, pero eso ya es pasado.

Espero te sirva este comentario.
Bye('_').
Título: Re: CD4094 y 16F84A
Publicado por: PalitroqueZ en 12 de Abril de 2008, 12:34:11
...Los circuitos que pones arriba, estan hechos con un REGISTRO de DESPLAZAMIENTO FIFO, y el 4017 es un contador de decadas, nada que ver una cosa con la otra...

...

exacto, creo que el 4017 también se le conoce como contador "jhonson"

Título: Re: CD4094 y 16F84A
Publicado por: pocher en 13 de Abril de 2008, 08:32:50
Creo que el 4017 solo actua como simple contador de décadas (del 0 al 9).

Un contador Jhonson se puede conseguir a partir de un registro de desplazamiento con biestables J-K uniendo la salida negada del último biestable con la entrada J del primer biestable y la salida Q del último con la entrada K del primero.

Yo para ampliar Entradas uso el 74LS195 y para ampliar Salidas el 74LS194.

El equivalente en CMOS para las Salidas es el 4094, sería cuestión de buscar el equivalente CMOS para las Entradas (ha de ser un registro de desplazamiento, no el contador 4017).

Un saludo
Título: Re: CD4094 y 16F84A
Publicado por: pocher en 13 de Abril de 2008, 08:37:06
Aquí un ejemplo de uso de ampliación de Entradas con 74LS165:    http://www.todopic.com.ar/foros/index.php?topic=885.0 (http://www.todopic.com.ar/foros/index.php?topic=885.0)
Título: Re:CD4094 y 16F84A
Publicado por: lu8djr en 19 de Abril de 2016, 18:59:02
 :5] Tengo un dilema. !!! Quiero reemplazar un cd4094 por un 16f84. Tengo un equipo que entraga las señales DATA, CLOCK y STROBE a un registro de desplazamiento. Lo que necesito es reemplazarlo por un Pic para agregar otras funcionalidades.
Estoy trabajando en assembler pero estoy mareado con el codigo y no puedo emular el 4094.
En el pic ingreso por RA2 STROBE, por RA3 DATA y por RA4 CLOCK. En tanto las salidas van led a de RB0 al RB5.
Me pregunto si alguien puede ayudarme y si es correcto que pegue el codigo ASM en el mensaje.
GRACIAS
Título: Re:CD4094 y 16F84A
Publicado por: KILLERJC en 19 de Abril de 2016, 19:05:07
Me pregunto si alguien puede ayudarme y si es correcto que pegue el codigo ASM en el mensaje.

Si, podes seguirlo aca, o incluso podes crear un nuevo post aca ( que es el foro de ASM ):

http://www.todopic.com.ar/foros/index.php?board=3.0

Explica exactamente cual es el problema y pega tu codigo para que sea revisado.

Una pregunta, si o si tiene que ser el 16f84 ? Lo digo por el precio del mismo Y que hay mucho mas baratos y hasta con oscilador interno.
Título: Re:CD4094 y 16F84A
Publicado por: lu8djr en 19 de Abril de 2016, 19:26:49
Bien pego el codigo :
;******************************************************************************
   LIST P=16F84A
   INCLUDE "p16f84a.inc"
 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
#define CARRY STATUS,C ;Define la palabra Carry
;***********************  Definir Etiquetas  **********************************
DATO   equ   0x0c
Cont   equ   0x0d
;*************************** VECTOR DE INCIO **********************************
       org   0   ;Establecer dirección de origen del programa
;********************** PROGRAMA PRINCIPAL **********************************
      bsf      STATUS,RP0  ;Seleccionar el Banco 1 en la Memoria de Datos
      clrf      PORTB
       movlw   b'11111111'
      movwf   PORTA
      Bcf      STATUS,RP0    ;Seleccionar el Banco 2 en la Memoria de Datos
;----------------------------------------------------------------------------      
      movlw   b'001010'   ; Carga en W el valor 10 ( sin tono )
      movwf   DATO      ; Carga en DATO el valor de W
      movwf   PORTB
      clrf      Cont
;----------------------------------------------------------------------------      
INICIO   movlw   d'7'
      subwf   Cont,w
      btfsc           STATUS,C
      clrf      Cont
      btfsc    PORTA,2    ; Lee PORTA bit 2 STROBE si esta en 1 pasa en 0 salta
      call      SALIDA
      btfss    PORTA,4   ; Lee PORTA bit 4 CLOCK si esta en 0 salta
      goto    INICIO
      btfss    PORTA,3   ; Lee PORTA bit 3 DATA si esta en 0 pasa en 1 salta
      goto    BAJO
      goto           ALTO
;----------------------------------------------------------------------------
BAJO    bcf      CARRY
      Rlf      DATO  ;Desplaza a la Izquierda el contenido del Registro DATO
      incf      Cont,f
      goto    INICIO      
;----------------------------------------------------------------------------
ALTO   bsf      CARRY
      Rlf      DATO  ;Desplaza a la Izquierda el contenido del Registro DATO
      incf      Cont,f
      goto    INICIO      
;----------------------------------------------------------------------------      
SALIDA   movf    DATO,w
      movwf   PORTB
      return
;----------------------------------------------------------------------------      
      end
Lo que intento es tomar datos que ingresan serie (DATA,CLOCK y STROBE) originalmente a un 4094 y almacenarlos en el registro DATO del pic y al mismo tiempo ver en los led conectados al PORTB. Realice simulaciones con proteus y con picsimulator y parece funcionar pero en la practica no va. A fin de comparar tengo conectado un 4094 con 6 led y el pic con sus led a fin de compara la salida paralela del 4094 con lo que muestra el pic. La idea es prescindir del 4094 y usar solo el pic para tomar los datos.
Gracias por su tiempo!!!
Título: Re:CD4094 y 16F84A
Publicado por: KILLERJC en 19 de Abril de 2016, 21:58:13
Hoy ya estoy muerto de sueño, pero veo varios problemas, mañana cuando me levante lo veo y te digo lo que encontre.

Una sola cosa que voy a decir ahora, antes que intentes hacer esto. NUNCA pero NUNCA vas a lograr la velocidad del CD4096, este le toma nanosegundos ( 800ns aprox, y 100ns aprox el 74hc595) desde que esta la señal en la entrada hasta que la salida cambia, mientras que el micro le va a tomar varios microsegundos para hacer lo mismo. Eso te va a limitar en la velocidad de entrada "serial" a este simulador de cd4096 realizado con el PIC. Y tambien va a depender en que lo vas a usar y que no compita con tiempos con alguna otra cosa, si nada de esto es preocupacion seguimos para adelante.

Como dije, mañana lo veo bien y te digo que veo mal.
Título: Re:CD4094 y 16F84A
Publicado por: KILLERJC en 20 de Abril de 2016, 07:02:37
El contador ese que tenes, esta demas, lo podrias quitar por que no cumple ninguna funcion, ya que la misma arquitectura del PIC te lo limita a 8 bits.

Uno de los problemas que tenes es que tu condicion de clock no depende del flanco, sino del nivel, entonces eso te lleva a que si el clock esta en 1 tome muchas veces el valor del dato de entrada serial y en la practica vas a ver que si data es 1, y clock es 1, PORTB va a ser 0xFF.
Implementar el flanco seria muy contraproducente en terminos de tiempo. Lo mejor seria usar la interrupcion del RB0, ya que este detecta flanco y en tu programa preguntar por la bandera del mismo ( INTCONT, INTF ) el problema es que el puertoB es tu salida, y de acomodarlo asi luego complicarias un poco mas la salida de datos. Pero no creo que tanto.

Asi que por ahora el fix es por software:

Código: ASM
  1. ;******************************************************************************
  2.  
  3.         LIST P=16F84A
  4.         INCLUDE "p16f84a.inc"
  5.         __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
  6.  
  7. ;***********************  Definir Etiquetas  **********************************
  8.  
  9.         CBLOCK 0x0C
  10.         DATO
  11.         E_ANTERIOR
  12.         ENDC
  13.  
  14. ;*************************** VECTOR DE INCIO **********************************
  15.  
  16.         org     0x00   ;Establecer dirección de origen del programa
  17.         GOTO    CONFIGURACION
  18.         ORG     0x04
  19.         RETURN
  20.  
  21. ;********************** PROGRAMA PRINCIPAL **********************************
  22.  
  23. CONFIGURACION
  24.  
  25.         BANKSEL TRISB                   ; Cambio a donde esta TRISB = Banco 1
  26.         CLRF    TRISB
  27.         movlw   b'11111111'
  28.         movwf   TRISA
  29.         BANKSEL PORTA                   ; Cambio a donde esta PORTA = Banco 0
  30.  
  31.         CLRF    PORTB                   ; Limpio registros de salida
  32.         CLRF    DATO                    ; Limpio el
  33.  
  34.         MOVF    PORTA, W
  35.         MOVWF   E_ANTERIOR              ; Estado anterior del puertoA
  36. ;----------------------------------------------------------------------------      
  37. INICIO
  38.         btfsc   PORTA,2         ; Lee PORTA bit 2 STROBE si esta en 1 pasa en 0 salta
  39.         call    SALIDA
  40.         btfss   PORTA,4         ; Lee PORTA bit 4 CLOCK si esta en 1 salta
  41.         GOTO    EstadoEn0
  42.         BTFSS   E_ANTERIOR, 4   ; Si ahora es 1 y antes era 1 se sale, es decir no hay flanco positivo
  43.         goto    CARGAR          ; Pero si ahora es 1 y antes era 0, no salta = flanco positivo
  44.         GOTO    INICIO
  45. EstadoEn0
  46.         BCF     E_ANTERIOR, 4   ; Pongo en 0 por que estaba en 0 el clock.
  47.         GOTO    INICIO
  48.  
  49. ;----------------------------------------------------------------------------
  50. CARGAR
  51.         BSF     E_ANTERIOR, 4   ; Activo para saber que el clock esta ahora en 1 y poder detectar el flanco
  52.         BCF     CARRY           ; Carry a 0
  53.         BTFSC   PORTA,3         ; Lee PORTA bit 3 DATA si esta en 0 salte el poner a 1 el carry
  54.         BSF     CARRY
  55.         RLF     DATO, F         ; Desplaza a la Izquierda el contenido del Registro DATO
  56.         GOTO    INICIO
  57.  
  58. ;----------------------------------------------------------------------------      
  59. SALIDA  
  60.         movf    DATO, W
  61.         movwf   PORTB
  62.         return
  63. ;----------------------------------------------------------------------------      
  64.       end

Ahora que tenemos el programa hablemos de los tiempos.
Para que sea detectado el clock este debe tener como minimo (me refiero a los peores caso ):

Flanco positivo: 18 ciclos
Flanco negativo: 14 ciclos
Siempre 0 : 14 ciclos
Siempre 1 : 14 ciclos

Es decir tomamos 18 ciclos, es lo que tarda en leer nuevamente el clock.

Dependiendo de la frecuencia de trabajo eso va a dictarte la velocidad maxima de clock.

F_{min} = \frac{F_{osc}}{4 * Ciclos}

Con 4Mhz de oscilador : 55.5Khz clock maximo
Con 8Mhz de oscilador : 111.1Khz clock maximo
Con 10Mhz de oscilador : 138.8Khz clock maximo
Con 20Mhz de oscilador : 277.7Khz clock maximo

Mientras que con el CD4096 tendrias: 3Mhz ( y ni hablar si usamos uno de la linea 74xxx )
Cualquier frecuencia superior a eso, no se asegura el correcto funcionamiento, aunque proximo a esa frecuencia puede llegar a funcionar.
Aun asi espero que se entienda la diferencia entre uno y otro.
Título: Re:CD4094 y 16F84A
Publicado por: lu8djr en 20 de Abril de 2016, 11:53:47
Perfecto!!!
Solo agregue la definición de CARRY. Pero el tema de la velocidad me jugo una mala pasada cambie el pic por uno a 20 Mhz y salio andando sin problemas. Seguire adelante a ver si logro el objetivo. Mil gracias por su tiempo y ganas de enseñar