Problemas al decodificar HT12E con microcontrolador.

Yo ya comencé a fusionar los códigos, en cuanto termine lo subo para que lo veas y puedes emplearlo si quieres.

 
Última edición:
Bueno, luego de pedalear un buen rato, acá esta listo el código "injerto" producto de la fusión de ambos códigos. En el archivo RAR incluyo el proyecto en CCS, la simulacion en Proteus 7.9, el esquema usado, un proyecto que simula un control remoto con 2 botones, el boton 1 posee un código de 12 bits y el botón 2 un código de 24 bits, para poder probar la simulación. De igual forma está probado en forma física con varios controles y con todos funcionó. El proyecto está realizado con un PIC 16F684, y primero hay que grabar el código del control remoto en la memoria eeprom, para ello hay que presionar el pulsador y soltar, el led verde se apagará y en ese momento hay que presionar el boton del control que queremos grabar, si lo tomo de forma correcta, el led verde parpadeará 10 veces. Para grabar otro código hay que volver a repetir los pasos anterirores, en total se puede grabar un total de 80 códigos en memoria. En el caso de querer borrar la memoria (borra toda la memoria), se debe presionar el pulsador y dejar apretado hasta que el led se vuelva a encender, en ese momento soltar el pulsador, al terminar de borrarse la memoria el led parpadeará 5 veces. Una vez grabado al menos 1 código en memoria, al recibise de forma correcta dicho código se activará el led rojo, si se vuelve a recibir nuevamente el mismo código se apagará, repitiendose así el ciclo apagado-prendido. Espero les resulte útil.
 

Adjuntos

  • Decodificador universal.rar
    730 KB · Visitas: 67
Última edición:
Fijate y me avisas que tal te fue con el código. Lo que me ha pasado a veces luego de dejarlo un rato prendido es que deja de tomarme los controles como si por algún motivo las interrupciones por cambio de estado se detuvieran, lo desenchufo y vuelvo a conectar la alimentación y sale andando. Eso habría que chusmearlo con mas detalle, te lo encargo a ti si te parece, asi vamos a medias con el codigo [emoji6]. Si ves conveniente modificarlo haslo y me comentas. [emoji1]

 
Encantadísimo! No obstante, primero debería darme a la tarea de conseguir los otros controles, ya que no tengo más que 2 de ellos, uno basado en el HT12E y el otro en el HT6P20.
 
Bien. Aunque Proteus emula perfectamente ambos formatos. Fue de hecho gracias a Proteus que pude lograr hacerlo funcionar ya que no consto de oscilador, ni analizador lógico... lo único que tengo para medir es un multímetro por ahora.
 
Si, yo tambien lo hice andar con ayuda de Proteus, aun que debo decirte que al comienzo en Proteus me andaba y en forma física no, y por mas osciloscopio que tuviera no me ayudaba ya que no sabía por que parte del programa andaba, asi que lo que hice fue utilizar un pin como salida para indicar el estado y saber en que parte del programa se encontraba, sacando pulsito, un pulso, 2 pulsos, etc y ahi si con la ayuda del osciloscopio, pude detectar en que parte fallaba y solucionarlo.

 
Última edición:
JA! Es curioso lo que señalas. A mí me pasó lo contrario: Funcionaba en la vida real, dejaba de funcionar en Proteus. De todas formas lo usé más como debugger que como simulador en sí.
 
Hola que tal soy nuevo en el foro y en la electrónica, trato de realizar un modulo de radio frecuencia pero este no funciona.

-Tengo un modulo de envio con un chip ht12e se alimenta de una batería 9v con un regulador de voltaje a 5v (l7805) regulo el voltaje a 5v, alimento el chip en el pin 18 con 5v el pin 8 lo conecto a tierra con el pin 9 y con eso fijo la dirección de conexión entre los dos encapsulados.

-El modulo de recepción lo conecto con un cable usb que le da corriente 5v directamente al encapsulado ht12d el pin 8 lo conecto con el pin 9 para fijar la dirección igual a la del modulo de envío, solo trato de hacer funcionar los dos encapsulados no he puesto el rx y tx, solo trato de revisar que los dos chip funcionen entre si pero no lo logro.

-Conecte el pin 17 del ht12d con un led en la pata positiva la pata negativa del led va a una resistencia de 220 ohm y la otra pata de la resistencia esta conectada a tierra, el led debería de prender al conectar el pin 17 del ht12e lo conecto con el 14 del pin ht12d debería de prender el led ¿CORRECTO?

Que opinan que puede estar mal? algún consejo por favor
 
Y has logrado algún avance con el programa o el proyecto Arsenic?

En estos días me pongo, te lo prometo. La cantidad de trabajo que tengo es casi inhumano. No paro ni sábados, ni domingos, ni feriados. Perdón por la demora, pero sí que en estos días tal vez pueda dedicarle un poco a este proyecto en particular. Creo que con esto ya podremos decodificar cualquier tipo de traza One Time Pad comercial de cualquier IC.



Hola que tal soy nuevo en el foro y en la electrónica, trato de realizar un modulo de radio frecuencia pero este no funciona.

-Tengo un modulo de envio con un chip ht12e se alimenta de una batería 9v con un regulador de voltaje a 5v (l7805) regulo el voltaje a 5v, alimento el chip en el pin 18 con 5v el pin 8 lo conecto a tierra con el pin 9 y con eso fijo la dirección de conexión entre los dos encapsulados.

-El modulo de recepción lo conecto con un cable usb que le da corriente 5v directamente al encapsulado ht12d el pin 8 lo conecto con el pin 9 para fijar la dirección igual a la del modulo de envío, solo trato de hacer funcionar los dos encapsulados no he puesto el rx y tx, solo trato de revisar que los dos chip funcionen entre si pero no lo logro.

-Conecte el pin 17 del ht12d con un led en la pata positiva la pata negativa del led va a una resistencia de 220 ohm y la otra pata de la resistencia esta conectada a tierra, el led debería de prender al conectar el pin 17 del ht12e lo conecto con el 14 del pin ht12d debería de prender el led ¿CORRECTO?

Que opinan que puede estar mal? algún consejo por favor

El pin 14 del encoder HT12E (NOT-TE) va conectado al negativo (GND). En el datasheet hay un circuito que está mal, presta atención a eso. El pin 14 del decoder (HT12A) es el Latching Mode. Ese pin debe quedar libre (no conectado a GND), ya que además de enviar el frame completo, añade 7 palabras más con un 1 de dato (algo completamente innecesario a efectos prácticos y contraproducente en cuanto a la durabilidad de la batería).

El transmisor no necesita de ningún regulador, ya que su rango de tensiones varía entre los 2.4V y 12V. Podrías prescindir de él. Por su parte, el receptor (HT12A) sí requiere de una tensión máxima de 5V, por lo que probablemente tendrías que utilizar algún 7805, si es que la tensión de entrada es mayor a esa.

Pero primero que nada, yo probaría unir ambos negativos de la alimentación (GND), ya que al no haber un RX/TX, éstos no tienen una referencia común. Recordá que ningún integrado necesita pullup físico, porque internamente viene incorporado.

Revisa que las direcciones sean idénticas. Chequea la resistencia del oscilador y/o el cristal que le hayas colocado al otro IC. Creo que además de unir los pines 17 entre sí (DOUT), necesitan de una señal de reloj en sincronía.

Saludos y éxitos!
 
Última edición:
Saludos a todos en el foro, soy aficionado y algunas veces construyo algún dispositivo electrónico, ahora vi este hermoso trabajo para controles remotos, hecho por juamma2468 y quería implementarlo en un pic16f886, pero me di cuenta de que si recompilas el proyecto para el 16f684 o 16f688 obtengo un archivo hexadecimal que pone en el micro no funciona como el proporcionado en el zip. Me gustaría ejecutarlo en un 16f886, entonces le pregunto a juamma2468 si puede verificarlo amablemente y adjuntar el archivo nuevamente. Muchas gracias de antemano.
Frankko
 
Hola frankko, te adjunto la ultima versión de código que tengo totalmente funcional. Lo que te paso es el código para registrar un código en la memoria eeprom del pic 16F684 para luego poder reconocerlo y asi poder activar/desactivar la salida. Como hice un recorte y pego, puede que tengas algunas variables de más dando vuelta, cualquier problema me avisas pegandome el log de los errores que te de al compilar. También te adjunto el esquemático para que sepas como van conectado las cosas. Para grabar el código lo que tenes que hacer es apretar el pulsador hasta que se apaga el led, cuando lo hace soltas el pulsador y precionas el botón del control a registrar (esto miestras el led está apagado), si lo toma y registra el led parpadeará unas 10 veces rápidamente, luego vuelve a prenderse. Después de eso ya podrás usar el receptor. Cualquier duda me avisa, saludos.
FE de erratas.
En la parte de código donde dice
If (Activacion==true)
{
If (input(salida)==0)
Salida=1;
Else
Salida=0;
}
En realidad tendría que ser
If (Activacion==true)
Salida=1;
Else
Salida=0;
 

Adjuntos

  • Esquematico.jpg
    Esquematico.jpg
    36 KB · Visitas: 41
  • codigo RX universal.txt
    13.3 KB · Visitas: 31
Última edición:
hola Juanma,
Probé el código que amablemente me adjuntaste y solo funciona con el simulador Proteus, almacena el código, elimina etc., pero una vez que se activa la salida, no se desactivará al soltar el botón. En el prototipo físico que monté portando el puerto 16f886 del que adjunto el archivo, consigo 'encender solo dos flashes del LED, y no voy más allá. Tal vez tienes que cambiar la tolerancia? ¿Puedes ayudarme a resolverlo? De lo contrario, no puedo continuar. Gracias, saludos a todos y Feliz Navidad.
 

Adjuntos

  • main.txt.zip
    3.9 KB · Visitas: 22
frankko dijo:
hola Juanma,
Probé el código que amablemente me adjuntaste y solo funciona con el simulador Proteus, almacena el código, elimina etc., pero una vez que se activa la salida, no se desactivará al soltar el botón. En el prototipo físico que monté portando el puerto 16f886 del que adjunto el archivo, consigo 'encender solo dos flashes del LED, y no voy más allá. Tal vez tienes que cambiar la tolerancia? ¿Puedes ayudarme a resolverlo? De lo contrario, no puedo continuar. Gracias, saludos a todos y Feliz Navidad.
Podrías subir un video para ver bien que es lo que te hace, ya que de esa forma me voy a dar cuenta más facil de por donde puede venir el problema, saludos.
 
Podrías subir un video para ver bien que es lo que te hace, ya que de esa forma me voy a dar cuenta más facil de por donde puede venir el problema, saludos.

Saludos, intento probar tu codigo en este pic pero no funciona como describres.... que será?

Código:
 #include <18F26K22.h>
#Device  PASS_STRINGS=IN_RAM 
#ZERO_RAM       
#FUSES INTRC_IO, NOWDT, BROWNOUT, PUT, NOPBADEN, NOHFOFST
#fuses NOPLLEN        //HW PLL disabled, PLL enabled in software
#fuses MCLR           //Master Clear pin enabled
#fuses PROTECT        //Code protected from reads
#use delay(internal=8MHz)  //CCS
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7,ERRORS,stream=uart1)  // Configuración UART1 (Hardware)
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_B6,rcv=PIN_B7,ERRORS,stream=uart2)  // Configuración UART2 (Hardware)
//#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C3,rcv=PIN_C2,ERRORS,stream=debug)  // Configuración debug (Software)   (Invertido, para el cable   RX=C2, TX=C3)



#use fast_io(B)
//#use fast_io(C)

// Definiciones del puerto A

#define Led       PIN_B0
#define Led_Ok    PIN_B1
#define Pulsador  PIN_B2

#define Datos     PIN_B4

// Definiciones globales

int i,j,l;
int Salto,Aux,Activado;

#byte IOCA = 0x096

enum
{
   RX_Ocupado = 0,
   RX_Libre,
   RX_Espacio_Tramas,
   RX_Contar_Bits,
   RX_Medicion_Tiempo_Bits,
   RX_Sincronizar,
   RX_Decodificar,
   RX_Codigo_Ok,
   RX_Codigo_Error,
};

typedef struct {
   unsigned int Codigo[3];
   unsigned int Estado;
   unsigned int Resultado;
   unsigned int Grabar;
   unsigned int Contador;
   unsigned int Contador_Bits;
   unsigned int Buscar_Tiempo_ET;
   unsigned int Nuevo_Bit;
   unsigned long Tiempo_Entre_Tramas;
   unsigned long Aux_Tiempo_Entre_Tramas;
   unsigned long PulsoBajo;
   unsigned long PulsoAlto;
   unsigned long Tiempo_ET_delta_neg;
   unsigned long Tiempo_ET_delta_pos;
   unsigned long Tiempo_Bit[2];
   unsigned long Bit;
} RXInfo;
RXInfo RX;

