TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: manex_1987 en 12 de Abril de 2007, 07:42:22

Título: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 en 12 de Abril de 2007, 07:42:22
Buenas! Por alli se comentaba la iniciativa de la gente de ponerse con hitech, y dado que yo tambien me he mudado de ccs, pues abro este post para que vayamos construyendo poco a poco el castillo.

- Aunque mplab es un IDE muy completo, os recomendaria (desde mi punto de vista claro) el hi-tide a aquellos que no se puedan emancipar facilmente del ccs (a mi el mplab me vuelve loco). Trae simulador y todo ya asique no problemmo... aunque no lo he probado.

-De donde conseguirlo? Pues nada, os bajais la licencia de estudiante o lo que sea. No creo que este foro sea el adecuado para promulgar descargas ilegales asi que, que cada cual haga lo que mejor le parezca.

-Una vez instalado Picc y Hi-Tide (primero el compi y luego el hi-tide si los instalamos por separado), ya podemos empezar a salsear. La carpeta "samples" trae un monton de ejemplos para ir cogiendo el truco.  Eso, en la carpeta del compilador osea  x:\archivos de programa\hitech software\picc-18\samples\ (yo uso picc18).

Convendria tambien que consiguierais el manual de referencia para buscar un poco. Bueno, yo tampoco he empezado a salsear demasiado pero cuando empiece a hacer ejemplos y asi, ya ire poniendo. La verdad este compilador me da bastante buena pinta. Ya se que mi post no ha aportado demasiado (jejej) pero bueno, que sirva de inauguracion al menos  :mrgreen:

Venga a programar, vengaaaaa
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse en 12 de Abril de 2007, 09:41:48
 :-/ :-/ Aca estoy para iniciar con esto.  8)  Te acompaño para apoyarte en lo que pueda y me diras que hay que hacer.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 12 de Abril de 2007, 12:01:04
Te apoyo con este post manex, dejame buscar unos ejemplitos que he estado haciendo y los cuelgo por aquí para ir dandole palo  :D

la migración que hablas es de los que vienen del CCS, ¿cierto?

si es así entonces la principal dificultad a vencer, es conocer el estandar ANSI C ya que el CCS se deslinda un poco de éste.

se puede empezar con un ejemplo super básico como encender un led, como se programa la word configuration y como se declara la frecuencia del cristal. esto sería parte del conocimiento de sus directivas necesarias para escribir un código.

dame un chance y lo subo.  :)

Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse en 12 de Abril de 2007, 12:10:30
eso eso eso....  :P
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 en 12 de Abril de 2007, 19:50:19
Bueno, yo por mi parte, os dejo el manual del compi picc18 en pdf. Si el documento es considerado de uso res3rvad0 (osea, poco conveniente para los intereses de supervivencia del foro), carta blanca para que el debido mod borre sin mas aviso ni dilacion este post. Ahi queda eso.

Volviendo al tema, el manual es muy completo, y explica bastante bien las cosillas del ansiC, sintaxis, datos, etc etc... El 60% del doc es inutil pues habla que si del linker,del ensamblador, etc etc (digo inutil pero en terminos de que no sirve para aprender picc... los mas pros sabreis como usar esas funcionalidades).

Me estoy sintiendo bastante comodo por estos lares, demasiado comodo jej

http://www.megaupload.com/?d=BYEOSEWR
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse en 12 de Abril de 2007, 19:53:00
amigo no se puede descargar... :? me dice que no esta disponible para descargarlo. Puedes intentar en http://rapidshare.com/
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 en 13 de Abril de 2007, 05:58:59
Acabo de probar y me va perfectamente.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse en 13 de Abril de 2007, 10:43:55
manex_1987, Hoy si me permite descargar, pero cuando va por la mitad me dice que el servidor reinicio la comunicacion.  :?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 13 de Abril de 2007, 13:02:48
bueno ahí monto el primer ejemplillo para empezar a curiosear jeje

- se trata de "togglear" el pin RB0 del 16F877. frecuencia del cristal = 4Mhz
y retardo de 1 ms entre cambio

Código: C
  1. #include        <pic.h>
  2.  
  3. #define XTAL_FREQ       4MHZ  
  4. #include        "delay.c"  // necesario para llamar a DelayMs
  5.  
  6. __CONFIG(0x3F71);
  7.  
  8. void main(){
  9. TRISB=0x0; // PORTB <- salida
  10.  
  11.         while(1){   // bucle eterno
  12.                 PORTB=0x1;   // RB0 <- 1
  13.                 DelayMs(1);   // retardo 1 mS
  14.                 PORTB=0x0; // RB0 <- 0
  15.                 DelayMs(1);
  16.         }
  17. }


Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: metalm en 17 de Abril de 2007, 16:46:01
Hola como estan, yo siempre use HT pic para pic16 y IAR para pic18 hasta que empece a usar CCS... luego de que tuve un par de problemas con la funcion de interrupcion y el puerto serie, migré directamente a HTpic 18 ya que me parece un compilador serio y en cual poder confiar...

Lo que me atrajo principalmente del CCS es la posibilidad de utilizar el PRINTF para comunicarse con el puerto serie, el manejo automatico de una pata para "enable" (RS485) y el uso de printf para llamar funciones de 8 bits, como por ejemplo una funcion que escribe un caracter en el LCD (llamada _escribir en mi programa) la cual me permitia escribir "printf(_escribir, "mensaje")" y simplificaba mucho las cosas.

Otras cosas que me interesaron y hasta me parecian indispensables, son las funciones de delay integradas, las operaciones con BITS (bit test, bit set, etc) y las rutinas para RS232 por software.

