Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Error en frecuencimetro escrito con ccs simulado con proteus


       



#1  Error en frecuencimetro escrito con ccs simulado con proteus
dani_pic
Registrado: 08 Abr 2008
Mensajes: 9
citar
¡Hola a todos!

Posteo esto a ver si alguien me puede echar una mano en lo siguiente:

Estoy programando un frecuencimetro (forma parte de un afinador) para leer unas señales cuadradas y la idea que vengo desarrollando es esta:

- La señal cuadrada (de entre 40 y 100 Hz) entra por el RB1 y mediante la interrupcion externa INT1 a cada flanco de subida de la señal voy incrementando un contador. Cada 6 flancos (contador=6) miro el contenido del timer 1 que es el que utilizo para contar y de ahí saco la frecuencia. Después ese valor (freq) lo quiero mostrar por pantalla LCD.

Al compilarlo el CCS no me da ningun error pero, cuando simulo con proteus veo que el fallo está en la parte del codigo que he escrito para usar el LCD.

Deciros tambien q el puerto A me lo reservo para futuros pulsadores y para usar unos leds y que me comunico con el LCD mediante el puerto C.

Os adjunto el código que compilo,

¡Muchas gracias!
Archivos Adjuntos

Este mensaje contiene archivos adjuntos, para verlos debes estar registrado.

#2  
lmct
Ubicación: españa
Registrado: 03 Ago 2008
Mensajes: 27
citar
Hola, no se si es tu caso, pero por si acaso te lo comento, la libreria lcd.c, no esta preparada para manejar el puerto c, para ello tiene que abrir dicha libreria y cambiar la direccion del puerto que por defecto es el "d" por el puerto "c"

#if defined(__PCH__)
#if defined use_portb_lcd
#byte lcd = 0xF81 // This puts the entire structure
#else
// #byte lcd = 0xF83 This puts the entire structure direccion puerto d anulada
#byte lcd = 0xF82 // para gestionar el puerto c
#endif
#else
#if defined use_portb_lcd
#byte lcd = 6 // on to port B (at address 6)
#else
// #byte lcd = 8 on to port D (at address 8) anulada
#byte lcd = 7 // para el puerto c
#endif
#endif

aqui el codigo que tiene que modificar he anulado las lineas correspondientes al puerto d y he añadido las del puerto c

por lo demas tiene que funcionar... no esta demasiado bien estructurado pero deberia funcionar.

#3  
lmct
Ubicación: españa
Registrado: 03 Ago 2008
Mensajes: 27
citar
perdona me he dejado de poner el codigo corregido que esta mal
la funcion debe ser asi

void escribir_pantalla(){

// NO HACE FALTA YA ESTA INICIALIZADO EN MAIN lcd_init();
lcd_gotoxy(1,1);

// ASI NO FUNCIONA ESTO ES PARA EL PUERTO SERIE printf("%3Lu",freq);
printf(lcd_putc,"%3Lu",freq); // esto es lo correcto hay que añadir el comando lcd_putc
enable_interrupts(INT_EXT1);
}

Saludos

#4  
dani_pic
Registrado: 08 Abr 2008
Mensajes: 9
citar
Gracias por la respuesta, lmct, he cambiado lo que me dijiste y ahora cuando simulo con proteus me sale el siguiente mensaje de alerta:

"PC=0x442. The SCSx bits have been set. This feature is not modelled - the model continues to clock itself as before"

Veo que el mensaje hace referencia a la linea de mi programa en la que paso los parametros del oscilador:

Código: Seleccionar todo
setup_oscillator(OSC_4MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF);



Tambien sale otro mensaje referente a la lcd que dice:

"Controller received command whilst busy"


Realmente ahora mismo no se que debo modificar para que se solucione, cualquier ayuda que me deis será de agradecer chicos.

¡Un saludo!

#5  
lmct
Ubicación: españa
Registrado: 03 Ago 2008
Mensajes: 27
citar
Hola, que tal.
Bueno yo el proteus no lo manejo. Ha lo mejor no estoy en lo cierto, pero
Setup_oscillator no forma parte del lenguaje CCS, en el archivo de cabezera ya hay algo como esto #use delay(clock=4000000), que es lo que define el clock. Pero a lo mejor setup oscillator forma parte del proteus no lo se.
Tambien he observado que el el main no tienes el bucle cerrado, posiblemente el problema del display sea este pon esto para probar

void main()
{


// SET_TRIS_E(0x0);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();

setup_oscillator(OSC_4MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF);

ini_timer();

enable_interrupts(INT_EXT1);
enable_interrupts(GLOBAL);
//añadido esto

while (true)
{
// esto evita que se repitan las instrucciones de arriba, que ya han sido
// inicializadas y da continuidad al programa
}

}

Saludos

#6  
ElVale
Registrado: 06 Jun 2008
Mensajes: 10
citar
Haz que freq sea float y no long

#7  
dani_pic
Registrado: 08 Abr 2008
Mensajes: 9
citar
Muy buenas,

Pues bueno, la cosa sigue sin ir, de momento el error que me da proteus sigue siendo el mismo referente al LCD:

Controller received data whlts busy

Sad

Está claro que la estoy liando en el codigo del CCS pero no tengo ni idea donde.

Por cierto, lmct, en la version de CCS que manejo 4.038, usando el project wizard, te pregunta a que frecuancia trabajara el micro (en mi caso 4Mhz, utilizando el oscilador interno del 18f2520), así que no se si seguirá siendo necesario definirlo yo a mano

¡Saludos!

EDIT:
tambien he cambiado freq por un float ^^

#8  
lmct
Ubicación: españa
Registrado: 03 Ago 2008
Mensajes: 27
citar
Hola, bien pues vamos a probar esto a ver que pasa puede que el problema este en el formato de la variable. si esto funciona por lo menos sabras que el display esta bien. Pon esto justo encima del main. El problema puede estar en el tipo del formato de datos creo que faltan numeros.

printf(lcd_putc, "\f Frecuencimetro V1.1");
delay_ms(5000);

tambien puedes probar a cambiar el formato he puesto mas digitos a ver si es que la variable es mas grande de 3 digitos y no la puede mostrar. He colocada 6 digitos, antes borro la pantalla, pon la variable en long
printf("/f%06Lu",freq);

Saludos

#9  
dani_pic
Registrado: 08 Abr 2008
Mensajes: 9
citar
Perdona por no responder antes, he estado aislado sin internet durante estos dias Razz
Mañana tendré mi ordenador a mano con el proyecto y probaré lo que me has dicho a ver si funciona.

Os contaré que tal ha ido.

#10  
dani_pic
Registrado: 08 Abr 2008
Mensajes: 9
citar
Nada chicos, que no funciona:

"Controller received command whilst busy"


Os adjunto el proyecto en proteus tambien para que le echeis un vistazo a ver donde puede estar el fallo... Sad

Que desesperación... sin esto no voy a terminar el proyecto nunca
Crying or Very sad

¡un saludo!
Archivos Adjuntos

Este mensaje contiene archivos adjuntos, para verlos debes estar registrado.

 Responder



 Otros temas de interés 
No hay mensajes nuevos Contar pulsos en determinado tiempo
No hay mensajes nuevos Comenzar a contar desde 0
No hay mensajes nuevos Sensor para contar monedas
No hay mensajes nuevos contador des(192) cuando llegue a cero no vuelva a contar
No hay mensajes nuevos Como conectar la 7490 para contar hasta 9

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||
Contacto | Acerca de | Ayuda | Normas de la Comunidad | Privacidad | Mapa de los foros
© Foros de Electrónica - Comunidad Internacional de Electrónicos