Autor Tema: Mini curso "Programación en XC8"  (Leído 588122 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #90 en: 21 de Junio de 2013, 18:23:30 »
Citar
Que versión tienes de xc8? Limbo)
xc8 v1.12

Citar
Fijate que yo pase el zippara que lo bajes y habras directamente con mplabx ...y tambien para la simulacion con proteus ...
Ya ya, tus archivos no me compilan tampoco.. por eso creo que es algo del compilador pero no logro descubrir que es..

  Prueba incluir delay.h antes de incluir la librería del LCD
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Limbo

  • PIC10
  • *
  • Mensajes: 44
Re: Mini curso "Programación en XC8"
« Respuesta #91 en: 21 de Junio de 2013, 19:23:16 »
Citar
  Prueba incluir delay.h antes de incluir la librería del LCD
Ya probe todo eso, porque sé que hay liso aveces con el orden de las librerias, pero nada, lo he vuelto a probar lo que dices y nada.

Creo que avanzo, la libreria la he cambiado de lcd_pic16.c a lcd_pic16.h y solo me salta este error ahora sin tocar nada mas:

Código: [Seleccionar]
:: warning: Omniscient Code Generation not available in Free mode
:0: error: undefined symbols:
        _WriteCmdXLCD(dist/default/production\pru18.X.production.obj) _putrsXLCD(dist/default/production\pru18.X.production.obj) _OpenXLCD(dist/default/production\pru18.X.production.obj) _BusyXLCD(dist/default/production\pru18.X.production.obj)
(908) exit status = 1
Solo he cambiado la extension de la libreria y me da este error... ¿Alguna sugerencia?¿Porque al cambiar la extension em da solo un error?

Desconectado Limbo

  • PIC10
  • *
  • Mensajes: 44
Re: Mini curso "Programación en XC8"
« Respuesta #92 en: 21 de Junio de 2013, 20:06:25 »
Solucionaaaaaadooooo :-/ :-/ :-/ :mrgreen: :mrgreen: :mrgreen: ((:-)) ((:-)) ((:-)) jajajaja Que corra el ron! jaja 2 dias dandole vueltas... Ha dado la casualidad de que esta tarde estaba probando cosas y he dejado en el proyecto añadido una libreria de otra prueba, que pasa, que modificaba la que no era, cuando me he puesto esta noche jaja El error de arriba me lo saba por eso.. Pero lo mas curioso es que si incluyo la libreria como lcd_pic16.c da error de compilacion, pero si la incluyo como lcd_pic16.h, walá, compila perfecto..
Claro, yo lo puse como .c porque asi venia en el zip que nos dejo el compañero Rseliman, aunque supuestamente hay gente que le funciono con .c ¿Alguien sabe porque? Si es archivo header lo toma de diferente modo, ¿se autoincluye alguna libreria o algo? No lo entiendo..

Una cosa, el LCD me parpadea como si fuera un bucle pero no hay bucle.. esta constantemente escribiendo, es coorecto?

Gracias!!
P.D: Espero que el teclado no me de tanto quebradero jaja  :mrgreen:
« Última modificación: 21 de Junio de 2013, 20:16:08 por Limbo »

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Mini curso "Programación en XC8"
« Respuesta #93 en: 21 de Junio de 2013, 20:42:52 »
Si no dejas un tiempo entre escritura estará actualizando tan rápido que parecería estar parpadeando intenta poner un delay y prueba

Desconectado Limbo

  • PIC10
  • *
  • Mensajes: 44
Re: Mini curso "Programación en XC8"
« Respuesta #94 en: 21 de Junio de 2013, 21:00:21 »
Citar
Si no dejas un tiempo entre escritura estará actualizando tan rápido que parecería estar parpadeando intenta poner un delay y prueba
No, no, digo que el programa se repite indefinidamente sin haber bucle en ningun sitio..
Si pongo un bucle while al final del main. me muestra elemnsaje sin parpadeo porque solo lo escribe una vez, me explic?Es un bucle infinito del programa entero.. Hay alguna configuracion del pic o del mplab que haga esto sin necesidad de un bucle?

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re: Mini curso "Programación en XC8"
« Respuesta #95 en: 21 de Junio de 2013, 21:12:22 »
Las extensiones h se usan para los header, o sea para las definicion de las funciones por ejemplo


1.h

void prueba(void); //defino la funcion prueba


1.c

#include 1.h

  void prueba(int)   // funcion prueba , devuelve c
  {
int a  ;
int b  ;
int c ;


c= a + b ;

return  ;
  }


main.c

#include 1.c

while (1)

