Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/12/2014 #1


¿Por qué el archivo .Hex funciona en Proteus y no en Protoboard?
Hola a Todos, Me uni hace unos meses, Soy nuevo en el foro.
Mi problema es el siguiente.. acabo de comprar una lista de materiales para realizar un proyecto: \'Medidor de Temperatura con el LM35 Y el Pic 16f877\'.
El programa y .DNS lo halle en internet. Es en lenguaje c. Nunca usé éste mencionado. Solo he practicado con el asemmbler.
Pero pude compilar el programa con ayuda de tutoriales.
Ahora que monto mi circuito en Protoboard, veo que el LCD 16x2 no funciona. Solo esta prendida TODA la parte superior de la columna y no me muestra ningun caracter. Además los LEDs que incluyen no encienden.
Verifiqué si hay una mala conexión, pero noto que esta bien.. Me preocupa mucho.
Al momento de grabar al PIC no me aparece ningun error, sí he conectado el sistema como debe ser.
Algo adicional que puedo detallar, seria la alimentacion de mi microcontrolador. Uso 5 volts.
Puedo decir que tambien me andaba fallando ese regulador, pero noto que el voltímetro marca algo menos de 5v al conectar el Circuito. Es algo de 4.5 - 4-7v.
Porfavor ayudenme. Gracias. ..
20/12/2014 #2

Avatar de Scooter

Bienvenido al mundo real.
Que algo funcione en un simulador solo indica que a lo mejor, es probable que funcione en la realidad.

Puede que sea un mal contacto o cualquier otra cosa.
20/12/2014 #3


Algo así es extraño? Porque hice otro y tampoco me funciono. Pero es completamente ilógico para mí.
Puedo Escribir en el Pic, no me da ningún error, como dije antes.
Que hago :(
20/12/2014 #4
Moderador general

Avatar de Fogonazo

gianzeth dijo: Ver Mensaje
Algo así es extraño? Porque hice otro y tampoco me funciono. Pero es completamente ilógico para mí.
Puedo Escribir en el Pic, no me da ningún error, como dije antes.
Que hago :(
Publica mas información:

Esquema
Programa
Simulación
Imágenes del montaje
20/12/2014 #5


Me estoy frustrando muchísimo.
Perdón por la resolución de la foto, es que no tengo cámara y la tome con mi celular.
Ese es el Circuito que estoy realizando. Y la conexión esta como en la de lapiz y papel. :(
Imágenes Adjuntas
Tipo de Archivo: jpg DNS.jpg (129,7 KB (Kilobytes), 35 visitas)
Tipo de Archivo: jpg C-PARTE 1.JPG (67,4 KB (Kilobytes), 31 visitas)
Tipo de Archivo: jpg C-PARTE 2.JPG (24,9 KB (Kilobytes), 23 visitas)
Tipo de Archivo: jpg 10877726_586923884770859_1891389821_n.jpg (13,0 KB (Kilobytes), 31 visitas)
Tipo de Archivo: jpg 10863626_586923854770862_1225492001_n.jpg (10,0 KB (Kilobytes), 33 visitas)
Tipo de Archivo: jpg 10850859_586923661437548_1652147332_n.jpg (14,3 KB (Kilobytes), 35 visitas)
Tipo de Archivo: jpg 2222.JPG (56,7 KB (Kilobytes), 24 visitas)
Tipo de Archivo: jpg 3333333333333.JPG (67,2 KB (Kilobytes), 22 visitas)
20/12/2014 #6


si funciona en el simulador debe funcionar en el chip... seguro no estas configurando bien el programador del chip. te recomiendo que empieces con un programa mas simple, el led intermitente por ejemplo y el LCD se pone asi cuando no esta configurado solo hay tensión pero no hay comunicación.
20/12/2014 #7


Lo haré, gracias
20/12/2014 #8


Hola, lo mas probable es que estes errando en los FUSES, busca información relacionada con ello.
20/12/2014 #9


En realidad no hice el programa. Solo lo descargue de un link que redireccioné de un video de Youtube.
Ahí se detallaba algo de la programación en C. No entendí porque nunca lleve ese lenguaje. Esa es un excusa. Pero intentaré buscar información.. Muchas Gracias!
20/12/2014 #10


Sigue mi problemaa.. he grabado otro .hex. y me da lo mismo. que podria ser? :/
20/12/2014 #11

Avatar de papirrin

intenta poner un delay_ms(1000); antes del primer LCD_init(); y checa los fuses ¿lo hiciste?

#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
20/12/2014 #12
Moderador

Avatar de D@rkbytes

papirrin dijo: Ver Mensaje
intenta poner un delay_ms(1000); antes del primer LCD_init(); y checa los fuses ¿lo hiciste?

#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
El Retardo de 1000ms. No es necesario y provocará cuadros negros antes de que se escriba algo, por inicialización tardía de la pantalla.
Usando la librería de PIC C Compiler ya no es necesario ese retardo, pero sí la palabra de configuración
20/12/2014 #13


Mi tristeza es que no se programar en C, y no tengo idea de como hacer un retardo ahi o usar la libreria de PIC C Compiler. :/
20/12/2014 #14

Avatar de papirrin

A mi da tristeza que no contesten lo que se pregunta.

Busca un tutorial de C
21/12/2014 #15


Algun link.. que pueda servirme de ayuda? Lo necesitoo.
21/12/2014 #16
Moderador

Avatar de D@rkbytes

gianzeth dijo: Ver Mensaje
¿Algún link que pueda servirme de ayuda? Lo necesito.
Mira por aquí: Curso de programación en C para microcontroladores PIC
Aquí en el Foro existen muchos ejemplos que puedes ver para que tengas una idea.

Hubiera sido más fácil que adjuntaras el proyecto dentro de un archivo comprimido.
Así se podría editar y enviar el programa corregido.
Sin embargo, al parecer el problema que tienes, únicamente se debe a que el programa no tiene la palabra de configuración.
Coloca la que te mencionó papirrin y posiblemente tengas el problema solucionado.
Por simplicidad, yo inicio de esta sencilla manera:
Código:
#include <16f877a.h>
#fuses   nobrownout
#use     delay(crystal = 4MHz)
De esta forma ya no es necesario colocar fuses extra pues el compilador se encarga de colocar los fuses necesarios.

Sobre los fuses de la palabra de configuración y problemas con LCD en CCS, ya se ha tratado por aquí:
Problemas con Display LCD en CCS

Lee esos temas y encontrarás mucha información que te podrá servir.
21/12/2014 #17

Avatar de fdesergio

fen2006 dijo: Ver Mensaje
si funciona en el simulador debe funcionar en el chip... seguro no estas configurando bien el programador del chip. te recomiendo que empieces con un programa mas simple, el led intermitente por ejemplo y el LCD se pone asi cuando no esta configurado solo hay tensión pero no hay comunicación.

como se ve q no has lidiado con esos simuladores, personalmente NUNCA me han gustado, pq al final debes montar y correguir esos pequeños errores, por lo que veo, y me ha pasado estas teniendo problemas en la rutina de inicializacion del LCD, aumenta un poco los delay entre las instrucciones de configuracion del LCD, asi lo he solucionado yo, tambien puedes tener el LCD malo y o mal conectado/configurado. chaoooo
21/12/2014 #18


Y como sabría si mi PIC anda funcionando perfectamente. Quiza se halla averiado.
21/12/2014 #19

Avatar de papirrin

Y como sabría si mi PIC anda funcionando perfectamente.
no me habia fijado bien pero esas resistencias de 100R estan muy pesadas, I=5/100=50mA, cada puerto como maximo soporta 20mA, asi que es muy probable que este muerto.

y yo no conectaria asi esos motores.
22/12/2014 #20
Moderador

Avatar de D@rkbytes

gianzeth dijo: Ver Mensaje
¿Y cómo sabría si mi PIC anda funcionando perfectamente?
Quizá se haya averiado.
Posiblemente por lo que menciona papirrin, pero puedes salir de dudas muy fácilmente.
Usa este programa de prueba para que veas si funcionan los puertos.
Hace algo similar a los focos del auto fantástico (K.I.T)
Código:
#include <16f877a.h>
#fuses   NOBROWNOUT
#use     delay(crystal = 4MHz)
#use     fast_io(b)

#byte    leds = getenv("SFR:PORTB")

void main (void)
{int8 i;
   
   set_tris_b(0x00);       // Puerto B como salidas.
   output_b(0x01);         // Iniciar con el bit 0 en 1
   
   while (true)
   {
      
      for(i=1;i<=7;++i)    // Bucle de 1 a 7
      {
         leds <<=1;        // Ir desplazando un bit hacia la izquierda. (LSB a MSB)
         delay_ms(150);    // Retardo de 150ms.
      }
      
      for(i=1;i<=7;++i)
      {
         leds >>=1;        // Ir desplazando un bit hacia la derecha. (MSB a LSB)
         delay_ms(150);
      }
   }
}
Para probar los puertos C y D, cambia la B de SFR:PORTB por la letra del puerto, en fast_io(b); en set_tris_b(0x00); y lo mismo con output_b(0x01);
Puedes realizar la prueba de los bits de cada puerto con LED's y su resistencia de 330Ω o con una punta lógica.

Como los puertos A y E no son de 8 bits externos, los puedes hacer cambiar de estado.
Código:
      for(i=1;i<=10;++i)
      {
         output_a(0x3F);
         output_e(0x07);
         delay_ms(150);
         output_a(0x00);
         output_e(0x00);
         delay_ms(150);
      }
Sobre la configuración como Digital I/O, no te preocupes, el compilador configura el registro ADCON1 por defecto para que sean digitales (ADCON1 = 0b00000111)

Esto no es una prueba completa, pero al menos sirve para verificar los puertos como salidas.

Para probar la pantalla, usa este sencillo programa: DSC00086.JPG
Código:
#include <16f877a.h>
#fuses   NOBROWNOUT
#use     delay(crystal = 4MHz)
#include <lcd.c>

void main (void)
{
   lcd_init();
   lcd_putc("\f Feliz Navidad");
   lcd_gotoxy(5,2);
   lcd_putc("FDE 2014");
   
   while (true);
}
Si no consigues que funcione con éstas pruebas, adiós PIC y/o pantalla.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.