Autor Tema: Ayuda con pic18f2220  (Leído 3994 veces)

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

edutd

  • Visitante
Ayuda con pic18f2220
« en: 29 de Marzo de 2006, 12:12:00 »
Hola estoy programando un pic18f2220 con el MPLAB IDE 7.31 y MPLAB 18C 3.02 en leguaje C.
Tengo una pequeña duda que parece una tonteria, es para hacer una prueba, queria poner en un momento determinado del programa un pin por ejemplo RB0 a uno, yo pensaba que con estas instrucciones bastaba pero veo que no:

trisb = 0x00 ;
portb = 0x01 ;

El caso es que se me pone a uno el bit de menos peso del LATB pero no se me pone a uno RB0,  ¿alguien sabe cual es el problema?.

Un saludo y gracias por la ayuda.
 

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con pic18f2220
« Respuesta #1 en: 29 de Marzo de 2006, 21:39:00 »
Escrito originalmente por edutd
Hola estoy programando un pic18f2220 con el MPLAB IDE 7.31 y MPLAB 18C 3.02 en leguaje C.
Tengo una pequeña duda que parece una tonteria, es para hacer una prueba, queria poner en un momento determinado del programa un pin por ejemplo RB0 a uno, yo pensaba que con estas instrucciones bastaba pero veo que no:

trisb = 0x00 ;
portb = 0x01 ;

El caso es que se me pone a uno el bit de menos peso del LATB pero no se me pone a uno RB0,  ¿alguien sabe cual es el problema?.

Un saludo y gracias por la ayuda.
 



No es un problema es que en realidad debes hacer

LATB = 0x01

El tema es que para evitar el uso de shadow registers, los de microchip han incorporado latches en el puerto B.  De esa forma te alivias la carga del software en este sentido Giño

Como regla general, cuando quieras sacar datos por el PUERTOx , usa LATx

Cuando quieras leer datos de un  PUERTOx, usa PORTx

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

edutd

  • Visitante
RE: Ayuda con pic18f2220
« Respuesta #2 en: 30 de Marzo de 2006, 05:33:00 »
Gracias por la ayuda, voy a probarlo.

Aunque esta mañana he logrado solventar el problema de otra manera (o eso creo), lo que hice fue configurar la salida como salida digital con la instrucción ADCON1, de la siguiente manera:

ADCON1 = 0X0F;
TRISB = 0x00;
PORTB = 0X01;

Por ejemplo aqui consigo que RB0 = 1, ¿es correcto lo que estoy haciendo?, decir que yo por el momento solo voy a trabajar con entradas y salidas digitales.

Un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con pic18f2220
« Respuesta #3 en: 30 de Marzo de 2006, 06:42:00 »
Escrito originalmente por edutd
Gracias por la ayuda, voy a probarlo.

Aunque esta mañana he logrado solventar el problema de otra manera (o eso creo), lo que hice fue configurar la salida como salida digital con la instrucción ADCON1, de la siguiente manera:

ADCON1 = 0X0F;
TRISB = 0x00;
PORTB = 0X01;

Por ejemplo aqui consigo que RB0 = 1, ¿es correcto lo que estoy haciendo?, decir que yo por el momento solo voy a trabajar con entradas y salidas digitales.

Un saludo.


La verdad no se en que puertos tiene canales analógico justo ese pic que estas usando pero si bien no es "erroneo" hacerlo como lo haces, si es MUY recomendable que los seteos de salida a puerto los hagas a través de los latchs y no del registro del puerto mismo.

Si algo ocurre en que quieras setear otro pin del mismo puerto, con algun bsf por ejemplo, la rutina bsf lee el contenido del puerto, modifica el bit en cuestión y lo vuelve a sacar.  Si esto ocurre y la salida con el bit que tu habias seteado antes aún no se puso en 1 por demoras capacitivas el pin se volverá a 0 porque el bsf cuando leyó el puerto lo "vió" como un 0.  Es por eso que directamente se setea el LATx y el latch mantiene fija la tensión para que el puerto en algún momento adquiera el valor deseado.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

edutd

  • Visitante
RE: Ayuda con pic18f2220
« Respuesta #4 en: 31 de Marzo de 2006, 06:49:00 »
Muchas gracias por la ayuda.

Me ha surgido otro problema, soy nuevo con los pic 18f y aunque le estoy metiendo muchas horas me esta costando un poco.

El problema es el siguiente, yo quiero generar con el pwm dos señales que varian en frecuencia de 200 Khz a 100Khz, pero quiero que una señal sea la inversa de la otra con pekeños matices, por ahora tengo el siguiente codigo:

pr1 = 24;
pr2 = 24;
dc1 = 30;
dc2 = 30;
OpenTimer2( TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
while (pr1 <=49)          
   {   
                                OpenPWM1(pr1);
      SetDCPWM1(dc1);
      OpenPWM2(pr2);
                       SetDCPWM2(dc2);
                   pr1=pr1+1;
      dc1 =dc1+2;
      pr2=pr2+1;
      dc2 =dc2+2;

   }
Estas dos señales son iguales, he probado varias cosas, como intentar retrasar el inicio de una para que coincida su flanco de subida con el de bajada de la siguiente, pero no he conseguido nada, lo unico que se me ocurre es o que una de las señales en vez de empezar en su flanco de subida empice en el flanco de bajada, o invertir una de las señales, pero nose si alguna de las opciones es posible.

Gracias por la ayuda y felicitar al foro que es muy interesante, un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con pic18f2220
« Respuesta #5 en: 31 de Marzo de 2006, 13:34:00 »
Escrito originalmente por edutd
Muchas gracias por la ayuda.

Me ha surgido otro problema, soy nuevo con los pic 18f y aunque le estoy metiendo muchas horas me esta costando un poco.

El problema es el siguiente, yo quiero generar con el pwm dos señales que varian en frecuencia de 200 Khz a 100Khz, pero quiero que una señal sea la inversa de la otra con pekeños matices, por ahora tengo el siguiente codigo:

pr1 = 24;
pr2 = 24;
dc1 = 30;
dc2 = 30;
OpenTimer2( TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
while (pr1 <=49)          
   {   
                                OpenPWM1(pr1);
      SetDCPWM1(dc1);
      OpenPWM2(pr2);
                       SetDCPWM2(dc2);
                   pr1=pr1+1;
      dc1 =dc1+2;
      pr2=pr2+1;
      dc2 =dc2+2;

   }
Estas dos señales son iguales, he probado varias cosas, como intentar retrasar el inicio de una para que coincida su flanco de subida con el de bajada de la siguiente, pero no he conseguido nada, lo unico que se me ocurre es o que una de las señales en vez de empezar en su flanco de subida empice en el flanco de bajada, o invertir una de las señales, pero nose si alguna de las opciones es posible.

Gracias por la ayuda y felicitar al foro que es muy interesante, un saludo.


Nunca he usado 2 pwm a la vez pero porque no te fijas en las datasheet? creo que habia forma de usar el ECPP de los pics 18 para generar una señal y la inversa de la misma señal.



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

edutd

  • Visitante
RE: Ayuda con pic18f2220
« Respuesta #6 en: 01 de Abril de 2006, 12:32:00 »
He estado mirando el manual y es cierto que con el ECPP podria resolver mi problema, pero solo es para los pics 18F4x20 y yo estoy utilizando un pic18f2220, asique nada...

Bueno abra que seguir investigando para resolver el problema Sonrisa Gigante

Gracias por la ayuda, se nota que controlas mucho, un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con pic18f2220
« Respuesta #7 en: 01 de Abril de 2006, 17:28:00 »
Escrito originalmente por edutd
He estado mirando el manual y es cierto que con el ECPP podria resolver mi problema, pero solo es para los pics 18F4x20 y yo estoy utilizando un pic18f2220, asique nada...

Bueno abra que seguir investigando para resolver el problema Sonrisa Gigante

Gracias por la ayuda, se nota que controlas mucho, un saludo.


Gracias por tus comentarios.

Volviendo a lo del PWM estas algo complicado si no tienes el ECCP porque no puedes indicarle al módulo que genere en forma invertida.

Solo puedes cambiarle a cada PWM el duty cycle pero la base de frecuencia es la misma.

Creo que podrias usar un inversor por hardware, con un transistor NPN y problema solucionado Giño

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

edutd

  • Visitante
RE: Ayuda con pic18f2220
« Respuesta #8 en: 03 de Abril de 2006, 08:23:00 »
Hola, he estado pensando la idea de poner un inversor a la salida, y no va a ser posible, puesto que tampoco es la señal exactamente inversa, tengo que dejar un tiempo de conmutacion  entre las dos señales para evitar problemas puesto que la idea es alimentar un inversor de puente completo.

Asique la mejor solucion es cambiar de pic Sonrisa Gigante, esta tarde mismo me pongo con un pic18f4550.

Ya comento en el foro que tal va la cosa, Un saludo.