Autor Tema: como configurar pines de entrada en pic16f628a ?  (Leído 11678 veces)

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

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #15 en: 28 de Diciembre de 2010, 20:00:38 »
Hola Halcon_de_Fuego, intenta de esta manera (que es como te indicaban los colegas) aunque veo, por los mensajes de advertencia del CCS, que tienes problemas con el uso de algunas instrucciones dentro de las interrupciones como llamados a mostrar algo en el LCD y delays:

Código: C
  1. #include <16f628.h>
  2.  
  3. #fuses XT,NOWDT,NOPROTECT,NOLVP
  4.  
  5. #use delay (clock=4000000)
  6.  
  7. #include <lcd.c>
  8. #use standard_io(a)
  9.  
  10.    INT counter=0;
  11.  
  12. float rpm;
  13.  
  14. #INT_timer1
  15.  
  16. void timer1_isr(VOID)
  17. {
  18.    //set_tris_A(11111111);
  19.  
  20.    counter = get_timer0 () ;
  21.    
  22.    IF (input (PIN_A2)) /* para motores de 8 cilindros*/
  23.    {
  24.       rpm = counter * 4;  /*rpm = counter * 2.0 * 120; */
  25.    }
  26.  
  27.    
  28.    
  29.    IF (input (PIN_A3)) /* para motores de 6 cilindros*/
  30.    {
  31.       rpm = counter * 3;  /*rpm = counter * 2.0 * 120; */
  32.    }
  33.  
  34.    
  35.    
  36.    IF (input (PIN_A4)) /*para motores de 4 cilindros*/
  37.    {
  38.       rpm = counter * 2; /*rpm=counter * 2.0 * 120; */
  39.    }
  40.  
  41.    
  42.    lcd_putc ("\f RPM\n");
  43.    lcd_gotoxy (5, 2);
  44.    
  45.    IF (input (PIN_A0) )
  46.       printf (lcd_putc, "izq %5.0f", rpm);
  47.    
  48.    IF (input (PIN_A1) )
  49.       printf (lcd_putc, "der %5.0f", rpm);
  50.    
  51.    IF ( ! input (PIN_A0)& ! input (PIN_A1) )
  52.       printf (lcd_putc, "\fCONECTAR ENTRADA\n DE GIRO");
  53.    
  54.    delay_ms (250) ;
  55.    set_timer0 (0) ;
  56.    set_timer1 (3036) ;
  57. }
  58.  
  59. void inicio(VOID)
  60. {
  61.    INT i, j;
  62.    lcd_putc ("\f Tacometro\n Pirata");
  63.    delay_ms (3000) ;
  64.    lcd_putc ("\f Laboratorio");
  65.    lcd_gotoxy (1, 2) ;
  66.    lcd_putc (" Electronica A");
  67.    delay_ms (1500); lcd_putc ("\f") ;
  68.    FOR (j = 0; j < 4; j++)
  69.    {
  70.       lcd_gotoxy (5, 1) ;
  71.       lcd_putc ("CARGANDO") ;
  72.       FOR (i = 5; i < 13; i++)
  73.       {
  74.          lcd_gotoxy (i, 2) ;
  75.          lcd_putc (" - "); delay_ms (75) ;
  76.       }
  77.  
  78.       lcd_putc ("\f") ;
  79.    }
  80.  
  81.    lcd_putc ("\f") ;
  82. }
  83.  
  84. void main(VOID)
  85. {
  86.    setup_timer_0(rtcc_ext_l_to_h|rtcc_div_2);
  87.    setup_timer_1(t1_internal|t1_div_by_8);
  88.    setup_ccp1(CCP_OFF);
  89.    setup_comparator(NC_NC_NC_NC);  
  90.    enable_interrupts(INT_timer1);
  91.    enable_interrupts(global);
  92.    set_timer0(0);
  93.    set_timer1(3036);
  94.  
  95.    lcd_init();
  96.    inicio();
  97.    
  98.    WHILE(true);
  99. }

Por cual entrada lees los pulsos del tacómetro?  Para que son los demás?

Saludos!

EDITO: veo que tienes configurado el timer0 para leer pulsos externos, entonces puedes estar teniendo un conflicto con los pines.  Como tienes conectados los pines?
« Última modificación: 28 de Diciembre de 2010, 20:10:40 por bmb »

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #16 en: 28 de Diciembre de 2010, 20:30:34 »
quiero leer por la pata una dos y tres de acuerdo a que clase de motor es las demas patas van a un display , las entradas las selecciono con una llave , no me anda el codigo

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #17 en: 28 de Diciembre de 2010, 21:17:50 »
pero entrada del pulsos del tacometro solo tendras una, cierto? cual es?
dependiendo de la posicion del switchs te dara un resultado o otro, cierto?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #18 en: 28 de Diciembre de 2010, 21:25:13 »
Según la configuración de Timer0 la entrada de pulsos sería por RA4.  Las demás dificilmente te las va a leer porque solo las ve en el momento de la interrupción de Timer1.  Que tipo de pulsos te envian los motores?  Cuantos por vuelta?  Creo que te va mejor si usas el módulo CCP y con DIP switches configuras el tipo de motor.

Saludos!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #19 en: 28 de Diciembre de 2010, 21:54:26 »
Código: [Seleccionar]

  IF (input (PIN_A4)) /*para motores de 4 cilindros*/
  {
     rpm = counter * 2; /*rpm=counter * 2.0 * 120; */
  }

