Autor Tema: Problema USART modo sincrono maestro e interrupcion TMR2  (Leído 4672 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Problema USART modo sincrono maestro e interrupcion TMR2
« en: 25 de Marzo de 2011, 18:06:06 »
Hola amigos:

Os escribo para ver si alguien me podría ayudar en un problemilla que tengo con la USART. Intento configurar un micro con una PWM y q pueda transmitir en modo Síncrono maestro, al mismo tiempo necesito contar los pulsos que va dando la PWM(La mejor opción creo que seria por interrupción del Timer2).Simulándolo en Proteus en principio la parte de la USART y PWM me funciona bien, pero cuando pongo la interrupción del Timer 2 la USART deja de funcionar(o por lo menos el PIN que da la señal de reloj síncrona). Soy novatillo con el CCS y ando a tortas con él... me da que es porque el proteus para la USART debe de necesitar el vector interrupción y luego yo al poner el del Timer 2 fastidio algo...pero no se...
El codigo es el siguiente: (Si borro la interrupción en negrita, la USART me funciona bien... :?)

#include    <18F4450.h>
#fuses      HSPLL,NOWDT,NOPROTECT,noDEBUG,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN
#use        delay(clock=48000000)   
#use rs232(baud=50k,xmit=PIN_C6, rcv=PIN_C7,bits=8, SYNC_MASTER)
#byte PORTC=0Xf82
#use fast_io (C)

#INT_TIMER2
void interrupcion (void)
{//esto lo pongo por poner alguna linea.Aki en realidad iria la rutina para contar los pulsos
int i;
i=0;
}


void main()
{
//activo interrupcion timer2
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);

//configuro la PWM
set_tris_C(0);
PORTC=0;
setup_ccp1(CCP_PWM_plus_2);
SETUP_TIMER_2(T2_DIV_BY_4,116,1);
Set_PWM1_duty(58);
   while(1)
   {//envio cada 1s el numero 170
   putc(170);
   delay_ms(1000);      
   }
}

Seguro que es una tonteria que soy incapaz de ver, pero no se muy bien como hace el ccs las interrupciones...  :oops:
muchas gracias de antemano

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #1 en: 25 de Marzo de 2011, 19:05:06 »
Hola Rantamplan, el problema no es del CCS sino que no puedes usar una interrupción de Timer2 y PWM a la vez, ya que el módulo PWM utiliza a Timer2 (ver hoja de datos del PIC). Para configurar el PWM, puedes darle una ojeada al ejemplo EX_PWM.C

Saludos!

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #2 en: 25 de Marzo de 2011, 20:05:43 »
Hola bmb gracias por responder, tienes razon que el timer 2 se utiliza para la PWM por eso precisamente utilizo su interrupcion para saber cuantos periodos de PWM realiza y asi ir contandolos (cada vez q TMR2=PR2 se acaba el periodo Tpwm y salta la interrupcion del Timer2).En esa parte no tengo problemas funciona bien el problema es que al poner esas lineas la USART deja de funcionar...
un saludo


Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #3 en: 25 de Marzo de 2011, 21:48:43 »
Ahh OK, por el momento lo que veo que tienes:

Citar
set_tris_C(0)   // Todo el puerto C está como salida;
PORTC=0;

y en la configuración de rs232 uno de los pines debe ser salida y el otro debe ser entrada.

Saludos!

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #4 en: 26 de Marzo de 2011, 00:24:06 »
no, en sincrono maestro al ser el master utiliza los dos pines como salidas el pin7 como datos y el pin6 como reloj de sincronización.Mira asi se ve mejor:

-Sin la Interrupción:

Código: [Seleccionar]
#include    <18F4450.h>
#fuses  HSPLL,NOWDT,NOPROTECT,noDEBUG,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN
#use    delay(clock=48000000)   
#use rs232(baud=50k,xmit=PIN_C6, rcv=PIN_C7,bits=8, SYNC_MASTER)
#byte PORTC=0Xf82
#use fast_io (C)

void main()
{
//configuro la PWM
set_tris_C(0);

setup_ccp1(CCP_PWM_plus_2);
SETUP_TIMER_2(T2_DIV_BY_4,116,1);
Set_PWM1_duty(58);
//activo interrupcion timer2
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
   while(1)
   {//envio cada 1s el numero 170
putc(170);
delay_ms(100); 
   }
}

En la simulacion sale:


   :lol:

-Con la interrupción:

Código: [Seleccionar]
#include    <18F4450.h>
#fuses  HSPLL,NOWDT,NOPROTECT,noDEBUG,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN
#use    delay(clock=48000000)   
#use rs232(baud=50k,xmit=PIN_C6, rcv=PIN_C7,bits=8, SYNC_MASTER)
#byte PORTC=0Xf82
#use fast_io (C)

#INT_TIMER2
void interrupcion (void)
{//Activo la salida para q se vea el pulso de interrupcion en el osciloscopio
Bit_set(PORTC,4);
Bit_clear(PORTC,4);
}

void main()
{
//configuro la PWM
set_tris_C(0);

setup_ccp1(CCP_PWM_plus_2);
SETUP_TIMER_2(T2_DIV_BY_4,116,1);
Set_PWM1_duty(58);
//activo interrupcion timer2
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
   while(1)
   {//envio cada 1s el numero 170
putc(170);
delay_ms(100); 
   }
}

La simulacion me da esto: (Se ve la PWM y el Pulso que yo provoco en cada interrupción del TMR2)


 :shock:

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #5 en: 26 de Marzo de 2011, 09:19:01 »
del manual de CCS:

Citar
SYNC_MASTER
Makes the RS232 line a synchronous master, making
the receive pin a clock out, and the data pin the data
in/out.

Saludos!

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #6 en: 26 de Marzo de 2011, 11:33:48 »
gracias por la aclaracion no tenia ni idea de eso.De todas formas mi intencion es utilizarlas solo como salidas,  para asegurarme he cambiado el "set_tris_C(0);" por:
#byte TRISC=0Xf94
.
.
Bit_clear(TRISC,2);   
Bit_clear(TRISC,4);
.
.
de esa manera no toco los pines TX y RX (q los configure la USART como quiera) pero el resultado es el mismo. Sin interrupcion me comunica y crea PWM, con interrupcion la USART no responde. Las simulaciones de Proteus suelen ser fiables?

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #7 en: 26 de Marzo de 2011, 11:47:08 »
Hola de nuevo.  En modo Master y de la hoja de datos del PIC:

Citar
Note: The EUSART control will automatically
reconfigure the pin from input to output as
needed.

Como el PIC se encarga internamente de hacer que el pin de datos sea de entrada o de salida según lo necesite, entonces lo del set_tris_c(0) no sería problema.  Me entró curiosidad y monté el circuito en Proteus.  El resultado es que en ambos casos veo la señal en C6 (el envío de datos).  Que versión del CCS tienes?

Saludos!

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #8 en: 26 de Marzo de 2011, 12:13:38 »
Estos son mis programas:

MPLAB ID v8.46
PCWHD Compiler 4.104
Proteus ISIS v7.7 SP2

voy a ver si hay actulizaciones porque como sea eso me has dado una alegria! tu que version utilizas?

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #9 en: 26 de Marzo de 2011, 12:23:49 »
Hola, yo utilizo:

Mplab 8.63
PCWHD Compiler 4.108
Proteus ISIS v7.7 SP2

El Mplab no creo que tenga mucho que ver, pero tal vez si la versión de CCS.

Saludos!

Desconectado Rantamplan

  • PIC10
  • *
  • Mensajes: 38
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #10 en: 27 de Marzo de 2011, 14:39:41 »
Despues de desinstalar todos y volverlos a instalar actualizados, creo que he conseguido que me simule lo mismo que a ti, el problema es que la señal de reloj (pin6) la simula correctamente pero no simula el envio de datos por el pin7:



 Como ya estaba aburrido de tanto simulador he montado dos PIC en la protoboard y los he intentado comunicar uno como maestro y otro como esclavo y ha funcionado a la primera!! :-/ :-/
Asi que mi conclusión es que el programa estaba bien y en este ultimo caso fallaba el simulador del proteus...

Muchas gracias bmb por todo! si no llega a ser por ti seguiria dandole vueltas al codigo....

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema USART modo sincrono maestro e interrupcion TMR2
« Respuesta #11 en: 27 de Marzo de 2011, 15:06:23 »
... Las simulaciones de Proteus suelen ser fiables?

Hola, te iba a contestar eso, pero se me pasó.  Imagino que ya sabes la respuesta. Me alegra que esté funcionando!!!

Saludos!


 

anything