TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ELECTROSWALDO en 10 de Julio de 2009, 00:31:10

Título: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: ELECTROSWALDO en 10 de Julio de 2009, 00:31:10
Que tal, tengo un problema con un programa en 16f877a, es la primera vez que lo uso. He notado que el pic funciona lento, ya que cuando escribe un texto en el lcd se puede notar como se escribe caracter por caracter. Por ejemplo el retardo que tengo ahi en el codigo es de 500ms, sin embargo dura como 10seg. Cual creen que sea el problema.

El cristal que le pongo es de 4Mhz y hace lo mismo con uno de 12Mhz.

Por cierto, como informacion adicional: lo mismo me pasa en ensamblador pero peor, ahi nisiquera escribe el mensaje en el LCD solo lo inicializa. Una instruccion en ensamblador a 4Mhz se ejecuta en 1uS normalmente, sin embargo con el osciloscopio pude ver que cada instruccion se ejecuta en 25uS.

Ah y algo que me sorprendio, cuando alimento el circuito aunque no le ponga el cristal al PIC funciona igual que si se lo pusiera.  ¿como esta eso?. este micro no tiene oscilador interno que yo sepa.

Donde estoy cometiendo el error?

ESTE ES EL CODIGO:


#include<16f877.h>
#fuses nowdt
#fuses noput
#fuses noprotect
#fuses xt

#use delay (clock=4000000)

#include  <flex_lcd.c>



void main()
{
   lcd_init();
   lcd_gotoxy(1,1);
   printf(lcd_putc,"    FCE-BUAP    ");
   delay_ms(500);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"   ELECTRONICA  ");
   
   
}
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: KALLITOS en 10 de Julio de 2009, 01:58:14
Coloca los fuses, posiblemente alli este el error
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: migsantiago en 10 de Julio de 2009, 16:35:13
Prueba declarando el 877a...

#include<16f877a.h>

¿Cómo es el circuito de tu pic y lcd?
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: kcire en 10 de Julio de 2009, 20:10:47
Raro, raro prueba este codigo:

Código: C
  1. #include <16F877A.h>       // PIC a utilizar
  2. #FUSES XT                  // Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
  3. #FUSES NOWDT               // No Watch Dog Timer
  4. #FUSES NOPUT               // No Power Up Timer
  5. #FUSES NOPROTECT           // Code not protected from reading
  6. #FUSES NODEBUG             // No Debug mode for ICD
  7. #FUSES NOBROWNOUT          // No brownout reset
  8. #FUSES NOLVP               // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD               // No EE protection
  10. #FUSES NOWRT               // Program memory not write protected
  11.  
  12. #use delay(clock=4000000)  // Oscilador a 4MHz
  13.  
  14. #include <flex_lcd.c>           // Libreria para el manejo del LCD a utilizar
  15.  
  16. // FUNCION PRINCIPAL
  17. void main(void){
  18.   lcd_init();                // Iniciamos LCD
  19.   lcd_putc('\f');            // Limpiamos LCD
  20.   while(TRUE){               // Bucle infinito
  21.      lcd_gotoxy(6,1);        // Linea 1 y Columna 6
  22.      lcd_putc("Hola");
  23.      lcd_gotoxy(2,2);        // Linea 2 y Columna 2
  24.      lcd_putc("Foro TodoPIC");
  25.   }
  26. }

Un saludo,  :) y suerte

Erick
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: ELECTROSWALDO en 10 de Julio de 2009, 22:26:40
Gracias por la ayuda que han brindado. Lamentablemente en este momento no podré aplicar las sugerencias que han hecho pues cometi un error y queme el pic (le meti 17v en Vpp). Pero aprovechando mientras compro el pic, y si no es mucha molestia, podrian despejarme esta duda, que diferencia hay entre estas dos?:

printf(lcd_putc,"texto");

y

lcd_putc("texto");


Saludos.
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: ralcesar en 11 de Julio de 2009, 12:04:33
Para mi que tenes configurado usar el oscilador interno del PIC, ideam a la respuesta anterior fijate en los fuses
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: migsantiago en 11 de Julio de 2009, 13:12:04
pero aprovechando mientras compro el pic, y si no es mucha molestia, podrian despejarme esta duda, que diferencia hay entre estas dos?:

printf(lcd_putc,"texto");

y

lcd_putc("texto");


Saludos.

La segunda no te va a servir porque solo envía un caracter a la vez y en la primera, printf envía caracter por caracter a lcd_putc.
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: KALLITOS en 11 de Julio de 2009, 20:42:25
Coloca los fuses, posiblemente alli este el error
Que burrada en tu primer post estan los fuses  :mrgreen:, chekea que los cristales sean del valor real, es decir 4Mhz y/o 12 Mhz, hubo una vez que me vendieron unos disque de 4Mhz y al final no funcionó por el cristal.

saludos
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: moronilehi en 17 de Julio de 2009, 00:08:20
te recomiendo que user pic wizard para comenzar a usar tu nuevo proyecto
luego seleccionas los driver lcd o despues de crear los archivos lo puedes modificar el directorio del c. o h. para tu lcd o usas tu propios, luego colocas todo lo que necesite para tu programas y evitas otros errores  :-/ espero que te sirva  :D y esto puede solucionar tu problema
Título: Re: El pic16f877a no ejecuta los tiempos como es debido.
Publicado por: ELECTROSWALDO en 17 de Julio de 2009, 22:19:37
Que tal, una disculpa por la demora, compre un pic nuevo pues el anterior se me quemo, copie el codigo que puso Kcire y funciono. Para hacer pruebas quite los fuses que puso Kcire y deje los que habia puesto iniciamente para ver si ese era el problema y pues siguio funcionando bien, el codigo es el mismo, incluso le quite el #include<16f877A.h> por el #include<16f877.h> (como lo habia puesto por error) y funciona en ambos casos. Es decir, el mismo programa que no jalaba bien ahora jala bien, solo hize otro proyecto y con un pic nuevo.

Les agradezco a todos por su ayuda, el pic estaba mal o no cree bien el proyecto, en fin, debere ser cuidadoso al respecto como recomiendan.

Un saludo.