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

Temas similares

09/05/2014 #101
Moderador

Avatar de D@rkbytes

luis1234567890 dijo: Ver Mensaje
cuando quiero hacer un contador de cada un segundo con lcd se demora y hasta también cuando quiero parpadear un led se demora como 3s en vez que sea 1s.
Sip, por eso te mencioné lo de la palabra de configuración.
Te daré estas para que pruebes, son para subir a 48MHz.:

// Con cristal de 4MHz.
#include <18f2550.h>
#fuses xtpll,cpudiv1,pll1,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 8MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll2,nopbaden,nolvp,nofcmen,noieso
#use delay(clock = 48MHz)

// Con cristal de 12MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll3,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 16MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll4,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 20MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll5,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

Eso que te pasa es normal, pues al estar mal la palabra de configuración y estar activo el fuse FCMEN y el fuse IESO, entra automáticamente en funcionamiento el oscilador interno.
Entonces el PIC funciona, pero a la frecuencia que tome OSCCON en el Power On Reset.

Suerte.
10/05/2014 #102

Avatar de luis1234567890

Ahora si ya está bien, el led parpadea el tiempo debido y hasta la pantalla lcd anda normal (en simulación no es así ,no se por que? , ya no le di mucha importancia ) entonces los fusibles de configuración era el problemas, bueno muchas gracias .

---------- Actualizado después de 3 horas ----------


Se me presentó otro problema que recién me he dado cuenta y ni tengo idea por que pasa.
Bueno, como comenté el led parpadea normal, osea el tiempo que le doy, pero ese es solo cuando está alimentado con el programador, o sea de la alimentación de la pc, pero cuando le pongo una fuente DC a 5v, el led se queda prendido nada más y no parpadea nada (a veces hace que el tiempo se demore más).
10/05/2014 #103
Moderador

Avatar de D@rkbytes

Lo de la simulación en proteus, es porque al microcontrolador se le pone una frecuencia y a esa corre.
Si la configuración en el programa es para trabajar a 48MHz y en el simulador se ponen 4MHz, si se notan cambios.
En la pantalla LCD las letras aparecen con una secuencia lenta, pero aparecen y los tiempos serán más lentos.

Sobre lo de la alimentación por el puerto USB, debería funcionar de la misma forma que con fuente externa.
Revisa el voltaje del pin 20 VDD (+5V) y que el pin 8 y el 19 estén conectados a VSS (GND).
No se me ocurre otra cosa por la cual funcione de diferente forma.
15/06/2014 #104

Avatar de juanma2468

Problemas con Display LCD en CCS
Hola gente realice un programa con PIC C Compiler, el cual simulado en proteus funciona de maravillas, pero cuando lo arme en una placa no funciona el LCD, lo simule con otro programa (PIC Simulador IDE) y descubri que si pongo el LCD en modo de 4 bits activo alto funciona, por lo que mi LCD debe ser activo bajo, como hago en PIC C Compiler para hacer que los datos por el puerto B sean activos bajo?. Desde ya muchas gracias.
Código:
#include <16F88.h> // Declaro el microcontrolador que voy a utilizar
#device ADC=10
#fuses intRC_io,nowdt,nobrownout,noprotect,noput,nolvp,nomclr // Declaro la palabra de configuración del microcontrolador: 
                                                              // Osc. Interno, NoWatchDog, NoBrownOut, NoProtect, NoPowerUpTime, 
                                                              // NoLowVoltageProgramming, NoMasterClear
#use delay(int=4000000)
#include <lcd.c> // Incluyo la libreria LCD para manejar la pantalla
#define use_portB_lcd TRUE // Defino el puerto B para utilizar el LCD
#use fast_io(a) // Optimiza el código que genera para programar los puertos
#byte ADCON0 = 0x1F // Declaro el registro ADCON0
#byte ADCON1 = 0x9F // Declaro el registro ADCON1
#byte ADRESH = 0x1E // Declaro el registro ADRESH
#byte ADRESL = 0x9E // Declaro el registro ADRESL

// Variables

float Conversion,Distancia, ValMin = 0;

void Inicializacion(void)
{
   setup_adc_ports(sAN0|vss_vdd);
   setup_adc(adc_clock_internal);
   set_tris_a(0b10000001); // Como entrada A0 y el resto como salidas
   //set_tris_b(0b00000000); // Todo el puerto como salidas
   //ADCON1 = 0b10000000;
   //ADCON0 = 0b11000001;
   
}

void main()
{
   delay_ms(100); // Delay de 100 mseg
   Inicializacion(); // Inicializo el microcontrolador
   lcd_init(); // Inicializo el LCD
   delay_ms(50); // Delay de 50 mseg.
   printf(lcd_putc, "\f - SIMULICAR - ");
   printf(lcd_putc, "\nMEDIDOR CALIBUR");
   delay_ms(2000);
   set_adc_channel(0);
   for(;;)
   {
   Conversion = read_adc();
   Distancia = (5*Conversion)/1023;
   if (ValMin<Distancia)
   {
      ValMin = Distancia;
   }
   lcd_gotoxy(1,1);
   printf(lcd_putc, "VA ACT = %fcm", Distancia);
   lcd_gotoxy(1,0);
   printf(lcd_putc, "VA MIN = %fcm", ValMin);
   if ((input(PIN_A7)==TRUE))
   {
      if (Distancia==0.00)
      {
         ValMin = 0;
      }
   }
   }
}
--------------------------------Actualización-------------------------------
Ya resolvi el problema y creo que esto puede ser una ayuda para otras personas a las que le haya pasado lo mismo que a mi. El problema estaba en que la pata R/W de mi LCD yo la había puesto a masa ya que pensaba que solo realizaría escrituras, pero me di cuenta que las rutinas no solo escriben, si no que además luego leen lo que escriben ya que por un instante los pines que estaban puestos como salida se hacen entradas y luego se vuelven a hacer salidas. En mi caso tambien descubrí que el micro se colgaba, eso era seguramente porque intentaría leer lo que escribió para hacer algun tipo de comparación. Simplemente con mandar la pata R/W del LCD al pin RB2 del micro el LCD salió andando sin problemas. Este problema no se manifiesta en el simulador, que es quizas lo que le pudo haber pasado a varias personas. saludos.
18/12/2014 #105


problema con lcd204 pic18f4550
buen dia ojala alguien puediara apoyarme con mi proyecto, tengo un problema uno o varios problemas, este proyecto me iva bien con el 16f877a pero se me termino la memoria, y me vi en la necesidad de migrarlo a un pic18f4550. pero no logro hacerlo arrancar, siempre he tenido problemas con la lcd20x4, aqui en este foro me la pasaron y es la que anexo en el proyecto. quiero suponer que las frecuencias son las que me estan mantando.
Archivos Adjuntos
Tipo de Archivo: rar proyecto.rar (84,5 KB (Kilobytes), 28 visitas)
18/12/2014 #106
Moderador

Avatar de D@rkbytes

jaochoam dijo: Ver Mensaje
Quiero suponer que las frecuencias son las que me estan mantando.
Sip, porque estás usando la librería modificada para trabajar a 48MHz.
Debiste usar la original o la que te mencioné anteriormente para usar el puerto D. Librería lcd420.c en puerto D

También debes cambiar la palabra de configuración, pues para trabajar a 4MHz, no estás usando la adecuada.
Usa esta:
Código:
#fuses   NOBROWNOUT,NOIESO,NOFCMEN,NOLVP,NOVREGEN
#use     delay(crystal = 4MHz)
Prueba reemplazando la librería por la del enlace y cambia la palabra de configuración.
18/12/2014 #107


ya hice lo que me comentaste y no funciona D@rkbytes, me aparece lo mismo, no aparece nada en la lcd y la información que envía por la rs232 no corresponden a los adc, en uno de los intentos que realice me percate que al no usar las directivas setup_adc_ports(all_analog); setup_adc(ADC_CLOCK_INTERNAL); si enciende la lcd. no se si el tiempo de conversión de los adc no sea compatible con la frecuencia.
18/12/2014 #108
Moderador

Avatar de D@rkbytes

Algo hiciste mal entonces, porque acabo de reemplazar la librería y la palabra de configuración, y si funciona.
La pantalla muestra valores en 0, no sé por qué, y la salida RS-232 muestra algunos valores, no se logra saber bien que valores por lo rápido que aparecen, pero si se ve algo.

Aquí adjunto el proyecto con los cambios mencionados.

Al menos ya con con esos cambios podrás determinar los problemas.
Archivos Adjuntos
Tipo de Archivo: rar proyecto.rar (101,6 KB (Kilobytes), 26 visitas)
18/12/2014 #109


muchas gracias D@rkbytes, una vez mas te lo agradezco. voy a estudiar a fondo los fuses y frecuencias en general. y para comenzar me podrias resolver una duda. en este mismo foro colocaste sintaxis en la palabra de configuracion para diferentes frecuencias al trabajar con una u otra frecuencia en los fuses y cristales tambien tengo que modificar la libreria de la lcd o ni al caso.
me refiero a estas configuraciones
// Con cristal de 4MHz.
#include <18f2550.h>
#fuses xtpll,cpudiv1,pll1,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 8MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll2,nopbaden,nolvp,nofcmen,noieso
#use delay(clock = 48MHz)

// Con cristal de 12MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll3,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 16MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll4,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)

// Con cristal de 20MHz.
#include <18f2550.h>
#fuses hspll,cpudiv1,pll5,nobrownout,nopbaden,nolvp
#use delay(clock = 48MHz)
19/12/2014 #110
Moderador

Avatar de D@rkbytes

jaochoam dijo: Ver Mensaje
Muchas gracias D@rkbytes, una vez mas te lo agradezco. Voy a estudiar a fondo los fuses y frecuencias en general.
De nada.
jaochoam dijo: Ver Mensaje
Y para comenzar, ¿me podrías resolver una duda?
En este mismo foro colocaste sintaxis en la palabra de configuración para diferentes frecuencias.
¿Al trabajar con una u otra frecuencia en los fuses y cristales también tengo que modificar la librería de la lcd o ni al caso?
La librería original puede trabajar bien hasta 20MHz, para frecuencias mayores, ya debes usar la librería modificada.
22/12/2014 #111


buen dia D@rkbytes tengo un problema referente a este mismo proyecto, me funciona ala perfeccion el .hex que viene en el proyecto que me enviaste funcionando pero al siquiera compilarlo sin ninguna modificacion me devuelve todo el problema inicial.
22/12/2014 #112
Moderador

Avatar de D@rkbytes

jaochoam dijo: Ver Mensaje
Me funciona ala perfección el .hex que viene en el proyecto que me enviaste funcionando pero al siquiera compilarlo sin ninguna modificación me devuelve todo el problema inicial.
OK. Entonces si al compilar el programa ya no se muestra nada en la pantalla, tienes que actualizar PIC C Compiler. (Algunas versiones, no recuerdo bien cuales pero alrededor de "v4.13X" tuvieron éste problema.)
Actualmente existe un problema con las nuevas versiones 5.02X.
El problema surge cuando se hace uso de la instrucción port_x_pullups();
Si ésta instrucción se coloca antes de inicializar la pantalla "lcd_init();", ya no se ve nada después en la pantalla.
Entonces se tiene que colocar port_x_pullups(); después de ésta instrucción.

Si es alguno de éstos casos, eso puede ser la solución.
22/12/2014 #113


si no es mucha indiscrecion cual version de picc me recomiendas
23/12/2014 #114
Moderador

Avatar de D@rkbytes

jaochoam dijo: Ver Mensaje
Si no es mucha indiscreción, ¿cuál versión de picc me recomiendas?
Siempre es bueno tener las nuevas versiones ya que se van mejorando cosas y corrigiendo errores.
Ahora va por la 5.034, pero necesitas ser usuario registrado para acceder a las actualizaciones.
23/12/2014 #115


buen dia D@rkbytes, ya actualice el pic c compiler y todo bien, pero ahora estoy estudiando los fuses y probando con el pic18f452 los fusibles cambian. de los que tenia configurado el 18f4550 los fuses FCMEN, IESO,VREGEN no los soporta, lo compilo con los que si soporta y no funciona.

---------- Actualizado después de 24 minutos ----------

ya resolvi mi problema D@rkbytes, ya me da pena de estar moleste y moleste, gracias por todo
07/02/2015 #116


