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

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

Desconectado microKings

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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #61 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!!! :-/
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 #62 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...

Desconectado micro_cadaver

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

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

Desconectado metalm

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

Desconectado dhmejia

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

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: Introduccion-Migracion a HITECH-PICC {Ejemplos,comentarios,preguntas...}
« Respuesta #66 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:
Lo que no me destruye, me fortalece

Desconectado motorista

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

Desconectado ranelcom

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

Desconectado Rodricity

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



Desconectado FABERFREE

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

Desconectado Peladosok

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

   }
}