Autor Tema: Proteus y LCD  (Leído 3968 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
Proteus y LCD
« en: 17 de Febrero de 2006, 06:13:00 »
Hola, tengo el siguiente programa en CCS:

--------------------------------------------------------------------------------
# include <16F876a.h>
# use delay(clock=4000000)
# fuses XT,WDT,NOPROTECT,NOLVP
# define use_portb_lcd TRUE
# include <lcd.c>

void main(){
int m;
int BCD1,BCD2,BCD3,BCD4,C4;
BCD1=1;
BCD2=2;
BCD3=3;
C4="4";
do{

lcd_init();
printf(lcd_putc,"  Voltaje Max:  "Giño;
printf(lcd_putc,"
     %c%u,%u%uV     ",C4,BCD3,BCD2,BCD1);

for(m=0;m!=600;m++){
restart_wdt();
delay_ms(2);}

}while(1);
}
---------------------------------------------------------------------------------------------

Y al ejecutarlo en Proteus, lo que me escribe la funcion:
printf(lcd_putc,"
     %c%u,%u%uV     ",C4,BCD3,BCD2,BCD1);

Da un pequeño parpadeo. Me pregunto si tambien lo hará cuando lo monte con un display real.

Saludos y gracias.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Proteus y LCD
« Respuesta #1 en: 17 de Febrero de 2006, 07:08:00 »
No entiendo para que sirve esto:

for(m=0;m!=600;m++){
restart_wdt();
delay_ms(2);}

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #2 en: 17 de Febrero de 2006, 07:31:00 »
Hola, eso es un retardo de 1200msg, lo hago así para restaurar el WDT, pues este se desborda aproximadamente a los 18msg, y si no al poner un retardo de mas tiempo se resetearia el pic. O eso creo.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Proteus y LCD
« Respuesta #3 en: 17 de Febrero de 2006, 10:16:00 »
Supongo que este será un programa de prueba para probar el WDT y la LCD, porque servir lo que se dice servir no es que sirva para mucho.

Si van por ahí los tiros, porqué no quitas el for y pones el restart_wdt() dentro del while(1):

while(1)
   restart_wdt();

El parpadeo lo tienes precisamente por no haber metido al perrito dentro del while, se está reseteando contínuamente y volviendo cada vez a pintar en la LCD.

Un saludo


Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #4 en: 17 de Febrero de 2006, 11:52:00 »
Efectivamente es un programa de prueva.

Gracias por tu respuesta.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #5 en: 17 de Febrero de 2006, 14:48:00 »
Hola de nuevo, he escrito este programa mas sencillo, y sigue parpadeando.
He probado a desactivar el wdt, en la linea de fuses, y hace lo mismo.

-------------------------------------------

# include <16F876a.h>
# use delay(clock=4000000)
# fuses XT,NOWDT,NOPROTECT,NOLVP
# define use_portb_lcd TRUE
# include <lcd.c>

# USE FAST_IO(A)
# USE FAST_IO(B)
# USE FAST_IO(C)



void main(){

do{
restart_wdt();
lcd_init();
printf(lcd_putc,"    Salida:     ");
restart_wdt();
}while(1);
}
------------------------------------------------------------

Otra duda es como se acciona un pulsador.

Saludos y gracias.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Proteus y LCD
« Respuesta #6 en: 17 de Febrero de 2006, 15:00:00 »
¿cuanta CPU consume?


Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #7 en: 17 de Febrero de 2006, 15:36:00 »
Hola, consume un 10%.

Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: Proteus y LCD
« Respuesta #8 en: 17 de Febrero de 2006, 17:32:00 »
A ver si es de prueba y a menos que no lo necesites yo no implementaria el perro... (watchdog). Bastantes fuentes de problemas tenemos siempre en electronica para unir uno mas. Usalo para depurar y si quieres en la fase final del programa. Ademas en el codigo que presentas tienes el watchdog desconectado por fuse y luego lo reseteas...

Otra cosa es que no se porque vuelves a escribir en el loop lo que debe mostrar el lcd, date cuenta que el lcd tiene su propio micro y memoria... no hace falta que lo refresques para nada si no es para escribir nada nuevo. Por eso debe parpadear.

Aqui tienes el codigo que yo propondira.

Codigo:

# include <16F876a.h>
# use delay(clock=4000000)
# fuses XT,NOWDT,NOPROTECT,NOLVP
# define use_portb_lcd TRUE
# include <lcd.c>

# USE FAST_IO(A)
# USE FAST_IO(B)
# USE FAST_IO(C)



void main(){
lcd_init();
printf(lcd_putc," Salida: ");
}


Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #9 en: 17 de Febrero de 2006, 17:52:00 »
Hola, gracias por tu respuesta.

Lo del fuse es que estuve haciendo pruevas a ponerlo y quitarlo.

Y lo de refrescar el lcd en el bucle, es porque en la aplicacion que le voy a dar, un voltimetro, tiene que estar constantemente midiendo y actualizando el display.
Mi idea era poner un retardo de unos 600msg entre una medida y otra.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Proteus y LCD
« Respuesta #10 en: 17 de Febrero de 2006, 21:23:00 »
Te sigue parpadeando porque tienes el lcd_init(); dentro del while(1), entonces está inicializando contínuamente la LCD. El lcd_init(); debes ponerlo siempre el el main().

En resumidas cuentas:

void main(){
lcd_init();
do{
lcd_gotoxy(1,1);
printf(lcd_putc," Salida: "Giño;
restart_wdt();
}while(1);
}

Yo a menos que se trate de un programa muy largo y que se te pueda quedar colgado por alguna razón,  tampoco soy partidario de usar el perro guardian con lo cual el restart_wdt(); sobraría.

El lcd_gotoxy(1,1); es para que empiece a pintar siempre en la misma posición, de lo contrario se te llenaría la LCD de "Salida-s"

Un saludo

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3171
RE: Proteus y LCD
« Respuesta #11 en: 18 de Febrero de 2006, 05:17:00 »
Muchas gracias pocher, has dado en el clavo.

Una duda mas, como se acciona un pulsador en Proteus. Cuando lo pincho con el raton se mueve, pero electricamente no hace nada, sin embargo si lo pongo en corto con un hilo, si me hace caso el circuito.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Proteus y LCD
« Respuesta #12 en: 19 de Febrero de 2006, 10:59:00 »
Para usar un pulsador tienes que usar también una resistencia de tal forma que según la conectes puedas mandar al PIC masa o Vcc.

Si no te aclaras, pega una imagen de como lo conectas.

En PROTEUS la mayor parte de las veces por cuestiones de rapidez uso LOGICSTATE para simular un pulsador o un interruptor. Esta en la librería Debugging Tools.

Un saludo


 

anything