#define Tolerancia (int) 200 // Tiempo = Tolerancia*1useg

void Parpadeo_led (int j){
   for (l=0;l<j;l++)   {
      output_high (Led);
      delay_ms (200);
      output_low (Led);
      delay_ms (200);
   }
}

#INT_RB
void  Ingreso_de_codigo (void) //Maquina para la lectura de bits
{
   switch (RX.Estado)   {
      case RX_Libre:
      {
         if(input(Datos) == 0)            // Entro solo si esta en bajo
         {
            set_timer1(0);                //Inicializo el timer1
            RX.Tiempo_Entre_Tramas = 0;   //Inicializo el valor de Tiempo_Entre_Tramas con 0
            RX.Aux_Tiempo_Entre_Tramas = 0;
            RX.Contador = 0;
            RX.Estado = RX_Espacio_Tramas;//Siguiente paso
         }
      }break;
      case RX_Espacio_Tramas:
      {   
         if(input(Datos) == 1)
         {
            RX.Aux_Tiempo_Entre_Tramas = get_timer1();
            RX.Contador++;
         }
         else
         {
            set_timer1(0);
         }
      }break;
      case RX_Contar_bits:
      {
         if(input(Datos) == 0)            // Entro solo si esta en bajo
            set_timer1(0);                //Inicializo el timer1
         else
         {
            RX.Tiempo_Entre_Tramas = get_timer1();
            set_timer1(0);
            RX.Contador_Bits++;
         }
      }break;
      case RX_Medicion_Tiempo_Bits:
      {
         if (input(Datos) == 1)
         {
               RX.PulsoBajo = get_timer1();
               set_timer1(0);
         }
         else
         {
               RX.PulsoAlto = get_timer1();
               set_timer1(0);
         }
      }break;
      case RX_Sincronizar:
      {
         RX.Contador++;
      }break;                 
      case RX_Decodificar:
      {
         if (input(Datos) == 1)         {
            RX.Bit = get_timer1();
            RX.Contador++;
            RX.Nuevo_Bit = true;
         }
         else
            set_timer1(0);
      }break;
   }
   clear_interrupt(int_rb);
}