Despues del problema que tuve decidi desligarme de tantas cosas buenas y empezar a trabajar en serio jaja
Lo que no me gusta del HT pic es que no tiene todas esas funciones que ayudan al programador  :( :( pero buen... si les sirve de algo les dejo los strings que uso para acceder a la configuracion del micro, igual que como se hacia con el preprocessor "FUSES":

#include <pic18.h>

// CONFIGURATION BITS:
__CONFIG(1, HSPLL & FCMDIS & IESODIS);
__CONFIG(2, PWRTEN & BORDIS & WDTPS128 & WDTDIS);
__CONFIG(3, MCLRDIS & PBANDIS & LPT1DIS);
__CONFIG(4, STVRDIS & DEBUGDIS & LVPDIS & XINSTDIS);
__CONFIG(5, CPALL);
__CONFIG(7, TRPALL);


La funcion de __CONFIG (con doble guion bajo al principio) permite acceder a los registros de configuracion (1, 2, etc)
Las opciones dentro de cada registro se pueden encadenar con AND (como se ve en el ejemplo) y para saber cuales son estas opciones, simplemente hay que fijarse abajo de todo en el archivo de INCLUDE de cada micro (en este caso, pic18f4620.h)

El header file que debe ser incluido si o si para acceder a esta funcion es "pic18.h"

Bueno, es mi primer mensaje, espero que les sirva y espero me puedan dar una mano tambien que se me esta poniendo complicado el laburo!!!

saludos,
Diego.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 18 de Abril de 2007, 17:16:25
Hola metalm y bienvenido al foro. muy agradecido por tu aporte

recien empiezo a usar el hitech y viendo el include al pic18.h, supongo que el compilador selecciona el micro que yo quiero mirandolo en el IDE MPlab (el que se escogió) , porque no se de donde podrá saber cual de todos es.


te podremos ayudar en cualquier duda que tengas siempre que el tiempo y los conocimientos nos lo permita.  :)
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: omix en 19 de Abril de 2007, 14:57:55
Hola metalm y bienvenido al foro. muy agradecido por tu aporte

recien empiezo a usar el hitech y viendo el include al pic18.h, supongo que el compilador selecciona el micro que yo quiero mirandolo en el IDE MPlab (el que se escogió) , porque no se de donde podrá saber cual de todos es.


te podremos ayudar en cualquier duda que tengas siempre que el tiempo y los conocimientos nos lo permita.  :)
Hola, si tienes el compilador integrado en el mplab, si que puede que ocurra eso que dices (lo desconozco pues yo compilo en linea de comandos mediante un fichero .bat), pero en todo caso la opcion para especificar el micro es con el nombre del micro, por ejemplo PICC18.exe -18F8720 para el caso de versiones del compilador 8.xx o PICC18.exe --CHIP=18F8720 para el caso de versiones del compilador 9.5x o superiores.

Un saludo.

Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: metalm en 19 de Abril de 2007, 22:19:38
Hola denuevo!

Estoy haciendo un programa que tiene que mostrar una pantalla de leds, y como utiliza tonos de gris, el micro lo tengo que aprovechar al maximo.

Probé compilar el programa con el HT-PIC refrescando los leds al maximo (al tiempo de instruccion, en 40 mhz) y se llegaba a notar el parpadeo. El tiempo que tardaba en completar el ciclo de PWM (por software) era como de 24 ms y para que se vea bien deben ser alrededor de 15 ms por ciclo.

Ya estaba intentando en meterme en el assembler, pero como no se (y para probar a ver que pasaba), decidí trasladar el programa al CCS (yo utilizo la version PCWH 3.222) y noté un resultado infinitamente mejor en la cantidad de instrucciones del assembler y en la velocidad!! este nuevo programa tardaba 5 ms en completar el ciclo, y el mismo programa lo hizo en 100 instrucciones de assembler, cuando el de HT lo generaba en 250....

La duda es, será que como yo utilizo este compilador mediante el IDE del MPLAB no tengo habilitada la optimización al máximo? Porque con el HT-pic que usaba para mid-range (pic 12, pic16) yo podía setear la optimización al máximo ya que este tenía una interfaz gráfica al menos...

Cuando lo tenga disponible posteo este programa si es de su interes.

gracias por todo!
Diego.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 20 de Abril de 2007, 11:24:34
si he visto la opción de optimización del hitech en MPlab, y creo haber visto 2 tipos: una era la tipica optimización y la otra se refería a la forma de mostrar el código en asm (dejame revisar).

pero en este caso ya debería estar al máximo por defecto, no puede ser que genere tanto código. esa parte no la he detallado.

Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 en 21 de Abril de 2007, 07:16:20
Una pregunta:

Para enviar cositas en printf al rs232, es verdad que hay que definir las funciones "getch" y "putch"? Esque lo he visto en algun lugar pero prefiero que la experiencia lo corrobore. Aparte de que hay que configurar el puerto serie y todo eso jejeje.

Sabeis, propongo que hagamos entre todos una libreria de funciones basicas para el PICC18. Entre DEFINEs (definir macros, por ejemplo para inicializar el puerto serie, el I2C, etcetera) y funciones y subrutinas (getch,putch,i2c,memorias...) podriamos hacer un gran "funciones.C" para que no tengamos que envidiar nada al CCS. Porque es que la verdad, el PICC18 trae muchisimos includes que parecen bastante inutiles.

A fin de cuentas, propongo sintetizar lo util de todos esos includes, y añadirles nuestras propias funciones. eeproms,lcds,lcds graficos, lo que se nos ocurra. Mejor para todos asi.