Problema Lcd se desvanece.
Buen dia;
Estoy haciendo un proyecto en el cual uso 5 lcd´s (16x2) cada uno con su pic (16f873A), los pic's tienen todos el mismo programa y el mismo circuito de conexión, el problema es que para el proyecto tenia 2 lcd's en stock y compre los otros 3, al probarlos los 2 antiguos son más tenues que los nuevos (son todos azules), y al momento de conectarlos al circuito funcionan bien luego de un rato y luego empiezan a desvanecerse las letras pero solo en los lcd's nuevos, los viejos funcionan muy bien, intercambio de circuitos, de pic's pero pasa igual (los nuevos :( y los viejos ) para el contraste les puse una resistencia fija de 3.3Kohm, para todos los circuitos y como dije anteriormente todos inicialmente funcionan bien, pero solo los nuevos se desvanecen. Agradezco su colaboración.
Imágenes Adjuntas
Tipo de Archivo: jpg lcd.jpg (32,5 KB (Kilobytes), 12 visitas)
Tipo de Archivo: jpg lcd1.jpg (26,4 KB (Kilobytes), 11 visitas)
07/02/2015 #117

Avatar de juanma2468

Se me hace que estan flojas las gomas conductoras de los LCD y por eso se desvanecen. Para solucionarlo pides desajustar las travitas negras que apretan el marco contra la placa, volver a presionar la pantalla ejerciendo algo de presion sin dañarla y volver a ajustarlas. Si persiste tendras que desarmarla por completo y limpiar los contactos donde apoyan las gomas conductoras y las gomas conductoras tambien con alcohol isopropilico, volver armar y probar.
22/02/2015 #118


Hola comunidad foros de electrónica.
Me gustaría que me ayudaran a visualizar el estado off/on de 8 led que es lo me a hace falta ami código a y tengo algunos errores de visualización.
su ayuda me sería de gran aprecio ya que no se mucho de programación.
les adjunto la simulación en proteus y la programación en c.

Este es el programa en c disculpen por lo extenso del código.

---------- Actualizado después de 3 minutos ----------

Código PHP:
#include <16f877a.h>
#use     delay(crystal = 4MHz)

#define use_portb_kbd TRUE
#include <KBD96.c>
#include <LCD420.c>
#include <stdlib.h>

#define  LED_1  PIN_D0
#define  LED_2  PIN_D1
#define  LED_3  PIN_D2
#define  LED_4  PIN_D3
#define  LED_5  PIN_D4
#define  LED_6  PIN_D5
#define  LED_7  PIN_D6
#define  LED_8  PIN_D7

#define ENTRADA1 PIN_C0
#define ENTRADA2 PIN_C1
#define ENTRADA3 PIN_C2
#define ENTRADA4 PIN_C3
#define ENTRADA5 PIN_C4
#define ENTRADA6 PIN_C5

void mostrar_menu(){
lcd_gotoxy(3,1);
printf(lcd_putc,"\fMENU PRINCIPAL\r");
lcd_gotoxy(1,2);
printf(lcd_putc," 0 Estado Entradas");
lcd_gotoxy(1,3);
printf(lcd_putc," * Control Salidas");
}

void funcion_led_1()
{
   
output_toggle(LED_1);
}

void funcion_led_2()
{
   
output_toggle(LED_2);
}

void funcion_led_3()
{
   
output_toggle(LED_3);
}

void funcion_led_4()
{
   
output_toggle(LED_4);
}

void funcion_led_5()
{
   
output_toggle(LED_5);
}

void funcion_led_6()
{
   
output_toggle(LED_6);
}

void funcion_led_7()
{
   
output_toggle(LED_7);
}

void funcion_led_8()
{
   
output_toggle(LED_8);
}

void funcion_lectura_entradas(){
lcd_gotoxy(1,1);
printf(lcd_putc,"INPUT1=%u",input(ENTRADA1));
lcd_gotoxy(1,2);
printf(lcd_putc,"INPUT2=%u",input(ENTRADA2));
lcd_gotoxy(1,3);
printf(lcd_putc,"INPUT3=%u",input(ENTRADA3));
lcd_gotoxy(11,1);
printf(lcd_putc,"INPUT4=%u",input(ENTRADA4));
lcd_gotoxy(11,2);
printf(lcd_putc,"INPUT5=%u",input(ENTRADA5));
lcd_gotoxy(11,3);
printf(lcd_putc,"INPUT6=%u",input(ENTRADA6));
lcd_gotoxy(1,4);
printf(lcd_putc,"REGRESO MENU PULSE #");
}

void main () 
{
CHAR k;

   
lcd_init();
   
kbd_init();
   
port_b_pullups(TRUE);
 
   
output_low(LED_1),(LED_2),(LED_3),(LED_4),(LED_5),(LED_6),(LED_7),(LED_8);
   
printf(lcd_putc,"\fBienvenidos (^^,)\r\rPulsa # para ir menu");

   while (
true)
   {
      
kbd_getc();
      
      if (
k!=0)
         switch(
k)
         {
         case 
'0':
            
funcion_lectura_entradas();
            break;
         case 
'1':
            
funcion_led_1();
            break;    
// Brake ya no se coloca al final de la selección.
         
case '2':
            
funcion_led_2();
            break;
            case 
'3':
            
funcion_led_3();
            break;
            case 
'4':
            
funcion_led_4();
            break;
            case 
'5':
            
funcion_led_5();
            break;
            case 
'6':
            
funcion_led_6();
            break;
            case 
'7':
            
funcion_led_7();
            break;
            case 
'8':
            
funcion_led_8();
            break;
            case 
'#':
            
mostrar_menu();
            break;  
         }
   }

Imágenes Adjuntas
Tipo de Archivo: png lcd 4x20.png (139,9 KB (Kilobytes), 9 visitas)
Tipo de Archivo: png proteus.png (226,7 KB (Kilobytes), 12 visitas)
Archivos Adjuntos
Tipo de Archivo: rar programa.rar (43,9 KB (Kilobytes), 10 visitas)
22/02/2015 #119

Avatar de anderson torres

En si, que es lo que no trabaja?
22/02/2015 #120


gracias anderson por preguntar
la visualización de los 8 led en la lcd
me gustaría ver cuando estén encendidos o apagados
¿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.