void main(){
   set_tris_b (0b10111100); // Entradas:A2,A3,A4,A5 - Salidas:A0,A1
   output_b (0);
   IOCA = 32;
   Salto = read_eeprom (252);
   if (Salto==255)      Salto = 0;
   setup_timer_1 (T1_INTERNAL|T1_DIV_BY_2); // Base de tiempo de 1 useg
   RX.Estado = RX_Libre;
   enable_interrupts (int_rb);
   enable_interrupts (global);
   output_high (Led);
   ///////////////////////////////////////////////////////////////////////////
   for (;;)   {
      // Rutina para grabar controles remotos y configurar
      if (input(Pulsador)==1)      {
         disable_interrupts (int_rb);
         output_low (Led);
         delay_ms (1000);
         // Rutina para grabar controles remotos
         if (input(Pulsador) == 0)         {
            if (Salto < 240)// Puedo grabar hasta 80 codigos de 24 bits
            {
               RX.Grabar = 1;
               RX.Buscar_Tiempo_ET = False;
               RX.Tiempo_ET_delta_neg = 0;
               RX.Tiempo_ET_delta_pos = 0;
               RX.Contador_Bits = 0;
               RX.Tiempo_Bit[0] = 0;
               RX.Tiempo_Bit[1] = 0;
               RX.Estado = RX_Libre;
            }
            else
            {
               Parpadeo_led (4);
               output_high (Led);
               delay_ms(500);
            }
         }
         else
         {// Borro la memoria
            output_high (Led);
            while (input(Pulsador) == 1);
            for (i=0;i<255;i++)
               write_eeprom(i,0xFF);
            Salto = 0;
            Parpadeo_led (5);
            output_high (Led);
         }
         output_high (Led);
         enable_interrupts (int_rb);
      }
      // Rutina de lectura de código
      switch (RX.Estado)
      {
         case RX_Ocupado:
         {
            RX.Bit = 0;
            if (RX.Grabar == 1)
            {
               disable_interrupts (int_rb);
               RX.Grabar = 0;
               for (i=0;i<3;i++)
               {
                  Aux = RX.Codigo[i];
                  write_eeprom(i+Salto,Aux);
               }
               Salto+=3;
               write_eeprom(252,Salto);
               Parpadeo_led (10);
               output_high (Led);
               RX.Estado = RX_Codigo_Error;
            }
            else
            {
               if (Salto != 0)
               {
                  for (i=0;i<Salto;i+=3)
                  {
                     if (read_eeprom(0+i) == RX.Codigo[0])
                     {
                        if (read_eeprom(1+i) == RX.Codigo[1])
                        {
                           if (read_eeprom(2+i) == RX.Codigo[2])
                           {
                              RX.Estado = RX_Codigo_Ok;
                              i = Salto;
                           }
                           else
                              RX.Estado = RX_Codigo_Error;
                        }
                        else
                           RX.Estado = RX_Codigo_Error;
                     }
                     else
                        RX.Estado = RX_Codigo_Error;
                  }
               }
               else
                  RX.Estado = RX_Codigo_Error;
               for (i=0;i<3;i++)
                  RX.Codigo[i] = 0;
            }
         }break;
         case RX_Espacio_Tramas:
         {
            if (RX.Buscar_Tiempo_ET == False)
            {
               if (RX.Contador < 26)
               {
                  if (RX.Tiempo_entre_tramas < RX.Aux_tiempo_entre_tramas)
                     RX.Tiempo_entre_tramas = RX.Aux_tiempo_entre_tramas;
               }
               else
               {
                  RX.Tiempo_ET_delta_neg = RX.Tiempo_entre_tramas-Tolerancia;
                  RX.Tiempo_ET_delta_pos = RX.Tiempo_entre_tramas+Tolerancia;
                  RX.Contador = 0;
                  RX.Buscar_Tiempo_ET = True;
                  RX.Estado = RX_Libre;
               }
            }
            else
            {
               if (RX.Contador < 26)
               {
                  if ((RX.Tiempo_ET_delta_neg < RX.Aux_Tiempo_entre_tramas)&(RX.Aux_Tiempo_entre_tramas < RX.Tiempo_ET_delta_pos))
                  {
                     RX.Buscar_Tiempo_ET = False;
                     RX.Tiempo_Entre_Tramas = 0;
                     RX.Estado = RX_Contar_Bits;
                  }
               }
               else
                  RX.Estado = RX_Codigo_Error;
            }
         }break;
         case RX_Contar_Bits:
         {
            if (RX.Contador_Bits < 26)
            {
               if ((RX.Tiempo_ET_delta_neg < RX.Tiempo_entre_tramas)&(RX.Tiempo_entre_tramas < RX.Tiempo_ET_delta_pos))
               {
                  if ((RX.Contador_Bits == 13)|(RX.Contador_Bits == 25))
                  {
                     RX.Estado = RX_Medicion_Tiempo_Bits;
                  }
                  else
                     RX.Estado = RX_Codigo_Error;
               }
            }
            else
               RX.Estado = RX_Codigo_Error;
         }break;
         case RX_Medicion_Tiempo_Bits:
         {
            if ((RX.PulsoBajo > 0)&&(RX.PulsoAlto > 0))
            {
               if (RX.Tiempo_Bit[0] == 0)
                  RX.Tiempo_Bit[0] = RX.PulsoBajo + RX.PulsoAlto;
               else
               {
                  RX.Tiempo_Bit[1] = RX.PulsoBajo + RX.PulsoAlto;
                  if ((RX.Tiempo_Bit[0] < 5000)&&(RX.Tiempo_Bit[1] < 5000))
                  {
                     if (((RX.Tiempo_Bit[0] - Tolerancia) > RX.Tiempo_Bit[1])|(RX.Tiempo_Bit[1] > (RX.Tiempo_Bit[0] + Tolerancia)))
                     {
                        if (RX.Tiempo_Bit[1] < RX.Tiempo_Bit[0])
                           RX.Tiempo_Bit[0] = RX.Tiempo_Bit[0]/2;
                        else
                           RX.Tiempo_Bit[0] = RX.Tiempo_Bit[1]/2;
                     }
                     else
                        RX.Tiempo_Bit[0] = RX.Tiempo_Bit[0]/2;
                     RX.Contador = 0;
                     RX.Estado = RX_Sincronizar;
                  }
               }
               RX.PulsoBajo = 0;
               RX.PulsoAlto = 0;
            }
         }break;
         case RX_Sincronizar:
         {
            if (RX.Contador_Bits == 13)
            {
               if (RX.Contador == 22)
               {
                  RX.Estado = RX_Decodificar;
                  RX.Contador = 0;
               }
            }
            if (RX.Contador_Bits == 25)
            {
               if (RX.Contador == 46)
               {
                  RX.Estado = RX_Decodificar;
                  RX.Contador = 0;
               }
            }
         }break;
         case RX_Decodificar:
         {
            if (RX.Nuevo_Bit == True)
            {
               RX.Nuevo_Bit = False;
               if (RX.Contador < RX.Contador_Bits)
               {
                  if (RX.Bit < 2000)
                  {
                     if (RX.Bit < RX.Tiempo_bit[0])
                        shift_left(RX.Codigo,3,1);
                     else
                        shift_left(RX.Codigo,3,0);
                  }
                  else
                     RX.Estado = RX_Codigo_Error;
               }
               else
               {
                  RX.Estado = RX_Ocupado;
               }
            }
         }break;
         case RX_Codigo_Ok:
         {
            if (Activado == false)
               Activado = true;
            else
               Activado = false;
            RX.Estado = RX_Codigo_Error;
         }break;
         case RX_Codigo_Error:
         {
            if (RX.Grabar == 1)
            {
               RX.Grabar = 0;
               Parpadeo_Led (2);
               output_high (Led);
            }
            RX.Buscar_Tiempo_ET = False;
            RX.Tiempo_ET_delta_neg = 0;
            RX.Tiempo_ET_delta_pos = 0;
            RX.Contador_Bits = 0;
            RX.Tiempo_Bit[0] = 0;
            RX.Tiempo_Bit[1] = 0;
            RX.Estado = RX_Libre;
         }break;
      }
      // Rutina de funcionamiento
      if (Activado == true)
         output_high (Led_Ok);
      else
         output_low (Led_Ok);
      // Rutina de borrado de controles remotos
      enable_interrupts (int_rb);
   }
}
 
