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

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

Desconectado LadyMandarine

  • PIC10
  • *
  • Mensajes: 21
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #45 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.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #46 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
Pereira - Colombia

Desconectado LadyMandarine

  • PIC10
  • *
  • Mensajes: 21
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #47 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)
 {

)

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #48 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,
Pereira - Colombia

Desconectado LadyMandarine

  • PIC10
  • *
  • Mensajes: 21
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #49 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!!!

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #50 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,
Pereira - Colombia

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #51 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
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #52 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

Desconectado microKings

  • PIC10
  • *
  • Mensajes: 13
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #53 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.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #54 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!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado microKings

  • PIC10
  • *
  • Mensajes: 13
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #55 en: 20 de Agosto de 2007, 20:24:18 »
Muchas gracias por tu respuesta amigo Micro...

Desconectado microKings

  • PIC10
  • *
  • Mensajes: 13
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #56 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.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #57 en: 21 de Agosto de 2007, 23:35:50 »
el retardo es muy largo 500ms , intenta con 10ms
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado microKings

  • PIC10
  • *
  • Mensajes: 13
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #58 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...

Desconectado microKings

  • PIC10
  • *
  • Mensajes: 13
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #59 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...