Autor Tema: Codigo no funciona!  (Leído 2580 veces)

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

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Codigo no funciona!
« en: 11 de Agosto de 2015, 22:10:51 »
No entiendo o no puedo ver que esta mal pero este codigo tan simple no funciono con dos 18f2450 ni con un 18f2455  :? :? la simulacion en isis funciona bien!

Código: [Seleccionar]
#include <18f2455.h>

#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP   
 
#use delay(clock=4000000)

#define  LCD_ENABLE_PIN    PIN_B0
#define  LCD_RS_PIN        PIN_B1
#define  LCD_RW_PIN        PIN_B2

#define  LCD_DATA4         PIN_B4
#define  LCD_DATA5         PIN_B5
#define  LCD_DATA6         PIN_B6
#define  LCD_DATA7         PIN_B7

#include <lcd.c>

int16 distancia, tiempo;
#define trig pin_A1
#define echo pin_A0
#USE standard_io(b)

void main()
{

lcd_init();
delay_ms(250);

printf(LCD_PUTC, "\f Iniciando");

output_high(PIN_A2);
delay_ms(500);

printf(LCD_PUTC, "\f Iniciando .");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ..");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ...");
delay_ms(500);
output_low(PIN_A2);

while(true)
{
}

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #1 en: 12 de Agosto de 2015, 00:00:06 »
Bueno recien recorde que lalibreria lcd.c tenia algunos problemas, asi que solo comente la libreria y ahora pone A2 en estado alto y bajo 14 veces y despues no hace más nada! porque hace eso?

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Codigo no funciona!
« Respuesta #2 en: 12 de Agosto de 2015, 07:09:56 »
Hola MINDFIELD, tu código no hace nada,  pues porque no hace nada, cuando llega al while(true) se queda hay permanentemente sin hacer nada, no tiene interrupciones ni nada por esl estilo que llame ha hacer nada.

Lo de que pone en alto 14 veces el pin A2 pues eso debería hacerlo solo una vez, o se esta reiniciando 14 veces o sepa dios lo que esta haciendo CCS por dentro.

Cuelga el esquemático a ver si hay algo raro. O prueba a meter cosas en el while para ver si esta funcionando el micro.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #3 en: 12 de Agosto de 2015, 07:47:31 »
Hola juaperser1 justamente quiero que prenda y apague un led, ya que no saca ningun mensaje por el lcd y amodo de prueba hice el codigo asi a proposito! el codigo original está acá Codigo

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Codigo no funciona!
« Respuesta #4 en: 12 de Agosto de 2015, 08:07:25 »
bueno, para empezar tienes que colocar una resistencia en el led o lo quemaras, pon una resistencia en serie de unos 330 por ejemplo, los condensadores de desacoplo del cristal van a masa? no se aprecia bien, pero deben de ir a masa, y en circuito físico, debes de haber seguido unas reglas, por ejemplo los condensadores lo mas cerca posible del cristal, ademas de el cristal lo mas cerca del micro, colocar condensadores de desacoplo en las alimentaciones del micro... etc etc.

prueba este código para saber si esta bien:

Código: [Seleccionar]
#include <18f2455.h>

#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP   
 
#use delay(clock=4000000)
#USE standard_io(A)

void main()
{

while(true)
{
      output_high(PIN_A2);
      delay_ms(500);
      output_low(PIN_A2);
      delay_ms(500);
}
}

no me acuerdo casi nada del CCS pero creo que asi te debe de parpadear el led. pruebalo y te aseguras de que el el micro va bien.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #5 en: 12 de Agosto de 2015, 20:39:25 »
Hola! gracias por tú ayuda, todo lo que me aconsejas ya estaba listo desde que lo arme! el circuito en proteus es el mismo salvo la r que va al led que no está, los condensadores si van a masa! voy a probar tú codigo, recien llego pero en brebe lo pruebo y te comento, el codigo primero deveria pasar por el main verdad?

...

Bien ya lo probe y funciona prende y apaga 4 veces y espera elmismo tiempo que el total de las 4 veces que prende y apaga y vuelve a repetir todo!  :huh: ahora que ago?
« Última modificación: 12 de Agosto de 2015, 21:02:10 por MINDFIELD »

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #6 en: 12 de Agosto de 2015, 21:26:54 »
Hice otra prueba de esta forma:

Código: [Seleccionar]
#include <18f2455.h>

#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP   
 
#use delay(clock=4000000)
#USE standard_io(A)

void main()
{

while(true)
{
      output_high(PIN_A2);
}
}

ahora solo prende y apaga continuamente !  :huh:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Codigo no funciona!
« Respuesta #7 en: 12 de Agosto de 2015, 21:50:49 »
Hay otra cosa mal ahi, no puede prender y apagar si solo tenes para encenderlo. Algo lo debe estar reseteando al micro.

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #8 en: 13 de Agosto de 2015, 07:23:28 »
hoy me voy a fijar de nuevo, tengo un par de soldaduras que van al lcd tal vez este paso a mejor vida pero hasta hoy a la noche no voy a saber...
« Última modificación: 13 de Agosto de 2015, 07:32:27 por MINDFIELD »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Codigo no funciona!
« Respuesta #9 en: 13 de Agosto de 2015, 08:50:35 »
Como dice killer si  el código que te puse y ese que tu has puesto no funcionan el problema es de hardware, puede que se haya producido un corto, que calentaras demasiado un componente, la placa es casera, una pista este medio suelta, alguna soldadura mala pfff mil cosas.

Pero ese micro se enciende y se apaga constantemente.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #10 en: 13 de Agosto de 2015, 20:44:12 »
si pero este es el tercer pic que pruebo, el circuito es simple! y si es el problema de hardware presumo que es el lcd en un par de minutos me fijo

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #11 en: 13 de Agosto de 2015, 21:59:42 »
Bueno mi experiencia es limitada pero despues de hacer unas pruebas hice que el led encienda y hasta ahi todo bien! despues use de nuevo el codigo original con el que empeze la cuestion pero con el lcd sin conexion alguna y para mi sorpresa el circuito no hace nada de nada... ahi pongo el codigo aunque para mi el problema es la libreria del lcd! pero tambien probe con la libreria flex

Código: [Seleccionar]
#include <18f2455.h>

#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP  
 
#use delay(clock=4000000)

#USE standard_io(A)
#USE standard_io(b)

#include <lcd.c>

int16 distancia, tiempo;
#define trig pin_A1
#define echo pin_A0

void main()
{
lcd_init();
delay_ms(250);

output_high(PIN_A2);
delay_us(750);                      
output_low(PIN_A2);

printf(LCD_PUTC, "\f Iniciando");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando .");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ..");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ...");
delay_ms(500);

output_high(PIN_A2);
delay_ms(500);
output_low(PIN_A2);
delay_ms(500);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

while(true)
{
output_high(trig);                  
delay_us(20);                      
output_low(trig);
while(!input(echo))                    
{
}
set_timer1(0);                        
while(input(echo))                    
{
}

tiempo=get_timer1();
distancia=(tiempo*10)/(58.0);
printf(LCD_PUTC, "\fTiempo :%Lu \nDistancia = %Lu",tiempo,distancia);
delay_ms(500);
}
}

y para confirmar mi "corazonada" este codigo si funciono!

Código: [Seleccionar]
#include <18f2455.h>

#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP   
 
#use delay(clock=4000000)

#USE standard_io(A)
#USE standard_io(b)

//#include <lcd.c>

int16 distancia, tiempo;
#define trig pin_A1
#define echo pin_A0

void main()
{
//lcd_init();
delay_ms(250);

output_high(PIN_A2);
delay_us(750);                     
output_low(PIN_A2);

/*printf(LCD_PUTC, "\f Iniciando");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando .");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ..");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ...");
delay_ms(500);*/

output_high(PIN_A2);
delay_ms(500);
output_low(PIN_A2);
delay_ms(500);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

while(true)
{
output_high(trig);                 
delay_us(20);                     
output_low(trig);
while(!input(echo))                   
{
}
set_timer1(0);                       
while(input(echo))                   
{
}

tiempo=get_timer1();
distancia=(tiempo*10)/(58.0);
//printf(LCD_PUTC, "\fTiempo :%Lu \nDistancia = %Lu",tiempo,distancia);
delay_ms(500);
}
}
« Última modificación: 13 de Agosto de 2015, 22:32:37 por MINDFIELD »

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #12 en: 14 de Agosto de 2015, 00:00:24 »
Puede ser error del pickit2 clone o de ccs????  :huh:

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Codigo no funciona!
« Respuesta #13 en: 14 de Agosto de 2015, 22:19:20 »
Si el problema no es de hardware seguramente es de software, MINDFIELD.
Tu codigo funciona al agregarle unas pequeñas cocitas tan solo, por lo menos desde la simulacion  :D

Te adjunto el codigo y simulacion, espero te aclare algunas cosas!

Saludos

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Codigo no funciona!
« Respuesta #14 en: 15 de Agosto de 2015, 17:45:24 »
Gracias RALF2 si puedo lo pruebo ya! apenas llego de trabajar y en unos minutos tengo que salir! tú codigo a simple vista tiene en los fuses XT,NOWDT,NOPBADEN,PUT,NOBROWNOUT,NOLVP, MCLR,  agregaste NOPBADEN y MCLR no se que funcion cumple NOPBADEN y MCLR pensaba que con la r de 10k deberia ser NOMCLR, ademas veo que escribiste una coma y yo no! porque ami no me dio ningun error??
En la simulacion que hace el push button en RA0? porque no me funciona! y tampoco saca ningun mensaje por el lcd... sera mi pc que anda como yo?  :mrgreen:
« Última modificación: 15 de Agosto de 2015, 17:49:02 por MINDFIELD »


 

anything