{
int d;

d = prueba() ;  // d es igual al valor calculado en prueba

}


espero haber ayudado y que este bien ...tambien estoy aprendiendo ....


Saludos



Ahhhh otra cosa ...si estas usando Mplabx ....en el arbol que aparece al costado del IDE ...no definas las funcines en souce ni en header ....solamente el main en source ....me explico ???

yo particularmente en souce defino un archivo como configuration_bits.c que es donde estan todos los pragma de definicion de fuses del pic ...que el mplabx los da en foema manual ...es muy facil hacerlo


Saludos
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #96 en: 22 de Junio de 2013, 09:20:16 »
Citar
Si no dejas un tiempo entre escritura estará actualizando tan rápido que parecería estar parpadeando intenta poner un delay y prueba
No, no, digo que el programa se repite indefinidamente sin haber bucle en ningun sitio..
Si pongo un bucle while al final del main. me muestra elemnsaje sin parpadeo porque solo lo escribe una vez, me explic?Es un bucle infinito del programa entero.. Hay alguna configuracion del pic o del mplab que haga esto sin necesidad de un bucle?

Si tu programa es un bucle infinito en sí mimos

Código: C
  1. voidmain(void)
  2. {
  3.   while(1)
  4.   {
  5.     .....
  6.     .....
  7.     .....
  8.     escritura en lcd
  9.     ......
  10.     ......
  11.   }
  12. }

  Debes asegurarte que entre escritura y escritura haya un delay... o mejor aún, escribir en el LCD únicamente cuando sea necesario. Si estás mostrando algún dato, sólo escribir en el LCD si el dato cambio de valor.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Limbo

  • PIC10
  • *
  • Mensajes: 44
Re: Mini curso "Programación en XC8"
« Respuesta #97 en: 22 de Junio de 2013, 10:16:21 »
Citar
Si tu programa es un bucle infinito en sí mimos
Mi programa no es un bucle que yo defina,¿ o quieres decir que TODO programa en mplabx es un bucle? Yo siempre, tanto en C como en asembler hacia un bucle infinito para que el programa no se acabara, sino no se veia el resultado del programa, me explico?
Citar
Las extensiones h se usan para los header, o sea para las definicion de las funciones por ejemplo
Ya ya, pero esa no es la cuestion, la cuestion es porque me funciona con la extension .h y con la .c no..
Citar
Ahhhh otra cosa ...si estas usando Mplabx ....en el arbol que aparece al costado del IDE ...no definas las funcines en souce ni en header ....solamente el main en source ....me explico ???
mmmm que ocurre sino hago eso? Tengo añadidos el archivo main y el archivo de libreria en source... ¿Donde añado las librerias sino?

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re: Mini curso "Programación en XC8"
« Respuesta #98 en: 22 de Junio de 2013, 12:43:30 »

mmmm que ocurre sino hago eso? Tengo añadidos el archivo main y el archivo de libreria en source... ¿Donde añado las librerias sino?

[/quote]

Saca el archivo de la libreria en source ...ahi solamente pone el main.c  y si queres hacer mas legible el main ...separa los pragma en un archivo diferente ...configuratiob_bits.c ...que ese si lo agregas en el source junto con el main ....desp las librerias las agregas con los #include al rpincipio del main ...ahi te puese un ejemplo ....en el main.c al principio pones #include la libreria.c ...y al principio de la lñibreria pones el #include libreria.h que es donde estan los headers ...que son las definiciones de las funciones ....me explico ....si haces esto y a su ves los agregas en el source ...vas a tener conflictos ...y errores que no vas a saber de donde vienen .....te vuelvo a repetir yo logre compilar bien ..solamente teniendo en el arbol de la izquierda ..en el source ...el main y el config bits ....y nada mas


Saludos

Saludos
« Última modificación: 22 de Junio de 2013, 12:47:24 por Rseliman »
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re: Mini curso "Programación en XC8"
« Respuesta #99 en: 22 de Junio de 2013, 12:52:43 »
Me estoy imaginando lo siguiente --...

Si pones en el arbol ...en el source el main ...hasta ahi todo bien ...desp le agregas los pragma en un cof bits .c ...seguimos bien ....pero en el moemnto de agregar un libreria .c .....el programa no sabe donde va esa libreria ...porque no es general ...o sea deberia en otra libreria por ejemplo una depende de la otra ...entonces i la pones en el source ...como sabe el IDE donde va ??? ...ojo es solo algo que yo me imagino y pienso ...si a alguien se le ocurre algo diferente que lo exponga ....lo mismo pasa con los headers ...si los pongo en el arbol ...el ide adonde los asocia ??? a que .c ???? me explico ???


Saludos
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re: Mini curso "Programación en XC8"
« Respuesta #100 en: 22 de Junio de 2013, 13:02:06 »
Muchachos ...alguien me puede explicar estos defines por favor ...no logro entenderlos ??? ...los primeros si ...pero los ultimos o los entiendo

   #define TxTris TRISA
   #define TxPort PORTA   //-- PORT A Bit 1 for Tx
   #define TxBit  1



   #define RxTris TRISA
   #define RxPort PORTA    //-- PORT A Bit 0 for Rx
   #define RxBit  0
 



 #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
  

  static bit   TxData @ PORTBIT(TxPort,TxBit);   //-- TXD Pin
  static bit   RxData @ PORTBIT(RxPort,RxBit);   //-- RXD Pin
  static bank1 bit TxTRIS @ PORTBIT(TxTris,TxBit);
  static bank1 bit RxTRIS @ PORTBIT(RxTris,RxBit);
  bit   TxRxInit = 0;

Muchas gracias

« Última modificación: 22 de Junio de 2013, 13:04:54 por Rseliman »
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Mini curso "Programación en XC8"
« Respuesta #101 en: 23 de Junio de 2013, 18:35:40 »
Tengo un pequeño problema que creo que se debe a que la rutina de interrupción no salvaguarda bien los datos.

¿Como se salva el contexto en las interrupciones con XC8? ¿Es todo automático o hay que hacerlo a mano para ciertos registros?


Saludos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #102 en: 23 de Junio de 2013, 18:51:54 »
Tengo un pequeño problema que creo que se debe a que la rutina de interrupción no salvaguarda bien los datos.

¿Como se salva el contexto en las interrupciones con XC8? ¿Es todo automático o hay que hacerlo a mano para ciertos registros?


Saludos.

  Según tengo entendido, es todo automático.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Rseliman

  • PIC16
  • ***
  • Mensajes: 239
Re: Mini curso "Programación en XC8"
« Respuesta #103 en: 23 de Junio de 2013, 19:18:10 »

Programa Ejemplo
Código: C
  1. #include <xc.h>
  2.  
  3. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  4. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  5. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  6. #pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
  7. #pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  8. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  9. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  10. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  11.  
  12.  
  13.  
  14. //#define _XTAL_FREQ 26000000
  15. #include "swuart.h"
  16.  
  17. void main(void)
  18. {
  19.     unsigned char mensaje[10] = "TodoPic";
  20.     unsigned char *punterostring;
  21.     unsigned char caracter;
  22.  
  23.     punterostring = mensaje;
  24.     caracter = 'a';
  25.     swinit_uart();           //inicialiso el UART
  26.     swputch('H');
  27.     swputch('o');
  28.     swputch('l');
  29.     swputch(caracter);       //mando la palabra Hola letra por letra
  30.     swputch('\r');           //salto de linea
  31.     swputs(mensaje);         //mando la cadena almacenada en mensaje
  32.     swputch('\r');           //salto de linea
  33.     swgets(punterostring);   //recibo una cadena terminada con '\r'
  34.     swputch('\r');           //salto de linea
  35.     swputs(punterostring);   //mando la cadena apuntada por punterostring
  36.                              //(recibida anteriormente)
  37.  
  38.     while(1);
  39. }
[/quote]


Perdon AngelGris ....como yo veo la subrutina ...segun entiendo ...con lo poco que se , que en el main , deberias referirte al swuart.c y NO al swuart.h ...


O sea que primero debes incluir el swuart.c para que el mismo incluya los headers ..en el swuart.h ...

Perdon si me equivoco ...


Saludos
Las Grandes Obras las sueñan los grandes locos , mientras los inutiles las critican !!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #104 en: 24 de Junio de 2013, 10:57:24 »

Perdon AngelGris ....como yo veo la subrutina ...segun entiendo ...con lo poco que se , que en el main , deberias referirte al swuart.c y NO al swuart.h ...


O sea que primero debes incluir el swuart.c para que el mismo incluya los headers ..en el swuart.h ...

Perdon si me equivoco ...


Saludos

  El archivo .C lo agrego directamente en el árbol del proyecto en "source files"

  Por lo que puede verse en el log que muestra el compilador, al hacerlo de esta manera se compila cada archivo por separado (cada uno que se encuentre en "source files") y luego se linkean todos.

  Anteriormente yo sólo creaba un archivo .C y lo incluía directamente en el programa -como tú comentas- pero después de mucho ver códigos tanto para microcontroladores como para PC he notado que no incluyen directamente el .C en el programa principal sino que incluyen los header.

De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything