TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: japifer_22 en 23 de Abril de 2009, 15:59:23

Título: sacar valor de un whail(true)
Publicado por: japifer_22 en 23 de Abril de 2009, 15:59:23
bueno tengo el siguiete problema intento con un pic mostrar un valor de voltaje en una LCD y en el pc por el puerto RS232,
pero en la simulacion de proteus cuando pongo el virtual terminal el valor medido se repite indefinidamente hacia abajo y no se por que es, bueno tengo una sospecha que el printf que le mando al pc al esta dentro de una rutina ciclica. bueno si me pueden ayudar porfavor se los agradeseria. el codigo es el siguiente para que vena mi error XD.

#include <16f873a.h>            //pic a utilizar
#device adc=10      // Conversión con 10 bits
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //clock=4Mhz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)   //manejo del RS232
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd

int16 Valor;       // para 10 bits
float const resolucion= 5.0/1024.0;      // Conversión con 10 bits
float voltios;
signed char x=16,a,b;         //indice filas
///DECLARACION DE FUNCIONES

void main()
{
  lcd_init();         //inicializa, o activa lcd
   lcd_gotoxy( 1, 1);
   printf(lcd_putc,"***Voltimetro***");   //muestra mensaje inicio
   lcd_gotoxy( 1, 2);
   printf(lcd_putc,"Taller de Diseno");   //muestra mensaje inicio

   do{                     //espera hasta que se pulse boton...
   }while(input(PIN_A1)==1);
   printf(lcd_putc,"\f");      //...para borrar pantalla e iniciar contador


   // Configuramos entradas analogicas:
  setup_adc_ports(AN0);
  setup_adc(ADC_CLOCK_INTERNAL);
  // Tomamos las medidas
  set_adc_channel(0);
  enable_interrupts(GLOBAL);               //activadas interrupciones

 while (TRUE){
  Valor=read_adc();//almacena el valor de medicion
  voltios= valor * resolucion; //convierte de resolucion de 10bit a numeros
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"%1.2f voltios", voltios );
  printf(lcd_putc,"\b");//retrasa el cursor una posicion

 
 
  delay_ms(185);
 lcd_gotoxy(x,2) ;      //cursor para escribir mensaje
 printf(lcd_putc,"A.Avila-R.Fuentes ");
 delay_ms(185);//tiempo de rotacion del mensajevoltios
 if(x==-16){
 x=16;
      }
  x--;
  voltios=a;
if(a==voltios){
printf("\r\n\%1.2f voltios \r\n", voltios);
}a++;
}}
Título: Re: sacar valor de un whail(true)
Publicado por: micro_cadaver en 23 de Abril de 2009, 16:28:52
imagino que tu condicion para iniciar el muestreo y todo lo demas es esta parte

do{                     //espera hasta que se pulse boton...
   }while(input(PIN_A1)==1);
   printf(lcd_putc,"\f");      //...para borrar pantalla e iniciar contador


sinembargo de lo que lei tu codigo, nunca volverá a esa parte pues abajo hay un bucle while(1) del cual no saldra.

while (TRUE){
  Valor=read_adc();//almacena el valor de medicion
  voltios= valor * resolucion; //convierte de resolucion de 10bit a numeros
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"%1.2f voltios", voltios );
  printf(lcd_putc,"\b");//retrasa el cursor una posicion

 
 
  delay_ms(185);
 lcd_gotoxy(x,2) ;      //cursor para escribir mensaje
 printf(lcd_putc,"A.Avila-R.Fuentes ");
 delay_ms(185);//tiempo de rotacion del mensajevoltios
 if(x==-16){
 x=16;
      }
  x--;
  voltios=a;
if(a==voltios){
printf("\r\n\%1.2f voltios \r\n", voltios);
}a++;
}

porque tiene un while esta parte?
Título: Re: sacar valor de un whail(true)
Publicado por: japifer_22 en 23 de Abril de 2009, 16:32:03
por que quiero que este todo el rato sensando la entrada analoga y me de los valores la probe sin el while (1) y el printf no me da valores que queda pegado en el primer ciclo por eso XD