Autor Tema: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}  (Leído 33878 veces)

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

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #15 en: 21 de Abril de 2007, 07:30:13 »
Hola manex_1987, efectivamente es como comentas hay que implementar las funciones getch y putch para poder usar la funcion printf y que se puedan enviar/recibir datos por rs232, por I2C o cualquier otro bus.

Un saludo.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #16 en: 23 de Abril de 2007, 19:52:22 »
Me uno al cambio, he tenido muchos problemas con la última versión del ccs y este Hi-tech pinta bueno...

Arranque modificando la librería lcd.c para trabajar de modo similar a la que tiene el ccs.

Código: C
  1. #define LCD_RS  RC1            //Aca definir los pines de RS y Enable
  2. #define LCD_EN  RC0
  3.  
  4. char lcdline = 1;
  5.  
  6. char const LCD_INIT_STRING[5] = {0x28 , 0x0c, 0x01};
  7.  
  8.  
  9. #define LCD_STROBE      ((LCD_EN = 1),(LCD_EN=0))
  10. #define LCD_DATA PORTC         //Los datos estan en la parte alta del puerto (bits 4 a 7), se puede cambiar al puerto que se quiera
  11.  
  12.  
  13. /* write a byte to the LCD in 4 bit mode */
  14. void lcd_write(char c)
  15. {
  16.         LCD_DATA = (LCD_DATA & 0x0F) |  (c & 0xF0);
  17.         LCD_STROBE;
  18.         LCD_DATA = (LCD_DATA & 0x0F) |  (c << 4);
  19.         LCD_STROBE;
  20.         DelayUs(40);
  21. }
  22.  
  23. /* write a string of chars to the LCD */
  24. void lcd_puts(const char * s)
  25. {
  26.         LCD_RS = 1;     // write characters
  27.         while(*s)
  28.                 lcd_write(*s++);
  29. }
  30.  
  31. /* write one character to the LCD */
  32. //Esto lo agregue del ccs para mandar comandos de posicion y borrado de pantalla.. etc
  33. void lcd_putch(char c)
  34. {
  35.         LCD_RS = 1;
  36.         switch (c) {
  37.                 case '\f':      LCD_RS = 0;
  38.                                         lcd_write(1);
  39.                                         lcdline=1;
  40.                                         DelayMs(2);
  41.                                         break;
  42.                 case '\n':      lcd_gotoxy(1,++lcdline);
  43.                                         break;
  44.                 case '\b':      lcd_write(0x10);        break;
  45.                 default:        LCD_RS = 1;
  46.                                         lcd_write(c);           break;
  47.         }
  48. }
  49.  
  50. /*
  51.  * Go to the specified position
  52.  */
  53. void lcd_gotoxy( char x, char y) {
  54.    char address;
  55.    switch(y) {
  56.      case 1 : address=0x80;break;
  57.      case 2 : address=0xc0;break;
  58.      case 3 : address=0x94;break;
  59.      case 4 : address=0xd4;break;
  60.    }
  61.    address+=x-1;
  62.         LCD_RS = 0;
  63.    lcd_write(address);
  64. }
  65.        
  66. /* initialise the LCD - put into 4 bit mode */
  67. void lcd_init(void)
  68. {
  69.         char i;
  70.         LCD_RS = 0;     // write control bytes
  71.         DelayMs(15);    // power on delay
  72.         LCD_DATA = (LCD_DATA & 0X0F) | 0x30;
  73.         for(i = 0; i < 3; ++i){
  74.                 LCD_STROBE;
  75.                 DelayMs(5);
  76.         }
  77.         LCD_DATA = (LCD_DATA & 0X0F) | 0x20;
  78.         LCD_STROBE;
  79.         DelayUs(40);
  80.         for(i=0;i<3;++i){
  81.        lcd_write(LCD_INIT_STRING[i]);
  82.                 DelayUs(40);
  83.         }
  84. }

Lo que hice fue básicamente pasar la librería de ccs a hi-tech, no es gran aporte pero me entretuvo un rato y me sirvio para darme cuenta que no es tan complicado el cambio.

Ejemplo de uso:
Código: C
  1. #include <pic.h>
  2. #define XTAL_FREQ       12MHZ
  3. __CONFIG(0x3F71);
  4. #include "delay.c"
  5. #include "lcd.c"
  6.  
  7. char texto[13] = {"Hi-Tech PICC"};
  8.  
  9. void main()
  10. {
  11.         TRISC = 0;
  12.         PORTC = 0;
  13.         lcd_init();
  14.         lcd_puts(" Mi primer programa");
  15.         lcd_gotoxy(4,2);
  16.         lcd_puts(texto);
  17.         lcd_gotoxy(5,3);
  18.         lcd_puts("Prueba LCD");
  19.         lcd_gotoxy(4,4);
  20.         lcd_puts("Foro TodoPic");
  21.        
  22.         while(1);

Saludos y espero les sirva.

PD: Les comento que un programa que tenia en ccs lo pasé a hi-tech haciendo únicamente los cambios necesarios y pasó de tener el 93% de memoria de programa a solo el 40%.
Pereira - Colombia

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #17 en: 23 de Abril de 2007, 22:48:22 »
Citar
PD: Les comento que un programa que tenia en ccs lo pasé a hi-tech haciendo únicamente los cambios necesarios y pasó de tener el 93% de memoria de programa a solo el 40%.

queeeeeeeeeeeeeeee  :shock:  Esa es una razon de muchisimo pero muchisimo peso.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #18 en: 25 de Abril de 2007, 03:32:50 »
Citar
PD: Les comento que un programa que tenia en ccs lo pasé a hi-tech haciendo únicamente los cambios necesarios y pasó de tener el 93% de memoria de programa a solo el 40%.

queeeeeeeeeeeeeeee  :shock:  Esa es una razon de muchisimo pero muchisimo peso.

Soy algo esceptico respecto a eso... elegiste el mismo chip? Compilaste el programa al 100%, sin olvidarte ningun fragmento? No te digo que no pueda ser verdad, pero esque parece demasiado bueno como para serlo jejeje.

Yo por mi parte estoy traduciendo la libreria para el display 128x64 grafico HDM64GS12. No sera muy manipulable (pues no se como definir "a la carta" los registros TRISx,LATx y PORTx) pero aquel que lo necesite, en 5min lo tendrá cambiado, pues tan solo seria cambiar las referencias (por ejemplo, cambiar LATC5=0 por LATC3=0 y sucesivamente). Se que con estructuras o defines complejos seria posible, pero ahora mismo no estoy por la labor. Cuando me funcione bien, lo publico.

un salud0

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #19 en: 25 de Abril de 2007, 09:32:08 »
Soy algo esceptico respecto a eso... elegiste el mismo chip? Compilaste el programa al 100%, sin olvidarte ningun fragmento? No te digo que no pueda ser verdad, pero esque parece demasiado bueno como para serlo jejeje.

El programa hace lo mismo, es un control de fase con teclado y pantalla LCD (algo típico) y el pic es un 16f873a, la pantalla muestra demasiadas opciones y eso hace que ocupe mucha memoria, inicialmente lo compile con el ccs y me ocupaba el 63% de rom, luego agregue otras constantes de texto y me dío un error de que la función main estaba muy larga; para quitar este error despues de mucho buscar le coloqué #separate a las dos funciones mas largas del programa y ya compiló sin problemas pero ocupando el 92% de la memoria.  Fue por esta razón que empecé a ensayar el Hi-tech y hasta el momento me ha dado muy buenos resultados, el programa lo tengo casi terminado y solo ocupa el 42% de memoria.

saludos.
Pereira - Colombia

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #20 en: 25 de Abril de 2007, 19:09:21 »
Sigo con mi paso a Hi-tech...

Empezando un programa con el PIC16f676 me da un error al compilar y no se como resolverlo, a ver si a alguien le ha pasado.  El programa en si no hace nada, solo estoy ensayando.

el código:
Código: C
  1. #include <htc.h>
  2. void configura(void);
  3.  
  4. void main(void)
  5. {
  6.         configura();
  7. }
  8.  
  9. void configura(void){
  10.         OPTION = 0b10101000;    //TMRO externo, incremento en cambio L a H,
  11.                                                         //pre-scaler en 1:1 asignado al wdt
  12.         INTCON = 0b01000000;    //Interrupciones de perifericos habilitadas
  13.         TRISA = 0b00001111;
  14.         TRISC = 0b00000010;
  15.         ADCON0 = 0b10000001;         //CAD: Justificación derecha (10 bits)
  16.                                                 //Vref = Vdd, CAD activado.
  17.         ADCON1 = 0b00110000;        //Reloj del CAD interno RC
  18.         ANSEL = 0b00000011;          //AN0 Y AN1, el resto digitales
  19.         T1CON = 0b00110001;         //Timer1 activado, pre-scaler 1:8
  20.                                                //conteo interno
  21.         CMCON = 0b00000111;         //Comparadores desactivados
  22.         PORTA = 0;
  23.         PORTC = 0;
  24. }

al compilar me da los siguientes mensajes:

Advisory[1209]   : An old MPLAB tool suite plug-in was detected. Some options may not work correctly
Advisory[1210]   : Visit www.htsoft.com or contact support@htsoft.com for an update
Error[876] C:\DOCUME~1\ADMINI~1\CONFIG~1\Temp\s27g.as 57 : syntax error
Error[800] C:\DOCUME~1\ADMINI~1\CONFIG~1\Temp\s27g.as 117 : undefined symbol "osccal_val"
BUILD FAILED: Wed Apr 25 16:38:27 2007


Para el pic16f873a he compilado otros códigos sin problemas, solo me falla en el pic16f676 y creo que debe fallar en otros que tengan el registro osccal.

Según el manual del Hi-Tech en la información de los errores:

(800)undefinedsymbol* (Assembler)
Thenamedsymbolisnotdefinedinthismodule,andhasnotbeenspecifiedGLOBAL.

(876)syntaxerror (Assembler,Optimiser)
Asyntax errorhasbeen detected. This could becaused anumber of things.


Lo raro es que el archivo en que supuestamente esta el error (s27g.as) lo busco y no existe, o por lo menos no lo encuentro.

Estoy usando el PICC Compiler 9.50

Espero me puedan colaborar,


saludos.
Pereira - Colombia

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #21 en: 26 de Abril de 2007, 11:43:34 »
a mi me ha salido ese error también cuando uso el #include <htc.h> ¿has revisado si ese pic lo tiene ese header? prueba con el pic.h y pon atención en la ventana output para ver que pic sale en la línea de comandos.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #22 en: 26 de Abril de 2007, 14:57:28 »
Con el pic.h da el mismo error.

Revisé el foro de Hi-Tech y comentan algo sobre el problema y en lo poco que logro entender al parecer se debe a un bug en la versión 9.50 y se soluciona en la 9.50PL2.  Como no tengo la esta última instalé la 8.05 y compiló sin problemas.

Este mismo error se presenta en el PIC12f675, para que lo tengan en cuenta.

saludos.
Pereira - Colombia

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #23 en: 30 de Abril de 2007, 17:00:45 »
Hitech tampoco se salva de los bugs ??? :z)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #24 en: 30 de Abril de 2007, 17:14:02 »
el problema es que no se si es error del compilador o es error mio  :?
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #25 en: 02 de Mayo de 2007, 06:42:30 »
Hitech tampoco se salva de los bugs ??? :z)
Pero, ¿existe algún software sin bugs?. Yo creo que no, dejaría de tener gracia …

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #26 en: 02 de Mayo de 2007, 10:36:16 »
HITECH no se libra no... pero a juicio personal, creo que hitech esta mas maduro que ccs en ese aspecto. acaso es seriedad un bug (una version) por semana? por qué saltaron de 3.249 a 4.000? marketing acaso?  :?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #27 en: 02 de Mayo de 2007, 18:06:10 »
Sí, la verdad es que tienes razón. Lo de CCS no tiene nombre.

Desconectado LadyMandarine

  • PIC10
  • *
  • Mensajes: 21
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #28 en: 08 de Mayo de 2007, 08:09:33 »
Hola, uso PICC de hi-tech y necesito configurar el puerto a como salidas(leds y un buzzer) y el b como entradas(botones) y encender un led y hacer sonar el buzzer cuando se aprieta un botón. Se como se hace en css pero no en picc.
¿Alguien sabe? gracias.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #29 en: 08 de Mayo de 2007, 10:06:12 »
Configurar los puertos es muy sencillo:

Para el puerto A como entrada: 
Código: C
  1. TRISA = 0xFF;
Para el puerto B como salida:     
Código: C
  1. TRISB = 0;

Para encender un led conectado en determinado pin de un puerto puedes hacerlo de la siguiente forma:
* Al inicio del programa agregas estas dos líneas de código:
Código: C
  1. #define bitset(var,bitno) ((var) |= 1 << (bitno))
  2. #define bitclear(var,bitno) ((var) &= ~(1 << (bitno)))

luego en el programa para prender un bit de algún puerto sería:
Código: C
  1. bitset(Puerto,pin);
Por ejemplo:
Código: C
  1. bitset(PORTB,0);  //Para prender el bit cero del puerto B

Para apagar sería lo mismo pero con bitclear

Para verificar el estado de un bit de un puerto poner al inicio del programa:
Código: C
  1. #define bittest(var,bitno) ((var) & (1 << (bitno)))

Luego para verificar el estado por ejemplo del bit cero del puerto A:
Código: C
  1. if(bittest(PORTA,0))  //Verifica si esta en 1 el bit cero del puerto A
  2. {
  3.         //Si esta en 1 ejecuta el codigo.
  4. }


saludos,
Pereira - Colombia


 

anything