un saludo!
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: omix 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia 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%.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 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
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ 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.

Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LABmouse en 30 de Abril de 2007, 17:00:45
Hitech tampoco se salva de los bugs ??? :z)
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 30 de Abril de 2007, 17:14:02
el problema es que no se si es error del compilador o es error mio  :?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: Nocturno 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 …
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 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?  :?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: Nocturno en 02 de Mayo de 2007, 18:06:10
Sí, la verdad es que tienes razón. Lo de CCS no tiene nombre.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine 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.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia 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,
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 08 de Mayo de 2007, 14:19:54

Mil millones de gracias, funciona perfectamente. Lei en estos comentarios que para utilizar la función DelayMs era necesario disponer de la libraria delay.h. Peor mi versión de PIC no la tiene. Hay alguna otra forma de generar un retardo en HI-TECH??. Gracias de nuevo.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 08 de Mayo de 2007, 14:41:31
Mil millones de gracias, funciona perfectamente. Lei en estos comentarios que para utilizar la función DelayMs era necesario disponer de la libraria delay.h. Peor mi versión de PIC no la tiene. Hay alguna otra forma de generar un retardo en HI-TECH??. Gracias de nuevo.

Regálame tu correo te envio los archivos para los retardos.

saludos.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 09 de Mayo de 2007, 04:18:04
Muchas gracias por todo. Este es mi correo:
ebalgon@hotmail.com

Sigo aqui peleándome con mi programa. Supongo que para encender el speaker basta tb con poner a 1 el pin al q esta conectado. Ahora seguiré investigando para hacer sonidos diferentes por cada botón. Gracias por adelantado por los retardos.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 09 de Mayo de 2007, 09:37:14
Hola,

No se si estará bien. Es un archivo llamado delay pero no reconoce ninguna extension, no es ni delay.c ni delay.h.¿Dónde tengo q colocarlo y como hago el include? No tengo mucha idea de esto. Gracias. :(
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 09 de Mayo de 2007, 14:33:33
El archivo es un .zip, deber descomprimirlo con winzip o winrar o algún otro programa, los archivos que están comprimidos son delay.c y delay.h.

saludos,
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 10 de Mayo de 2007, 05:40:25
Hola,

Muchísimas gracias ya he conseguido solucionar mis problemas de retardos. Mi siguiente duda es para leer y escribir en la eeprom. En css hay definidas: write_eeprom y read_eeprom. ¿Cómo se hace en picc de hi-tech?. ¿Alguien lo sabe?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 10 de Mayo de 2007, 09:32:11
En Hi-tech es algo parecido:

Código: C
  1. EEPROM_WRITE(direccion,dato);

Para leer
Código: C
  1. dato = EEPROM_READ(direccion);

saludos,
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 18 de Mayo de 2007, 13:54:09
Hola a todos,

Lo de la eeprom funciona bien. Sigo con mis traducciones de css a picc. Ahora debo traducir esto:

void aleatorio()

 setup_counters(RTCC_INTERNAL,RTCC_DIV_256);   
 aleatorio = get_rtcc() % 4;   
 aleatorio +=1;
}

Muchísimas gracias por todo. En cuanto mi programa funcione, lo publicaré aqui, un simon en picc.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: PalitroqueZ en 18 de Mayo de 2007, 14:08:39
Gracias por sus avances LadyMandarine y a  dhmejia  :-/