asi es normal que no lea los pulsos ... si tiene el timer0 como contador por la pata de tocki(PINA4)... no puede utilizarla para otra cosa mas(switches)... por lo menos en su ejemplo
en fuses pon NOMCLR, cambia el switch del pinA4 y ponlo en el PINA5 con una resistencia PULL-UP, y la entrada de los pulsos del tacometro se lo metes por el PIN_A4

si pusieras tu cirucuito mejor que mejor asi veriamos mejor como lo tienes distribuidos los pines
« Última modificación: 28 de Diciembre de 2010, 22:06:08 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #20 en: 28 de Diciembre de 2010, 22:51:23 »
hola no entendi bien pero lo que quiero es poder seleccionar segun el motor si es de 8 , 6 o 4 cilindros si es de 8 cilindros supongamos que entre segun el switch en la pata 2 si el motor es de 6 cilindros supongamos que entra segun el switch en la pata 3 , si el motor es de 4 cilindros supongamos que entra segun el switch en la pata 4 ! que tengo que hacer segun los ultimos 3 consejos ?

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #21 en: 28 de Diciembre de 2010, 22:53:42 »
cuando digo switch me refiero a una llave selectora manualmente para elegir por que pata tomo la señal , perdon !

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #22 en: 28 de Diciembre de 2010, 23:25:10 »
Bueno, no he visto a fondo tu código, pero es que tiene cosas a primera vista que no me cuadran para un tacómetro; tal vez si, como te sugiere ppyote subes tu circuito podamos entender un poco mejor lo que quieres hacer.  Mi consejo personal sería que replantearas tu diseño utilizando el módulo CCP del PIC.  Solo una entrada para los pulsos del tacómetro y con la llave selectora escoges que tipo de motor tienes conectado a la entrada.  Por el momento si no has trabajado con ese módulo, te recomendaría que te estudies el ejemplo del CCS: EX_CCPMP.C
Por ahí te puedes encaminar para hacer un tacómetro facilmente.

Saludos!

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #23 en: 28 de Diciembre de 2010, 23:29:45 »
este es el circuito que pretendo

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #24 en: 28 de Diciembre de 2010, 23:35:40 »
Es el código original? o le has cambiado algo.  Te lo digo, porque solo podría leer pulsos continuos por RA4 y por los otros pines me parece que no se puede(o al menos como veo que está escrito). Por la entrada externa del timer0 seguramente que si si se puede hacer un tacómetro, pero me sigue pareciendo más fácil usar el módulo CCP.

Del circuito me refiero al diagrama de conexiones...

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #25 en: 28 de Diciembre de 2010, 23:40:44 »
perdon este es el circuito y no se que es un codigo ccp ?!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #26 en: 28 de Diciembre de 2010, 23:56:59 »
Acabo de ver el circuito, y sigue en pie mi recomendación.  No es un código CCP sino que se trata de un módulo que traen los PICs (CAPTURE/COMPARE/PWM(CCP) MODULE).  Si miras el ejemplo que te menciono en un post anterior, te vas a dar cuenta que es el módulo apropiado para lo que necesitas.  Con este puedes medir la duración entre un pulso y otro y así calcular las rpm con facilidad.  Yo alguna vez hice un tacómetro usando ese módulo, pero como la idea es que aprendas, puedes empezar desde cero (con ese ejemplo) y aquí con la ayuda de todos, lo vamos armando.

Saludos!

Desconectado Halcon_de_Fuego

  • PIC12
  • **
  • Mensajes: 61
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #27 en: 29 de Diciembre de 2010, 00:00:30 »
gracias por tu recomendacion pero no creo que entre todos lo armemos , casi nunca puedo terminar algo ni con un codigo de terceros y el unico lugar que conozco para preguntar es acá ! disculpa por hacerte perder el tiempo amigo !

saludos !.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #28 en: 29 de Diciembre de 2010, 10:14:42 »
  Yo también creo que lo más fácil y funcional sería utilizar el modulo CCP. Pero de todas maneras se puede hacer utilizando RA4 como entrada para el timer0, yo lo hice así para un tacómetro (en assembler) para aeromodelismo y podía medir hasta unas 20000 RPM.

  Como ya te comentaron los colegas, la única entrada para medir las RPM debería ser RA4 (utilizada en modo de entrada externa para el timer0). Luego deberías colocar los switch selectores en otros pines, y según el estado de esos pines hacés los cálculos correspondientes para los distintos tipos de motores.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como configurar pines de entrada en pic16f628a ?
« Respuesta #29 en: 29 de Diciembre de 2010, 14:50:37 »
Hola Halcon_de_Fuego, no hay por que desanimarse!  Solo que a mi parecer es más preciso con la opción del CCP.  Como te ha reiterado AngelGris, también es posible el tacómetro con el Timer0.  He reformado un poco tu código para hacerlo funcionar con las sugerencias que te hemos hecho:

A4: entrada para pulsos del motor
A2 y A3 DIP swuitch asi:
A2 abierto, A3 abierto: motor de 4 ciclindros
A2 cerrado, A3 cerrado: motor de 4 ciclindros (esta podría ser una opción para otro tipo de motor)
A2 cerrado, A3 abierto: motor de 6 ciclindros
A2 abierto, A3 cerrado: motor de 8 ciclindros

Como podrás ver le he puesto al circuito unas resistencias pullup en A2 y A3 (lo mismo deberías hacer con A1 y A2), sin ellas en Proteus no te muestra problemas pero en 'la vida real' todos los que quieras.

Me parece que tendrías que cambiar la configuración en Timer0 ya que veo que a altas rpms, la lectura en counter se pasa de 255 (8 bits) con sus obvias consecuencias.   Bueno, nos comentas si tienes alguna duda.

Saludos!