Autor Tema: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.  (Leído 3310 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« en: 14 de Julio de 2009, 19:04:52 »
Hola a todos , tengo el siguiente programa y funciona pero de manera errática:
Código: C
  1. // Incluimos las librerías utilizadas.
  2. #include "C:\Librerias MikroC\74165_MikroC.h"
  3.  
  4. void main() {
  5. char resultado;
  6. // Configuración de puertos.
  7. ADCON0 =  0x00; // Modulo AD desactivado.
  8. ADCON1 =  0x0F; // I/O Digital en el puerto A.
  9. TRISA.F5 = 0X01;
  10. TRISA.F4 = 0X00;
  11. TRISA.F3 = 0X00;
  12. TRISB = 0X00;
  13.  
  14.  while(1) {
  15.   resultado = lee_entradas();
  16.   PORTB = resultado;
  17.   }
  18.   }

El problema aparece cuando conecto el registro al puerto A como aparece en el circuito que adjunto.
Lo más raro es que conectando el registro por ejemplo al puerto C funciona bien.
No se que puede pasar por que la librería funciona bien.

Código: C
  1. // Librería de control para el expansor de 8 entradas con 74HC165.
  2. // Versión: 1.0
  3. // Fecha: 14/07/09
  4.  
  5. // Ejemplo de uso de la función:
  6. // i = lee_entradas();
  7.  
  8. // Pines intercambiables según necesidades del usuario.
  9. #define ena_ser  PORTA.F3      // Pin HABILITACIÓN.
  10. #define ckl_ser   PORTA.F4      // Pin RELOG.
  11. #define dat_ser   PORTA.F5      // Pin DATOS.
  12.  
  13. // Los pines del puerto deben ser configurados de esta manera:
  14. /*
  15. TRISA.F5 = 0x01;
  16. TRISA.F4 = 0x00;
  17. TRISA.F3 = 0x00;
  18. */
  19.  
  20. // Declaramos la función.
  21. char lee_entradas(); // Devuelve una variable con el contenido del registro de desplazamiento.
  22.  
  23. char lee_entradas() {
  24.   char contador,ei;
  25.    
  26.     ckl_ser = 1;      // Pone el pin de ckl a nivel alto.
  27.     ena_ser = 0;      // Guarda el estado de las entradas.
  28.     ena_ser = 1;      // Habilita al 74165 para recibir nuevos datos.
  29.     ei = 0;           // Pone a 0 la variable que va a contener el dato del registro.
  30.  
  31.       for(contador=1;contador<=8;++contador) {  // Genera clock para hacer el corrimiento de bits de la estructura.
  32.  
  33.      if(dat_ser==1) { ei = ei + 1;} // Si se recibe un 1 lo guarda en la variable.
  34.        if(contador<8){ei<<=1;} // Desplaza un bit de la variable para poder almacenar el proximo dato.
  35.  
  36.            ckl_ser = 0;    // Pone a nivel bajo el pin de ckl.
  37.            ckl_ser = 1;    // Pone a nivel alto el pin de ckl.
  38.  
  39.   }
  40.  
  41.   ena_ser = 0;
  42.   return(ei); // Retorna con el valor de la función.
  43.  
  44. }

También lo he conectado a otros micros y funciona bien siempre y cuando no lo conecte al puerto A.

Otra cosa lo he conectado al puerto A de un PIC16F84A que no tiene puerto A/D y funciona perfecto.........

La verdad no se que puede llegar a estar pasando.  :? :?
« Última modificación: 14 de Julio de 2009, 19:14:34 por jonathanPIC888 »

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« Respuesta #1 en: 14 de Julio de 2009, 22:07:13 »
No se que pensar ya  :x :x La librería funciona correctamente pero solo si lo conecto al puerto C o B del microcontrolador. En cuanto lo conecto al puerto A me deja de funcionar. Esto mismo me ha pasado con otros micros con conversor A/D, ya que el PIC16F84A funciona perfectamente en cualquier puerto.
Hasta ahora me había parecido un problema de los fusibles pero probé otros micros cuya configuración de los fuses fuera más sencilla pero pasa lo mismo.  :shock: :shock:

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« Respuesta #2 en: 15 de Julio de 2009, 01:53:15 »
He hecho pruebas con otros microcontroladores como por ejemplo el PIC16F870 corriendo a 4.00Mhz pero sigue habiendo el mismo problema con el puerto A. Ya que uso la librería con el puerto C del micro y me funciona sin ningún problema. El problema aparece cuando lo conectamos al puerto A.
Incluso en el PIC16F870 ya desactivé todo referente al puerto analógico del puerto A pero tampoco funciona........ :x :x :x :x

En el PIC18F2550, me está costando más aún ya que la configuración de sus fuses no es nada sencilla.......... :? :? :?

Por favor si alguien tiene una idea se lo agradecería en el alma

Desconectado ivan braga

  • PIC12
  • **
  • Mensajes: 77
Re: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« Respuesta #3 en: 15 de Julio de 2009, 10:01:40 »
Olá jonathanPIC888,

O PIC18F2550 tem COMPARATOR, então em MAIN  deve ser declarado CMCON  = 0x07;  // Comparador off e veja se funciona.

Abraços.

Ivan
"Mesmo o objeto mais inanimado tem movimento suficiente para ficar na sua frente e provocar um acidente."
"Incluso el objeto más inanimado tiene suficiente movimiento para interponerse en su camino y provocar un accidente."
"Even the most inanimate object has enough movement to stand in your way and cause an accident."

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« Respuesta #4 en: 15 de Julio de 2009, 16:28:06 »
Yo lo configuré de la siguiente forma pero sigue sin funcionar:

Código: C
  1. void main() {
  2. char resultado;
  3.  
  4. ADCON1 = 0x0F;
  5. CMCON = 7;
  6. LATA = 0;
  7. LATB = 0;
  8.  
  9.  
  10. TRISA.F5 = 1;
  11. TRISA.F4 = 0;
  12. TRISA.F3 = 0;
  13.  
  14.  
  15. TRISB = 0;
  16.  
  17.  while(1) {
  18.   resultado = lee_entradas();
  19.   output_74164(resultado);
  20.   }
  21.   }

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: PIC18F2550 en MikroC + 74HC165 error de funcionamiento.
« Respuesta #5 en: 15 de Julio de 2009, 20:51:22 »
La verdad ya no se que pueda estar pasando  :( :( :( :( :( No quiere funcionar de ninguna manera