Autor Tema: CCS, TIMER1, config de prescaler y postscaler 16F877A  (Leído 3724 veces)

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

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
CCS, TIMER1, config de prescaler y postscaler 16F877A
« en: 19 de Marzo de 2014, 16:55:16 »
Hola, buenas tardes,

Estoy migrando un programa de XC8 a CCS 4.104 y tengo problemas con el ajuste fino del TIMER1, necesito que salte una int cada 500ms, en el XC8 usaba:

Código: [Seleccionar]
TMR1H = 0b01011101 // 23869
TMR1L = 0b00111101 // 500 ms

pero en CCS lo único que tengo es

Código: [Seleccionar]
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); // da algo así como 524ms

¿Como puedo configurar el prescaler y el postscaler en CCS?

Muchas gracias,
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #1 en: 19 de Marzo de 2014, 17:32:54 »
en xc8 estabas cargando un valor al registro del timer 1, en ccs lo puedes hacer usando la function set_timer1(xxx) donde x es el valor que desees

si lo configuras con un cristal de 4M

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(3036);

con esto tendrás un tiempo de desbordamiento de 500 ms

4/4000000 *8 * (65536-3036)= 0.5
"Nada es imposible, no si puedes imaginarlo"

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #2 en: 19 de Marzo de 2014, 19:04:30 »
hola rivale, era demasiado simple  ((:-))

muchísimas gracias, ahora me queda probar si el CCS genera más código que el XC8, porque ese es el motivo por el que migro,

muchas gracias,

saludos
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #3 en: 19 de Marzo de 2014, 19:09:22 »
que bueno que te sirvió, despues de que hagas la comparación podrías postear tu resultado, para saber que tanto varian los compiladores

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #4 en: 19 de Marzo de 2014, 19:58:44 »
Si, claro, para el viernes debe estar migrado, probado en el proteus y en la protoboard, asi que para el fin de semana cuento el resultado
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #5 en: 21 de Marzo de 2014, 15:07:06 »
Hola rivale, buenas tardes,

la migración al CCS fue todo un fracaso, por varios motivos, en principio, la memoria

en XC8 FREE la memoria ocupaba un 78.3% y en PRO un 63%

en CCS, habiendo declarado aprox un 30~40% de las variables saltó un error de ram llena,

leyendo el man de CCS vi que por ejemplo las estructuras devoran compulsivamente la memoria, sin embargo, después de cambiar las estructuras por arrays y otros cambios similares, el mensaje de memoria llena salto al declarar un 50~60% de las variables necesarias

el código es otro tema

en CCS las asignaciones son... "raramente incomprensibles", por ej. no se puede hacer un PIN_A1 = 1, se hace un output_hight( PIN_A1 ), y por otro lado se pueden asignar puertos a variables, algo que debería tener XC (y si lo tiene sería una muy buena noticia) por ej.

Código: [Seleccionar]
#byte puerto_B = 0x06 // hex del puerto RB

puerto_B = 0b11110000;

esto ocupa memoria, tan preciada en CCS porque son referencias (punteros +/-) con su código asociado para la actualización de los datos del puerto

o sea que la migración no es "casi" copiar y pegar, pero bue, tampoco es tan grave, lo único que hice es cambiar las asignaciones y reemplazar los PORTXbits.RXx por PIN_Xx

en manejo de la flash, un completo fracaso, alcancé a migrar aprox u 70% del código y el CCS me dijo que la flash desbordaba, el XC8 FREE llegó a un 99,6% y el PRO a un 65,5%

mi conclusión es que XC8 incluso en la versión free es superior en todos los aspectos a CCS, y pesa mucho que CCS esté tan lejos del estandard ANSI

una aclaración, antes de la migración tenía el XC8 1.21, después de la migración actualicé a 1.30 y los porcentajes de ram y flash bajaron entre un 3 y un 5%

no hay dudas que me quedaré con el XC8, en principio me costó la elección porque no encontraba ayuda en los foros para comenzar, está repleto de temas sobre CCS pero casi nada sobre XC, pero viéndolo me di cuenta que el man es muy completo y casi no hace falta pedir ayuda, cosa que no pasa en CCS,

te cuento de que se trata el proyecto, debería haber comenzado con esto :D pero bue,

es un equipo con una serie de temporizadores, 15 en total, que activan/desactivan actuadores, este equipo tiene un 877A con un CD4094 que maneja un LCD 16x2 con un HD44780 donde se muestran los datos de uso y de configuración,

este equipo inicialmente tenía un display de 7 segmentos con 15 leds y decidimos reemplazarlos con el LCD, pero las rutinas para manejar el 4094 y el 44780 me consumían muchísima flash, necesaria para funcionalidades futuras, es por eso que decidí probar con la migración a CCS,

pero ahora optamos por otra solución de bajo costo: reemplazar el 4094 con un 628A, conectarlo al 877 y delegarle al 628 todas las tareas de escritura en el LCD, son $25 de diferencia, un 4094 esta $5 y un 628 $30, el 4094 escribía en un bus de 4 bits (DB4~DB7) con las demoras asociadas (aunque use el strobe), el 628 supongo que es más rápido en ese sentido porque usará el bus completo de 8 bits (DB0~DB7 más RW, RS, E y el pin de encendido de la luz de fondo)

veremos como resulta,

saludos
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #6 en: 21 de Marzo de 2014, 15:48:06 »
gracias por compartir tus resultados, no me imaginé que hubiera tanta diferencia en la optimización de ambos compiladores, yo casi siempre uso el CCS por que con ese empecé y solo reutilizo rutinas anteriores que no he pasado a xc8, pero creo que tendré que hacerlo eventualmente.


por lo que veo estas explotando al máximo el 877, te recomendaría usar algún modelo mas reciente, como el 887 o el 1939 que tienen much mas memoria
"Nada es imposible, no si puedes imaginarlo"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #7 en: 21 de Marzo de 2014, 16:18:01 »
El 877 esta siendo discontinuado, cualquiera de los modelos que menciona Rivale sale por lo menos 2 a 3 dolares menos, con muchisimas mas prestaciones.
Ya la memoria dejo de ser un impedimento para elegir compilador, con los nuevos PIC.

Para mi lo importante es saber en cuanto tiempo lanzo el producto, mas que si uso un PIC mas poderoso o no. Por eso uso CCS.
Igual si elijo, me quedo siempre con el micro mas nuevo y poderoso...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #8 en: 21 de Marzo de 2014, 17:01:58 »
mi preferencia inicial por el XC es porque soy programador desde hace varias décadas, en C y C++, y es casi intuitivo, el CCS no, a esto le sumo todo lo que conté y además el MPLAB X IDE revuelca en todo sentido al IDE de CCS, eso para mi es muy importante, no tanto como el compilador, pero pesa muchísimo, es el entorno donde paso muchas horas del día, y si no me siento cómodo, no produzco al 100%

lo del 877 tenes razón, el 887 es más reciente y con casi el doble de flash del 877 pero por un proyecto anterior tenemos un stock muy grande de 877 que hay que darles uso,

estuve viendo el 1939 y tiene más del triple de flash que el 877 y casi el triple de ram a un costo cercano al 877 en Argentina, muchas gracias por el dato
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: CCS, TIMER1, config de prescaler y postscaler 16F877A
« Respuesta #9 en: 21 de Marzo de 2014, 17:25:07 »
el 1939 es 2 generaciones despues del 877, la forma de descontinuar los productos es subir el precio de los modelos viejos para que se compren los modelos recientes, que además tienen prestacines muy superiores
"Nada es imposible, no si puedes imaginarlo"