en verdad les confieso no poder aportar sobre el hitech, por diversos motivos tengo detenido ese estudio en este momento  :(
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 18 de Mayo de 2007, 16:21:29
Me he dado cuenta de que hay otra cosa que no se traducir y es la siguiente:

INTCON=0;
enable_interrupts(INT_EEPROM);
enable_interrupts(GLOBAL);

 :( :( :( :( :?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 18 de Mayo de 2007, 16:23:26
     
Código: C
  1. setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
Esta línea configura el timer0 interno con pre-scaler en 256, esto se hace en el registro OPTION, del datasheet:
   bit5 = 0 para timer interno
   bit3 = 0 para asignar el pre-scaler al timer0
   bits0, bits1, bits2 = 1, para pre-scaler en 256

En Hi-Tech:
   
Código: C
  1. OPTION = 0b00000111;

El valor del registro OPTION depende de otras opciones que podemos configurar como las resistencias de pull-up, el flanco de interrupción externa, hay que verificar bien que es lo queremos hacer.


Código: C
  1. aleatorio = get_rtcc() % 4;

Esta queda muy parecida, pero se reemplaza get_rtcc() por TMR0:
   
Código: C
  1. aleatorio = TMR0 % 4;

Código: C
  1. aleatorio +=1;

Esta línea queda igual.

Espero te funcione,

saludos.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 18 de Mayo de 2007, 16:33:30
Me he dado cuenta de que hay otra cosa que no se traducir y es la siguiente:

INTCON=0;
enable_interrupts(INT_EEPROM);
enable_interrupts(GLOBAL);

 :( :( :( :( :?


En Hi-Tech el microcontrolador se configura de forma muy similar a como se hace en ensamblador, por lo tanto para inicializar el pic hay que leer el muy bien datasheet para mirar que valores debemos poner en que registros, para el caso de las interrupciones por escritura de la eeprom se debe activar el bit EEIE del registro PIE2, ademas habilitar la interrupcion por perifericos poniendo en 1 el bit PEIE del registro INTCON, para que las interrupciones funciones se debe poner en 1 el bit GIE del registro INTCON:

EN picc se pueden asignar valores a los bits de forma directa, por lo tanto todo lo anterior quedaría:

Código: C
  1. EEIE = 1;   //igual a enable_interrupts(INT_EEPROM); del ccs
  2.     PEIE = 1;   //HAbilita interrupcion por periféricos
  3.     GIE = 1;    //igual a enable_interrupts(GLOBAL); del ccs

saludos
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 25 de Mayo de 2007, 10:57:25
Hola de nuevo chicos!!!

Ya queda poco para mi SIMON de principiante en Hi-TECH. Tiene dos modos de juego, está muy curioso. Pero me queda una cosilla y no se como se hace!!!  :shock: Otra vez necesito vuestra ayuda:

El tema es que el pic se debe quedar esperando q el jugador introduzca la secuencia correcta durante un timeout determinado. De forma que si se supera ese tiempo, ocurre lo mismo que si se introduce mal la secuencia, es decir: se pierde. Pero no se como hacer lo del timeout. Es decir se supone que tengo q contar el tiempo q transcurre desde q el pic termina de mostrar la secuencia q espera recibir hasta q el jugador introduce esta secuencia. Y cómo cuento el tiempo??. No se como se hace snif!!!  :( :? Gracias chicos. Sois los mejores.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: vszener en 25 de Mayo de 2007, 14:18:58
Con el timer puedes contar el tiempo.


Suerte!!! ;)
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 28 de Mayo de 2007, 05:25:14
Sabía q era con el timer pero no tengo ni idea de como se hace. Necesito poner el timer a cero y comparar el tiempo q vaya almacenando constantemente con una cantidad en un bucle while. Pero no se poner en picc el timer a cero ni obtener el valor que tiene almacenado.  :shock: :? :(
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 29 de Mayo de 2007, 15:44:48
Hola de nuevo,

He estado mirando y supongo q la función setup_timer pone en css el timer a almacenar tiempo y habrá un get o algo así q recoja el tiempo para poder compararlo con una cantidad no?. Y en hi-tech en el picc?. Alguien sabe como se hace eso?. Hay algún ejemplo por ahí. He buscado y no encuentro nada.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 29 de Mayo de 2007, 19:25:08
El timer no es mas que un registro del micro, por lo tanto se le asignan valores de igual manera que a cualquier otro registro.

Para el Timer1 como es de 16 bits tiene parte alta y parte baja, por ejemplo para asignarle el valor 0x0152 (numero en haxadecimal):

Código: C
  1. TMR1H = 0x01;
  2.     TMR1L = 0x52;

Para leer el timer1 y mover el dato a un registro de 16 bits:

Código: C
  1. int ValorTimer1;
  2.    
  3.     ValorTimer1 = (TMR1H << 8) | TMR1L;  //Carga ValorTimer1 con el dato de TMR1H, desplaza 8 veces a la izquierda y luego hace or
  4.                                                         //con TMR1L

Luego de tener el valor del timer1 en un registro de 16 bits se puede hacer la comparación de forma muy sencilla:

Código: C
  1. if(ValorTimer1 > 650)
  2.     {
  3.     ......
  4.     }

Para leer o escribir cualquier registro del micro se hace de manera similar, tienes que revisar el datasheet para ver que registros estan disponibles y el tamaño que tienen (8 o 16 bits)

saludos
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 30 de Mayo de 2007, 09:24:11
Muchas gracias, entonces debo acceder de la forma que tu me has dicho para saber el tiempo, pero como lo activo?. Es decir como hago para q almacene lo que yo quiero comparar q es el tiempo q ha pasado desde q se cumplió una determinada condición??. Mas o menos en pseudocódigo sería así:

mostrarcolores();
activarTimer();
while(ValorTimer1 < 650)
 {

)
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 30 de Mayo de 2007, 09:59:20
En el datasheet del PIC en la sección "Timer1 Module" esta perfectamente explicado como se configura el timer y cuales son los registros que se deben escribir.

Debes leer muy bien esta sección para configurar el Timer de acuerdo a tu aplicación.

Si tienes problemas no dudes en preguntar.

Saludos,
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: LadyMandarine en 02 de Junio de 2007, 14:42:26
Muy buenas: mi pic es un 16f84a y solo dispone de TIMER0, ya se como se hace por interrupciones para conocer en segundos el tiempo transcurrido, poro tengo un problema: no funciona mi interrupción cuando lo ejecuto y no se por qué: os pongo el código:

void interrupt isr(void){

   Fraccion--;
   if(!Fraccion)
   {
      segundos++;
      Fraccion=31;
   }
   TMR0=256-252;
   T0IF=0;
}

las variables q declaro:

volatile int segundos;
int Fraccion;

y en main:

void main(){

   TRISA=0XFF;
   TRISB=0;
   INTCON=0;

   
   OPTION=0b00000110;
   EEIE=1;
   T0IE=1;
   INTE=1;
   GIE=1;
   Fraccion=31;
   TMR0=256-252;
   
   segundos=0;

Sabeis donde puede estar mi error? Gracias!!!
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 04 de Junio de 2007, 10:12:48
Estas habilitando interrupción por escritura en EEPROM y también la interrupción externa, si no las necesitas es mejor que no las habilites.  Lo otro que veo es que no estas dejando el programa en un ciclo infinito en espera de la interrupción y la asignación que le haces al timer0 tampoco la entiendo pues de poner
Código: C
  1. TMR0 = 256 - 252;
no sería mejor decir:
Código: C
  1. TMR0 = 4;
??

Haciendo unas pequeñas modificaciones a tu código, esto debería funcionar:

Código: C
  1. //Declaración de variables:
  2. int segundos;    //No estoy seguro de como funciona la variables volatile
  3. char Fraccion;    //Si fracción no va a ser mayor a 31 es mejor declararla como char (el int ocupa dos bytes)
  4.  
  5. void interrupt isr(void){
  6.     if((T0IE)&(T0IF))    //Importante verificar siempre la fuente de la interrupción
  7.         T0IF = 0;
  8.         TMR0 = 4;        //Lo mismo que 256-252
  9.         Fraccion--;
  10.         if(Fraccion == 0)
  11.         {
  12.             segundos++;
  13.             Fraccion=31;
  14.         }
  15. }
  16.  
  17. void main(){
  18.     TRISA=0XFF;
  19.     TRISB=0;
  20.     INTCON=0;
  21.     OPTION=0b00000110;
  22.     T0IE=1;
  23.     GIE=1;
  24.     Fraccion=31;
  25.     TMR0 = 4;
  26.     segundos=0;
  27.     while(true)        //Ciclo infinito, en espera de interrupciones
  28.     {
  29.     }
  30. }

Verifica con el simulador si este código si genera interrupción y nos comentas tus resultados.

saludos,
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: micro_cadaver en 07 de Junio de 2007, 15:45:01
holas amigos, excelente iniciativa de manex, ademas veo que mucha gente lo sigue, yo tambien me subo al carro, voy a practicar con los programas que han colocado este compilador hitech, a ver si los llego a alcanzar  :? uffff
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: manex_1987 en 27 de Junio de 2007, 11:55:23
Bueno, yo vuelvo a la carga despues de los examenes, y dispuesto a por todas. Espero que se revitalice este hilo.

No se si por ahi se ha hablado de esto, pero unas rutinas utiles para picc:

Código: [Seleccionar]
#define bitset(var, bitno) ((var) |= 1 << (bitno))
#define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
#define bittest(var, bitno) (var && (1<<bitno))
#define make8(var,offset)   ((unsigned int)var >> (offset * 8)) & 0x00FF
#define   make16(varhigh,varlow)   (((unsigned int)varhigh & 0xFF)* 0x100) + ((unsigned int)varlow & 0x00FF)
#define make32(var1,var2,var3,var4) \
      ((unsigned long)var1<<24)+((unsigned long)var2<<16)+ \
      ((unsigned long)var3<<8)+((unsigned long)var4)     
#define make32i(var1,var2) ((unsigned long)var1<<16)+((unsigned long)var2)

que aprovechen
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 19 de Agosto de 2007, 22:20:36
Buenas amigos de todopic, ya que estamos en esto de la migración de CCS a Hi-tech, como haria para configurar el conversor A/D y como hacer uso de sus diversos canales, y también como hacer uso del USART en Hi-tech.

De antemano muchas gracias.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: micro_cadaver en 20 de Agosto de 2007, 09:32:30
si vienes del ASM se ta hara fácil, pues la configuración que ves en el datasheet es la misma en este compilador, ahorita no tengo un ejemplo a la mano, algo asi seria

bsf status,rp0
movlw 0x06
movwf ADCON1
.
.
.

en el C ya te olvidas de los bancos, solo pones
ADCON1 = 0x06;

saludos!
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 20 de Agosto de 2007, 20:24:18
Muchas gracias por tu respuesta amigo Micro...
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 21 de Agosto de 2007, 21:35:37
Buenas amigos, aqui les tengo un programita en Hi-tech que cuenta de 0 a 99, y se muestra a través de 2 7-seg por multiplexado. El programa tiene un detalle, y es que no logro hacer que no se note el efecto del mutiplexado.

Ah y otra cosita, porque la rutina se repite enesima veces si en ningún lugar hay un bucle infinito.

#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclear(var,bitno) ((var) &= ~(1 << (bitno)))

#include <htc.h>



#include <pic.h>
#define XTAL_FREQ 4MHZ 

#include "delay.c"  // necesario para llamar a DelayMs

__CONFIG(UNPROTECT & PWRTEN & WDTDIS & HS );

//int i=0,j=0;

void main()
{
TRISB=0x0; // PORTB <- salida
TRISC=0x0; //PORTB <- salida

for(PORTC=0;PORTC<10;PORTC++){
   for(PORTB=0;PORTB<10;PORTB++){
      DelayMs(500);
      }
   }
}

PD: Anexo circuito en proteus y programa en C.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: micro_cadaver en 21 de Agosto de 2007, 23:35:50
el retardo es muy largo 500ms , intenta con 10ms
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 22 de Agosto de 2007, 23:35:40
oye gracias microcadaver, pero la verdad me he dado cuenta que subí el programa que no era... en realidad el programa era este:

#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclear(var,bitno) ((var) &= ~(1 << (bitno)))

#include <htc.h>



#include <pic.h>
#define XTAL_FREQ 4MHZ 

#include "delay.c"  // necesario para llamar a DelayMs

__CONFIG(UNPROTECT & PWRTEN & WDTDIS & HS );

int mostrar(int x, int y);
int k;

void main()
{
int i,j;

for(j=0;j<10;j++){
   for(i=0;i<10;i++){
      mostrar(i, j);
      }
   mostrar(i,j);
   }
} //end main

int mostrar(int x, int y){
TRISB=0x0; // PORTB <- salida

PORTB=x;
bitset(PORTB, 4);
DelayMs(200);
PORTB=y;
bitset(PORTB, 5);
DelayMs(200);
}

en este programa si tengo problemas para que lograr el efecto del multiplexado...
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 22 de Agosto de 2007, 23:36:08
oye gracias microcadaver, pero la verdad me he dado cuenta que subí el programa que no era... en realidad el programa era este:

#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclear(var,bitno) ((var) &= ~(1 << (bitno)))

#include <htc.h>



#include <pic.h>
#define XTAL_FREQ 4MHZ 

#include "delay.c"  // necesario para llamar a DelayMs

__CONFIG(UNPROTECT & PWRTEN & WDTDIS & HS );

int mostrar(int x, int y);
int k;

void main()
{
int i,j;

for(j=0;j<10;j++){
   for(i=0;i<10;i++){
      mostrar(i, j);
      }
   mostrar(i,j);
   }
} //end main

int mostrar(int x, int y){
TRISB=0x0; // PORTB <- salida

PORTB=x;
bitset(PORTB, 4);
DelayMs(200);
PORTB=y;
bitset(PORTB, 5);
DelayMs(200);
}

en este programa si tengo problemas para que lograr el efecto del multiplexado...
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 22 de Agosto de 2007, 23:36:32
el retardo es muy largo 500ms , intenta con 10ms

oye gracias microcadaver, pero la verdad me he dado cuenta que subí el programa que no era... en realidad el programa era este:

#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclear(var,bitno) ((var) &= ~(1 << (bitno)))

#include <htc.h>



#include <pic.h>
#define XTAL_FREQ 4MHZ 

#include "delay.c"  // necesario para llamar a DelayMs

__CONFIG(UNPROTECT & PWRTEN & WDTDIS & HS );

int mostrar(int x, int y);
int k;

void main()
{
int i,j;

for(j=0;j<10;j++){
   for(i=0;i<10;i++){
      mostrar(i, j);
      }
   mostrar(i,j);
   }
} //end main

int mostrar(int x, int y){
TRISB=0x0; // PORTB <- salida

PORTB=x;
bitset(PORTB, 4);
DelayMs(200);
PORTB=y;
bitset(PORTB, 5);
DelayMs(200);
}

en este programa si tengo problemas para que lograr el efecto del multiplexado...
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: micro_cadaver en 23 de Agosto de 2007, 10:15:48
ya vi tu programa, tenia varios detalles... la rutina de tiempo la reemplaze por otra de la pagina microchipc.com, me parece mas precisa que la que te regala el hitech, ahi te mando todo el programa con los archivos include para que lo estudies junto con el proteus, otro detalle pero que no es un error es este

      PORTB=x;
      RB4 = 1; //bitset(PORTB, 4);
      DelayMs(10);
      PORTB=y;
      RB5 = 1; //bitset(PORTB, 5);
      DelayMs(10);

el hitech ya entiende esos movimientos a nivel de bits.

otra cosa que era es el refresco y la duracion de este, no es solamente la duracion de cada display, sino del bloque multiplexado...

   for(a=0;a<50;a++)
   {
      PORTB=x;
      RB4 = 1; //bitset(PORTB, 4);
      DelayMs(10);
      PORTB=y;
      RB5 = 1; //bitset(PORTB, 5);
      DelayMs(10);
   }

y el main estaba mal organizado, lo deje asi  :mrgreen:

void main()
{
   TRISB=0x00; // PORTB <- salida
   while(1)
   {
      for(j=0;j<10;j++)
      {
            for(i=0;i<10;i++)
         {
                        mostrar(i, j);
                    }
         }
   }
}

saludos aca ta el link de descarga
http://www.box.net/shared/ykc2ao30z2

saludos!!! :-/
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: microKings en 25 de Agosto de 2007, 15:29:43
Gracias micro por tu ayuda. Lo probé y sirvio bastante bien, aunque no he logrado que no se note el parpadeo...
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: micro_cadaver en 25 de Agosto de 2007, 16:33:00
lo sigues probando en el simulador? o en la realidad?
en el simulador algunas veces se pone lento con displays, sugiero que lo quemes a un pic y ahi hagas la calibración optica. saludos  :-/
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: metalm en 17 de Julio de 2008, 15:24:18
volvi!

ahora ando buscando alguna funcion de delay COMO LA GENTE para el hi tech, alguien se hizo una?
Porque la que viene es bastante trucha, yo generalmente uso al micro en 20 y 40 mhz y no sirve. El mismo header aclara esto:
 *   Note that there are range limits:
 *   - on small values of x (i.e. x<10), the delay becomes less
 *   accurate. DelayUs is accurate with xtal frequencies in the
 *    range of 4-16MHZ, where x must not exceed 255.
 *   For xtal frequencies > 16MHz the valid range for DelayUs
 *   is even smaller - hence affecting DelayMs.


otra cosa: el compilador de hi tech tampoco es perfecto!
aca teniamos escrito una definicion como "T0CON = 0xb11010011;"
fijense que dice "0xb" y no lo tira como error de compilacion, si no que le asigna los dos ultimos numeros a T0CON dejandolo en 0x11!

ademas no tira warnings como que hay variables declaradas y nunca se usan.. eso no me gusta, se puede habilitar este warning?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: dhmejia en 17 de Julio de 2008, 19:30:26
Claro que el compilador de Hi-tech esta lejos de ser perfecto, lo de no arrojar warnings con las variables en ram no usadas además de compilar las funciones que no se usan es un punto bastante malo.

Respecto a la asignación del 0xb....  ten en cuenta que con "0x" el compilador ya trata el dato como hexadecimal y la letra B" es un valor hexadecimal válido, por lo tanto el compilador no lo ve como un error y asigna los dos últimos valores a la variable.

saludos,

Diego.
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: Palomino86 en 21 de Marzo de 2011, 23:52:07
Buenas :


  Señores me uno al cambio, trataré de ir haciendo mis ejemplitos para subirlos y compartirlos con toda la comunidad.

Saludos :mrgreen:
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: motorista en 13 de Junio de 2011, 10:07:20
hola a todos, he puesto un post nuevo, pero no esta teniendo mucho exito...
Hago la pregunta aqui.
Yo he empezado hace poco con los PICS y precisamente he empezado con el hi-tech. Estoy buscando la libreria del saa1064, pero para hi-tech. En este mismo foro hay publicada libreria para ccs, pero ¿para el hi-tech?
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: ranelcom en 15 de Junio de 2011, 18:32:14
Hola a todos. Yo hace mas de 10 años uso CCS y Hitech PICC, de hecho enseño en varias universidades microcontroladores PIC entre otros y uso CCS. Por motivos laborales me he tenido que forzar a cambiar a PICC y me he dado cuenta que esta mucho mas maduro que CCS. Incluso con un simple ejemplo de código tipo "blink-a-led" de 3 leds se ve que realmente es necesario tener a la mano el datasheet del micro en cuestion dado que CCS asume muchas cosas e inicializa registros no como indica el datasheet. Es decir nos simplifica la vida pero al portar el codigo a otro compilador nos la complica.

Ejemplo en CCS, para 12F683. Leds en pines GP2, GP4 y GP5. Versión 4.120

Código: [Seleccionar]
#include <12f683.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR
#use delay(clock=8000000)

#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5

void main() {

setup_oscillator(OSC_8MHZ);
//setup_adc_ports(NO_ANALOGS);
//setup_comparator(NC_NC);
//set_tris_a(0x00);
while(1) {
output_low(GP2);output_low(GP4);output_low(GP5);
delay_ms(100);
output_high(GP2);output_high(GP4);output_high(GP5);
delay_ms(100);
}
}

En el ejemplo anterior lo correcto seria compilar con las lineas que estan comentarizadas, ya que este micro tiene algunos pines para funciones analogas al reset. Para configurarlas digitales hay que descomentarizar las lineas, sin embargo al inicializar configura los registros ANSEL, TRISIO y CMCON0 a nuestro beneficio.

Ahora la version en PICC Pro 9.81

Código: [Seleccionar]
#include <htc.h>

__CONFIG(0x3FC4);
#define _XTAL_FREQ 8000000

void main() {
OSCCON=0b01110001;  // Oscilador interno 8MHz
OSCTUNE=0;
//ANSEL=0; //Desactiva entradas analogas
//CMCON0=0x07; //Desactiva comparador analogo
TRISIO=0; //Configura solo outputs
while(1) {
GP2=0;GP4=0;GP5=0;
__delay_ms(100);
GP2=1;GP4=1;GP5=1;
__delay_ms(100);
}
}

En este caso si mantienen los comentarios el programa solo hace el blink del led que al reset es digital(GP5), los análogos obviamente no. Hay que descomentarizar las lineas.

Conclusión, con PICC tendremos un código mucho mas fiel al funcionamiento del micro lo que obliga a que tengamos a mano el datasheet.
Me costo darme cuenta de este error que no es un bug, es un error de programación en que incurrimos al confiar mucho en el CCS.

Yo por mi parte de ahora en adelante solo enseñare verdaderos compiladores ANSI C en mis clase, nunca mas pasarse al lado oscuro de la fuerza del CCS. ;)
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: Rodricity en 22 de Junio de 2011, 10:57:44
volvi!

ahora ando buscando alguna funcion de delay COMO LA GENTE para el hi tech, alguien se hizo una?
Porque la que viene es bastante trucha, yo generalmente uso al micro en 20 y 40 mhz y no sirve. El mismo header aclara esto:
 *   Note that there are range limits:
 *   - on small values of x (i.e. x<10), the delay becomes less
 *   accurate. DelayUs is accurate with xtal frequencies in the
 *    range of 4-16MHZ, where x must not exceed 255.
 *   For xtal frequencies > 16MHz the valid range for DelayUs
 *   is even smaller - hence affecting DelayMs.


otra cosa: el compilador de hi tech tampoco es perfecto!
aca teniamos escrito una definicion como "T0CON = 0xb11010011;"
fijense que dice "0xb" y no lo tira como error de compilacion, si no que le asigna los dos ultimos numeros a T0CON dejandolo en 0x11!

ademas no tira warnings como que hay variables declaradas y nunca se usan.. eso no me gusta, se puede habilitar este warning?


 Para los delays yo no uso las librerias del Hitech, hice una funcion tambien, y me funciona bien para retardos del orden de los mili-segundos, y como generalmente funciono con el cristal interno, el tiempo que ingreso es en micro-segundos.

Código: [Seleccionar]
void retardo(unsigned int tiempo);
void retardo(unsigned int tiempo)
{
TMR1ON = 0;
TMR1IF = 0;
tiempo = 0xFFFF-tiempo;
TMR1H = tiempo>>8;
TMR1L = tiempo & 0xFF;
TMR1ON = 1;
while(!TMR1IF);
TMR1ON = 0;
TMR1IF = 0;
}

Ejemplo:

Código: [Seleccionar]
while(1)
{
RB1 = !RB1;
delay(500);
}



Código: [Seleccionar]
void escribir_string(const char *letra);
unsigned long obtener_valor(void);
void escribir(char letra);
void convertir(unsigned long number);

void escribir_string(const char *letra)
{
while(*letra != 0)
{
while(!TXIF);
TXREG = *letra++;
}
}

unsigned long obtener_valor()
{
unsigned long value;
char incoming;
value = 0;
while(!RCIF);
incoming = RCREG;
while(incoming >= '0' && incoming <= '9')
{
value = value*10 + (incoming - 48);
while(!RCIF);
incoming = RCREG;
}
return value;
}

void escribir(char letra)
{
while(!TXIF);
TXREG = letra;
}

void convertir(unsigned long number)
{
if(number != 0)
{
unsigned long potencia;
potencia = 1;
while(potencia*10 <= number)
{
potencia = potencia*10;
}
while(potencia != 1)
{
while(!TXIF);
TXREG = (number / potencia)+48;
number = number - ((number/potencia)*potencia);
potencia = potencia/10;
}
}
while(!TXIF);
TXREG = number+48;
}


 funciones que desconocia que hitech poseía librerias, las hice a mano por lo tanto,pero son super sencillas.

 ejemplo:

Código: [Seleccionar]
main()
{
escribir_string("Prueba de funcionamiento"); //String
escribir(10); //line feed
escribir(13); //carriage return (enter)
valor = obtener_valor(); //obtiene caracteres (desde el 0 al 9) y los transforma en número, si el caracter está fuera de ese rango devuelve el valor
convertir(valor); //devuelve el número obtenido en caracteres ASCII
}


Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: FABERFREE en 09 de Noviembre de 2011, 00:52:56
HOLA amigos veo q saben mucho de este tema y yo necesito un empujon para ir abriendome en esto y tambien colaborar con ustedes
para lo que quiero hacer estoy utilizando lo siguiente
un pic16f84
programa MPLAB IDE 8.3 y un compilador HITECH para pic 16f
quiero escribir todo mi programa en C porque asembler pues me resulta muy largo

en general lo que quiero hacer es como automatixar algunas tareas para un sistema de ACuario osea apagados y encendidos de motores , luces, alimentacion y temperaturas y por ahi hacer secuencias diferentes del manejos de esto mencionado osea q se comporte de una forma si elijo la opcion A y otro si es la opcion B
esto mencionado es una idea muy general de lo q quiero hacer mas adelante si funciona todo bien

ahora menciono lo primero q quiero saber dominar y es esto del temporizacion en timer0
mi pregunta es ?????
COMO PUEDO HACER PARA POR EJEMPLO USANDO EL TIMER0 POR cada 1000 milisegunos

el contador me cuente 1 y asi sucesivamente y se muestre por ejemplo en un display

lo que mas me importa amigos es saber que comandos del hitech usar ,si me ponen un ejemplo de esta parte de programacion
se los agradeceria un monton!!!!!
Título: Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
Publicado por: Peladosok en 10 de Noviembre de 2014, 21:56:11
Estimados! Hace poco me inicie en la programación de PIC y necesito que me saquen una duda. Resulta que hice un programa que genera 4 señales PWM utilizando el TIMER0. Lo que me sucede es que al grabar el programa en el micro, tengo un comportamiento errático del mismo (pruebo el programa encendiendo 4 leds con las salidas PWM). Hay momentos que me funciona de maravilla y hay otros momentos en los que una de las salidas no funciona. El código es el siguiente, no encuentro cual puede ser el error que me hace producir este comportamiento, espero me puedan ayudar. Saludos

# include <htc.h>
# include <stdio.h>
# include <pic1687x.h>
# define _XTAL_FREQ 4000000
__CONFIG(UNPROTECT & DEBUGDIS & WRTDIS & DUNPROT & LVPDIS & BORDIS & PWRTDIS & WDTDIS & XT);
int contador1 = 0, contador2 = 0, contador3 = 0, contador4 = 0;
float t_alto1 = 0, t_alto2 = 0, t_alto3 = 0, t_alto4 = 0;
int periodo = 0, periodo_2 = 0, periodo_3 = 0, periodo_4 = 0;
int t_ON = 0;
int t_off = 0;

/*///////////////////////////////////////////////////////////
//                                                         //
// Rutina de atención Interrupción por desborde de Timer0  //
//                                                         //
// La interrupción se da cada 1 mseg                       //
//                                                         //
///////////////////////////////////////////////////////////*/

void interrupt timer0_isr(void){ 
      TMR0 = 131;
      contador1++;
      contador2++;
      contador3++;
      contador4++;

// Señales PWM 1

      if (contador1 == periodo){
         RA0 = 1;
         contador1 = 0;
      }
      if(contador1 == (int)t_alto1){      
         RA0 = 0;
         }

// Señales PWM 2

      if (contador2 == (periodo_2)){
         RA1 = 1;
         contador2 = 0;
      }
      if(contador2 == (int)t_alto2){      
         RA1 = 0;
         }

// Señales PWM 3

      if (contador3 == (periodo_3)){
         RA2 = 1;
         contador3 = 0;
      }
      if(contador3 == (int)t_alto3){      
         RA2 = 0;
         }

// Señales PWM 4

      if (contador4 == (periodo_4)){
         RA3 = 1;
         contador4 = 0;
      }
      if(contador4 == (int)t_alto4){      
         RA3 = 0;
         }
      T0IF = 0;
}

void init (void){
      ADCON0 = 0X00;
      ADCON1 = 0x07;
      TRISA = 0x00;
      T0IF = 0;
      TMR0 = 131;
      PORTA = 0x00;
      contador1 = 0;
      contador2 = 0;
      contador3 = 0;
      contador4 = 0;
      T0CS = 0;
      PSA = 0;
      PS2 = 0;
      PS1 = 1;
      PS0 = 0;
      TMR0IE = 1;
      GIE = 1;
}
void main (void){
   
   init();
   periodo = 1000;
   periodo_2 = periodo + 250;
   periodo_3 = periodo + 500;
   periodo_4 = periodo + 750;
   t_alto1 = periodo * 0.75;
   t_alto2 = periodo * 0.75;
   t_alto3 = periodo * 0.75;
   t_alto4 = periodo * 0.75;

   while(1){
   

   }
}