Autor Tema: Problema asignacion de nombre a pin (#bit DATO = PORTB.2)  (Leído 3535 veces)

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

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« en: 05 de Diciembre de 2017, 17:42:18 »
Hola, estoy intentando definir nombres para los distintos pines que utilizo en un puerto, con CCS y no me compila.
Si lo pongo en el formato: #bit DATO = PORTB.2 no compila, dice Undefined identified. En cambio si lo pongo en este otro formato : #bit DATO = 0X06.2 si que compila bien.
El problema es que llevo media tarde buscando a ver donde ver que indice corresponde a cada puerto en el PIC18F1220 y no lo encuentro. Por ejemplo el que puse es del PIC16F877, lo vi en el foro, pero no coincide con mi PIC.
¿Una manita?
Gracias.

Saludos.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #1 en: 05 de Diciembre de 2017, 19:50:07 »
Cambia el Portb.2 por PIN_B2

#bit DATO=PIN_B2

Prueba.
« Última modificación: 05 de Diciembre de 2017, 19:53:58 por remi04 »

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #2 en: 05 de Diciembre de 2017, 20:56:55 »
Gracias por la respuesta, pero tampoco funciona asi. Ya lo habia probado, pero lo volvi a probar de nuevo y no funciona.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #3 en: 07 de Diciembre de 2017, 19:36:31 »
Prueba con un define:

Código: C
  1. #define DATO input(PIN_B2)

Saludos.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #4 en: 07 de Diciembre de 2017, 23:07:49 »
Esos pines los utilizo como salida y ya habia probado tambien con el: < #define DATO output(PIN_B2) > y < #define DATO PIN_B2 > y no funciona. Con el primero de esos dos da error al compilar, con el segundo esa linea la acepta sin error, pero a la hora de asignar valor a DATO, da error de no asignado.
Dejalo lo mantendre como esta, o sea con: < output_bit(PIN_B2,1) >.
El querer hacerlo de la otra forma es por hacer mas legible el codigo, pero no vale la pena complicarse.

Saludos

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #5 en: 08 de Diciembre de 2017, 10:43:29 »
Hola de nuevo, ahora que estoy en casa me he pillado la proto y lo he estado probando. Como no tengo un 18f1220 lo he probado con el 4550, pero creo que te va a funcionar igual.

 La dirección del portb en el 1220 es 0x81, y la del porta es 0x80. " Esto lo puedes ver siempre en el datasheet del micro, en la sección de las tablas de registros.

  Me funciona perfectamente poniendolo así:

Código: C
  1. #BIT DATA=0xf81.2
  2. #BIT LED=0xf81.3

luego usandolo por ejemplo en un bucle simple:

Código: C
  1. void main() {  
  2.       while(1) {
  3.                     if (DATA == 0) LED = 1;
  4.                     else LED = 0;  
  5.                 }  
  6. }


  Uso DATA como entrada y LED como salida, me funciona perfecto en un 4550, y también lo hará seguro en el 1220.

Saludos.





Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #6 en: 08 de Diciembre de 2017, 12:05:29 »
Eso ya me gusta mas, precisamente si lees el hilo entero, veras que al principio lo comentaba. Pero al no encontar en la hoja tecnica donde se definen las direcciones de los puertos, no habia conseguido hacerlo funcionar. Lo buscare de nuevo.
En cuanto pueda lo pruebo y te digo.
Gracias.

Saludos.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #7 en: 08 de Diciembre de 2017, 13:47:05 »
Me rindo, no funciona.
Las declaraciones si funcionan, pero a la hora de asignarle valor a los bits definidos da error. Con la misma sintaxis en un PIC12F675 si funciona, pero no en el PIC18F1220.
Definitivamente lo dejo como me funciona.

Saludos.

P.D.: Por cierto no consigo encontrar la descripcion de las direcciones de los puertos en la hoja tecnica. Segun parece hoy no es mi dia.
« Última modificación: 08 de Diciembre de 2017, 13:49:43 por AcoranTf »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #8 en: 08 de Diciembre de 2017, 14:50:45 »
P.D.: Por cierto no consigo encontrar la descripcion de las direcciones de los puertos en la hoja tecnica. Segun parece hoy no es mi dia.

En Memory Organization:

PIC12:

http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf
Pagina 8 o si queres usar la tabla de la pagina 9, ahi tenes la direccion

PIC18:
http://ww1.microchip.com/downloads/en/DeviceDoc/30009605G.pdf
Pagina 47, o las siguientes que son las tablas con un poco mas de info

Por la arquitectura, los PIC18 tienen sus registros en el bacno 15, por eso son Fxx mientras que los PIC16 los tienen en los primeros bancos.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #9 en: 08 de Diciembre de 2017, 17:30:08 »
Me rindo, no funciona.
Las declaraciones si funcionan, pero a la hora de asignarle valor a los bits definidos da error. Con la misma sintaxis en un PIC12F675 si funciona, pero no en el PIC18F1220.
Definitivamente lo dejo como me funciona.

Saludos.

P.D.: Por cierto no consigo encontrar la descripcion de las direcciones de los puertos en la hoja tecnica. Segun parece hoy no es mi dia.

Algo no estas poniendo bien por ahí, mira:



   
« Última modificación: 08 de Diciembre de 2017, 17:34:22 por remi04 »

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #10 en: 08 de Diciembre de 2017, 18:38:37 »
Gracias a ambos por vuestro interes.

A KILLERJC, habia pasado por la pagina 47 del 1220 varias veces, pero no habia visto que los puertos estan justamente los ultimos de la tabla. Otra cosa Killer, ¿tu crees que con el mismo programa y mismo oscilador, puede haber gran diferencia en la ejecucion de un programa tan simple como para que en el 18F1220 la señal sea perfecta sin distorsion y en cambio en el 12F675 haya una distorsion importante? . El proyecto es el mismo EPWM en el que me respondiste a otras preguntas. Este EPWM es generado totalmente por software y no utiliza esa capacidad hardware del 18F1220.

A remi04, Hasta ahora lo he estado intentando en CCS, ya que este proyecto no lo tengo en MPLABX. Lo portare y probare, aunque no tengo mucha confianza de que funcione, ya que como dije antes, en CCS si funciona el 12F675 y no funciona el 18F1220.

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #11 en: 08 de Diciembre de 2017, 19:25:22 »
A KILLERJC, habia pasado por la pagina 47 del 1220 varias veces, pero no habia visto que los puertos estan justamente los ultimos de la tabla. Otra cosa Killer, ¿tu crees que con el mismo programa y mismo oscilador, puede haber gran diferencia en la ejecucion de un programa tan simple como para que en el 18F1220 la señal sea perfecta sin distorsion y en cambio en el 12F675 haya una distorsion importante? . El proyecto es el mismo EPWM en el que me respondiste a otras preguntas. Este EPWM es generado totalmente por software y no utiliza esa capacidad hardware del 18F1220.

Uff pregunta dificil.
Mismo programa en C, pero distinto el resultado ASM. Ademas los PIC18 poseen muchas mas prestaciones en sus instrucciones y arquitectura lo cual lo hace mas rapido. No se que TAN importante es la distorsion que mencionas, si lo haces con un Timer/interrupcion intenta cambiar el estado de otra salida, para ver a la velocidad que lo hace. No se como es que estas implementando el PWM, si lo haces con un for/delays , o con un timer/interrupcion.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #12 en: 08 de Diciembre de 2017, 20:20:42 »
Gracias a ambos por vuestro interes.

A KILLERJC, habia pasado por la pagina 47 del 1220 varias veces, pero no habia visto que los puertos estan justamente los ultimos de la tabla. Otra cosa Killer, ¿tu crees que con el mismo programa y mismo oscilador, puede haber gran diferencia en la ejecucion de un programa tan simple como para que en el 18F1220 la señal sea perfecta sin distorsion y en cambio en el 12F675 haya una distorsion importante? . El proyecto es el mismo EPWM en el que me respondiste a otras preguntas. Este EPWM es generado totalmente por software y no utiliza esa capacidad hardware del 18F1220.

A remi04, Hasta ahora lo he estado intentando en CCS, ya que este proyecto no lo tengo en MPLABX. Lo portare y probare, aunque no tengo mucha confianza de que funcione, ya que como dije antes, en CCS si funciona el 12F675 y no funciona el 18F1220.

Saludos.

Este tambien es en ccs. El Mplabx solo es un IDE pero el compilador que uso es CCS.

  Si quieres mañana te lo compilo con el ide del ccs nativo, pero el resultado va a ser el mismo.

Saludos.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #13 en: 08 de Diciembre de 2017, 20:23:22 »
Fallo mio al decir que era el mismo programa. Habia una "sutil" diferencia que provocaba esa distorsion. Lo estoy haciendo con un for y delays, ya se que no es el metodo optimo, pero es que con timer e interrupciones no consigo buenos resultados, ni siquiera utilizando el EPWM por hardware del 18F1220. Yo creo que el problema esta en que al cambiar el duty en cada ciclo del PWM, se alteran los tiempos del timer y se va todo al carajo.
Ahora la explicacion de esa distorsion con el 12F675, que acabo de solucionar. Como ya dije, el PIC genera un PWM con 4 salidas para activar un puente H. El tiempo en ON de cada ciclo del PWM lo selacciono de una tabla con 32 valores, el tiempo en OFF lo calculo restando al tiempo total, (312 uS), el valor del ON.
Esto genera el primer  semiciclo de la señal de salida, mediante la activacion de dos transistores opuestos del puente. A continuacion cambio los transistores por los otros dos y repito el for, con lo que se genera el segundo semiciclo.
Transcurrido el tiempo de ON, desactivaba los dos transistores y activaba el delay del OFF, pero entonces la carga de AC quedaba flotante hasta la activacion de los otros transistores y de ahi la distorsion. La solucion es sencilla, desactivar solo el transistor de la parte alta y transcurrido el tiempo de OFF, desactivar el de la parte baja justo antes de cambiar a la otra pareja de transistores.
Esa modificacion la hice hace tiempo en el programa del 18F1220, pero me olvide de hacerla en el 12F675 y de ahi la diferencia.
Adjunto el programa y unas capturas.

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema asignacion de nombre a pin (#bit DATO = PORTB.2)
« Respuesta #14 en: 08 de Diciembre de 2017, 20:27:15 »
Citar
Ahora la explicacion de esa distorsion con el 12F675, que acabo de solucionar. Como ya dije, el PIC genera un PWM con 4 salidas para activar un puente H. El tiempo en ON de cada ciclo del PWM lo selacciono de una tabla con 32 valores, el tiempo en OFF lo calculo restando al tiempo total, (312 uS), el valor del ON.

Pense que lo hacias con un for y un delay fijo.. de esa forma  solo te preocupas por el momento en que debes apagar la salida y al comienzo encender todas, de esa forma no necesitas calcular nada, un simple contador y cuando es igual apagas.

Por suerte ya encontraste el problema.