Hola juanma, he estado tratando de hacer funcionar correctamente el codigo de manera fisica en una proto. A veces lo logro, a veces no. Que me recomentarías?
Tengo un control de un porton, que codifica con el HT12E. lo que no logro es que funcione correctamente la secuencia para "leer y guardar" nuevos controles.

Hola frankko, te adjunto la ultima versión de código que tengo totalmente funcional. Lo que te paso es el código para registrar un código en la memoria eeprom del pic 16F684 para luego poder reconocerlo y asi poder activar/desactivar la salida. Como hice un recorte y pego, puede que tengas algunas variables de más dando vuelta, cualquier problema me avisas pegandome el log de los errores que te de al compilar. También te adjunto el esquemático para que sepas como van conectado las cosas. Para grabar el código lo que tenes que hacer es apretar el pulsador hasta que se apaga el led, cuando lo hace soltas el pulsador y precionas el botón del control a registrar (esto miestras el led está apagado), si lo toma y registra el led parpadeará unas 10 veces rápidamente, luego vuelve a prenderse. Después de eso ya podrás usar el receptor. Cualquier duda me avisa, saludos.
FE de erratas.
En la parte de código donde dice
If (Activacion==true)
{
If (input(salida)==0)
Salida=1;
Else
Salida=0;
}
En realidad tendría que ser
If (Activacion==true)
Salida=1;
Else
Salida=0;
Hola Juanma, Estuve trabajando con estos códigos, y los que has pasado previamente. Estoy haciendo un proyecto para la facultad. Básicamente tengo que hacer una receptora para hacer funcionar un relé. En simulación funciona bastante bien, el tema es que en la placa que arme, a veces anda, a veces no. Mi emisor se basa en el HT12E. Trabajo con el PIC16f630 con un osc interno de 4M. al intentar compilar este código precisamente me sobran variables. Has podido avanzar en algo con esto?
 
Y no hay caso che, esta fusión de códigos no funca...es una involución a la sorprendente VERSION 3.0 de JUANMA, cuando la hizo sin intentar fusionar nada...No tengo especificamente el 16F684, y migré a 16F628a, ya ahí la primera difierencia es que no existe INT_RA en este micro, asi que fuí por la INT_RB, como hizo lycans2005, a quien tampoco le anduvo...Desde hace 5 años que nadie salvo el propio JUANMA, lo pudo hacer funcionar parece...Igual para jugar un rato esta bueno...Voy a seguir probando con otras interrupciones a ver si sale algo.
 
Atrás
Arriba