Autor Tema: MPLAB + CC5..y delay_ms() ???  (Leído 4682 veces)

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

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
MPLAB + CC5..y delay_ms() ???
« en: 17 de Octubre de 2006, 14:49:24 »
Estuve buscando en el foro, viendo ejemplos...entonces agarre el MPLAB, seleccion como compilador el CC5.....y escribi rapidamente esto:

Código: [Seleccionar]
#use delay(clock=4000000)

void main(void)
{
TRISA.1=0;
while(1)
{
PORTA.1=1;
delay_ms(50);
PORTA.1=0;
delay_ms(50);
}
}

Y me tira el error:
#use delay(clock=4000000)
   ^------
Error[1] C:\Documents and Settings\Ariel\Escritorio\Delay\Delay.c 1 : Preprocessor error
 (The source line starting with '#' contains invalid syntax or context
 dependent syntax)

Dentro de este tengo la libreria 16F84.h pero..no pasa nada.....
Alguna idea?Gracias!!
« Última modificación: 17 de Octubre de 2006, 15:11:57 por aripod »

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #1 en: 18 de Octubre de 2006, 05:40:19 »
Soy novato pero en la configuración inicial faltan cosas como el PIC a utilizar, los fuses, uso de los puertos... algo así como:

#include <16f676.h>         //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_io(a)

//PROGRAMA

Además con un delay de 50 milisegundos no se si el led se verá claramente que se enciende y apaga, en caso de tener un led conectado.

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #2 en: 18 de Octubre de 2006, 15:03:35 »
Exacto te falta incluir esta directiva

#include <16F877.h>

Además no entiendo porque pones TRISA.1=0; que es el .1?

El compilador no te va a reconocer esa directiva tenes que quitarle el .1
« Última modificación: 18 de Octubre de 2006, 15:06:43 por juanacho_ar »
Existo, aunque pienses que no pienso

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #3 en: 18 de Octubre de 2006, 15:14:08 »
#include <16f676.h>         //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_io(a)

Segun me enseñaron, no hace falta hace los include....lo de los #fuses no tengo idea ke sera....calculo ke el compilador lo hace automaticamente...nose...en todo caso lo pondre...

el problema es que me da un error con el #use...

Hago TRISA.1 para poner ke el puerto RA1 es salida....no me tira ningun error...al contrario...

Y por ultimo, no puedo incluir 16F877.h, porke estoy usando el 16F84 :D. Dentro de esa libreria esta el delay? No se lo podria agregar a la del 16F84???

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #4 en: 18 de Octubre de 2006, 15:34:34 »
Perdon perdon

La directiba que te falta es esta #include <16f84.h>

Los fuses te definen que oscilador vas a utilizar (generalmente es un cristal (XT)) si vas a proteger el codigo o no si activaras el perro guardián (WDT) o no

Esta directiva #use delay (clock=4000000) indica a que frecuencia vas a usar el clock del pic (el cristal externo)

Por ultimo es verdad que no es imprescindible la directiva #include <16f676.h> pero si no la utilizas tenes que realizar toda la configuracion de lo que vas a utilizar vos (por ejemplo la dirección de los puertos) no te pone error porque aun no a llegado a analizar esa linea

En cuanto a lo del tris me refiero a que esta mal escrito es set_tris_a(00000010)  el valor que esta entre parentesis es para configurar cada pin del puerto como entrada o salida dependiendo de si vale 0 o 1

En fin aca tenes buenos ejemplos de como configurar un puerto

http://www.todopic.com.ar/foros/index.php?topic=4530.0
« Última modificación: 18 de Octubre de 2006, 15:44:49 por juanacho_ar »
Existo, aunque pienses que no pienso

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #5 en: 21 de Octubre de 2006, 21:23:13 »
No tengo problemas en declarar los puertos, ya que en el compilador que estoy aprendiendo en el curso es el CC5X y lo hacemos asi.
El rpboelma del #use es que en ese compilador no esta definido...pero...viene la libreria DELAY.C

Código: [Seleccionar]
/*
  DELAYS AND TIMING
  =================

  Delays are frequently used. There are various
  ways to generate them:
     1. Instruction cycle counting
     2. Using the TMR0 timer
     3. Watchdog timeout for low power consumption
     4. Using variables achieves longer delays
*/


void delay_ms( uns16 millisec)
// Delays a multiple of 1 milliseconds at 4 MHz
// using the TMR0 timer
{
    char next = 0;

    OPTION = 2; // prescaler divide TMR0 rate by 8
    TMR0 = 2;  // deduct 2*8 fixed instruction cycles delay
    do  {
        next += 125;
        clrwdt();  // needed only if watchdog is enabled
        while (TMR0 != next)   // 125 * 8 = 1000 (= 1 ms)
            ;
    } while ( -- millisec != 0);
}


void delay10( char n)
/*
  Delays a multiple of 10 milliseconds using the TMR0 timer
  Clock : 4 MHz   => period T = 0.25 microseconds
  1 IS = 1 Instruction Cycle = 1 microsecond
  error: 0.16 percent
*/
{
    char i;

    OPTION = 7;
    do  {
        clrwdt();  // only if watchdog enabled
        i = TMR0 + 39; /* 256 microsec * 39 = 10 ms */
        while ( i != TMR0)
            ;
    } while ( --n > 0);
}


void _delay10( char x)
/*
  Delays a multiple of 10 milliseconds
   using instruction cycle counting
  Clock : 32768 Hz   => period T = 30.518 microseconds
  1 Instruction Cycle = 1 IS = 4 * T = 122 microseconds
  10 ms = 82 IS (81.92) =>  error: 0.1 percent
*/
{
    do  {
        char i = 26;            /* 2 IS */
        do ; while ( --i > 0);  /* 26 * 3 - 1 = 77 IS */
    } while ( --x > 0);         /* 3 IS */
}



char counter;

void main( void)
{
    if ( TO == 1)  {
        /* power up or MCLR */
        PORTA = 0;     /* write output latch first */
        TRISA = 0;     /* all outputs */
        TRISB = 0xFF;  /* all inputs */
    }
    else  {
        /* watchdog wakeup */
        if ( --counter > 0)  {
            OPTION = 0x0B; /* WDT divide by 16 */
            sleep();  /* waiting 16 * 18 ms =
                         288 ms = 0.288 seconds */
        }
    }

    // ..

    delay_ms( 5500);  /* 5.5 seconds */

    // ..

    delay10( 100);  /* 1 second */

    // ..

    counter = 7;   // 7 * 0.288 sec. = 2 sec. totally
    OPTION = 0x0B; // 0 1011: WDT divide by 16
    // main terminates by sleep();, allows low power consumption
    // waiting for watchdog timeout: approx. 16*18 ms = 288 ms
}

Pero cuando la agrego al copilador, en vez de ubicarse dentro de header files con la 16f84.h se agrega con las de source file, junto con mi_codigo.c....esto es porke es DELAY.C?
Entonces, hago #include <DELAY.C> en la primer linea del programa,,,pero cuando compilo...no me tira ningun error...salvo que la compilacion no fue exitosa.....
Se le puede cambiar la extension al DELAY.C a DELAY.H??

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #6 en: 12 de Noviembre de 2006, 19:16:02 »
Problema solucionado......
En un .h puse la funcion de delay y listo:
Código: [Seleccionar]
void delay_ms( uns16 millisec)
// Delays a multiple of 1 milliseconds at 4 MHz
// using the TMR0 timer
{
    char next = 0;

    OPTION = 2; // prescaler divide TMR0 rate by 8
    TMR0 = 2;  // deduct 2*8 fixed instruction cycles delay
    do  {
        next += 125;
        clrwdt();  // needed only if watchdog is enabled
        while (TMR0 != next)   // 125 * 8 = 1000 (= 1 ms)
            ;
    } while ( -- millisec != 0);
}

Tema cerrado.. gracias a los ke ayudaron!!!

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: MPLAB + CC5..y delay_ms() ???
« Respuesta #7 en: 13 de Noviembre de 2006, 15:39:08 »
Ojo!!! el código del compilador CCS no es compatible con otros compiladores, tenemos que adecuarlo, digo esto ya que los trozos de código que se han expuesto son para el CCS y no para el CC5X, lo conveniente es que mires en el manual del compilador.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything