TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Diego E. en 25 de Septiembre de 2008, 10:54:15

Título: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 10:54:15
Hola grupo, me pueden indicar como configurar el AD a 10 bit,
int16 resultado;
resultado=read_adc();
si lo configuro a 8 bit me entrega el valor correcto pero si lo configuro a 10 bit
me entrega solo los 2 bit superiores

gracias
Título: Re: conversor a 10 bit
Publicado por: Micro23 en 25 de Septiembre de 2008, 11:10:01
Hola Diego, podrias poner el codigo aca asi veo cual puede ser el problema.
Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 11:44:00
micro23, gracias por responderme

#byte   adcon0=0x1f  //registros de configuracion
#byte   adcon1=0x9f
int16 valor_ad;

void conversion_ad()
{
adcon1=0x8e; //configuracion de del adcon con justificacion a la derecha

set_adc_channel(0);
delay_us(10);
valor_ad = read_adc(); //en valor_ad solo aparece el dato del adresh ya sea justificado a la izquierda o derecha
}

gracias
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 13:01:58
micro32, probé de esta forma y me funciona

{
bit_set(ini_ad);
while(ini_ad==1);
valor_ad=((int16)adresh*256)+adresl;
}
pero quisiera que al ejecutar la sentencia "valor_ad = read_adc();" me trajera de una sola vez los 10 bit

gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 13:13:38
Hola.

Eso lo puedes colocar al inicio de tu programa de la siguiente manera:

Código: C#
  1. #include<18F458.h>
  2. #fuses XT,NOLVP
  3. #device adc=10//10: Para conversiones a 10 bits,  8: para conversiones a 8 bits

Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 14:19:43
#device adc=10
Hola MLO, cuando escribo esta sentencia y compilo me sale el siguiente error
CAN NOT CHANGE DEVICE TYPE THIS FAR INTO THE CODE
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 14:35:42
Hola.

Que microcontrolador estas usando?

Saludos
Título: Re: conversor a 10 bit
Publicado por: pablomanieri en 25 de Septiembre de 2008, 15:21:08
Debes colocar el "#device adc=10" justo después de la linea "#include<18F458.h>", quedaría asi


Código: CSS
  1. #include<18F458.h>
  2. #device adc=10//10: Para conversiones a 10 bits,  8: para conversiones a 8 bits
  3. #fuses .......
  4. .
  5. .
  6. .
  7. .
  8. .
  9. .


de esta manera no te dará error

Título: Re: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 16:09:26
//El codigo está así
#include <16c73a.h>
#device ADC=10
#include <Conversor A-D.h>
#fuses   nowdt, xt

//Sigue presentando el error, algo que observo es que en la carpeta PICC\DEVICE
//no aparece el 16f873a que es el que estoy utilizando, inmediatamente me presenta
//el 16c73a; sin embargo escribo el #include 16c73a y aparece el mismo error
//gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 16:43:29
Debes colocar el "#device adc=10" justo después de la linea "#include<18F458.h>"
de esta manera no te dará error

No influye la posicion de la directiva #device adc=10 antes o despues de los #fuses.

Respecto al PIC, estas seguro que si dispone de conversor a 10 bits? mira que el 16C73B tiene el ADC de 5 y 8 bits como maximo

Saludos
Título: Re: conversor a 10 bit
Publicado por: pablomanieri en 25 de Septiembre de 2008, 17:00:49
Disculpen, creo que no fui claro, es que si colocas #device adc=10 luego de #use o de la declaración de variables si da error. no luego de #Fuses. Si además ese pic no tiene conversor ad de 10 bits
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 17:12:09
ok

 :mrgreen: :mrgreen: :mrgreen:
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 25 de Septiembre de 2008, 17:50:13
MLO, Pablo, veo algo extaño en mi proyecto y es que cuando creo el proyecto wizard configuro el 16f873a; pero cuando PCW crea el proyecto incluye es el 16c73a y hasta donde tengo entendido este pic no tiene conversion a 10 bit, ?

gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 18:37:59
Hola.

Efectivamente, ese micro no tiene conversor a 10 bits. Me parece extrano que te asigne otro PIC. Como haces para crear el proyecto? directamente desde el IDE del CCS o con el MPLAB IDE?

Si estas en el MPLAB IDE, verifica que el micro sea el correspondiente en Configure/Select Device.

Saludos
Título: Re: conversor a 10 bit
Publicado por: Micro23 en 25 de Septiembre de 2008, 18:50:07
Citar
#device adc=10
Hola MLO, cuando escribo esta sentencia y compilo me sale el siguiente error
CAN NOT CHANGE DEVICE TYPE THIS FAR INTO THE CODE

Hola Diego, vos generaste el proyecto con el wizard?, si es asi, el ccs te genera un archivo con el nombre de tu proyecto.h en donde aparecen el seteo de los fuses y el device adc=10 u 8, lo que te puede estar causando conflicto.

Saludos
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 25 de Septiembre de 2008, 18:57:44
Efectivamente Micro23, el 16C73A no posee ADC a 10 bits, tiene maximo 8.

Para evitar esos inconvenientes ( o porque ya estoy acostumbrado realmente al entorno del MPLAB IDE ) yo configuro el proyecto desde el MPLAB IDE y compilo con CCS ( hay que instalar un plugin ).

Si quieres que incluya el 16F873A, debes colocar #include <16F873A.h>, ya que si tu seleccionas al 16F873A pero le das #include<16C73A.h>, pues logicamente el compilador asignara el archivo de cabecera correspondiente a ese microcontrolador.

Saludos
Título: Re: conversor a 10 bit
Publicado por: Micro23 en 25 de Septiembre de 2008, 19:41:26
Hola denuevo.
Diego que version del compilador estas usando? yo tengo la 4.057 y si en el wizard pongo 16f876a me incluye ese dispositivo y no el que decis.
Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 26 de Septiembre de 2008, 10:59:15
MLO, Micro23, hola de nuevo
la versión que tengo del CCS es la 3.149, veo que está muy desactualizada.
el proyecto lo creo utilizando wizard.
Pero MLO, veo que utilizas el MPLAB IDE, yo he trabajado durante mucho tiempo el
MPLAB IDE, lo manejo bien porque siempre he trabajado en assembler, solo ahora quiero
intruducirme en C, tengo instalada la versión 8.1 del Mplab, esta según tengo entendido trae
el plugin "Hi-tech". utilizo el PWC porque en unos tuitoriales que conseguí sugerían
este soft-ware; pero que más quisiera yo que trabajar en MPLAB IDE con todas sus
propiedades de depuración y demás.
Por lo que te entiendo acá, puedo utilizar el Mplab IDE para crear y editar el
codigo, crear el proyecto, y debo compilar con PCW, y luego depurar en Mplab ?
me puedes aclarar un poco ?

gracias

Título: Re: conversor a 10 bit
Publicado por: Diego E. en 26 de Septiembre de 2008, 11:31:46
MLO, micro23, como les dije anteriormente mi propósito es introducirme en C debido
a las ventajas que ofrece este lenguaje.
mi metodología de aprendizaje es resolver con C las aplicaciones básicas del PIC
llevo una semana trabajanco con C y creo que ya he avanzado algo.
les comparto el siguiente codigo de un conversor AD con paramteros programables
de setpoint y un visualizador de 4 digitos. lo hesimulado eh proteus y funciona perfecto.

hasta pronto.

#include <16c73A.h>
#device adc=10
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT,NOWDT

#byte   porta=5      //Definicion de variables del pic
#byte   portb=6
#byte   portc=7
#byte   t1con=0x10
#byte   adcon0=0x1f
#byte   adcon1=0x9f
#byte   adresl=0x9e
#byte   adresh=0x1e

#define   q1   porta,1   //Definicion de bits
#define   q2   porta,2
#define   q3   porta,3
#define   q4   porta,4
#define   salida   porta,5
#define ad_ini   adcon0,2

int   unid,dece,cent,u_mil;   //Definicion de variables
int respaldo;            //Variable de 8 bit
int16 set_point;         //Variable de 16 bit
int16 valor_ad;
int16 respaldo16;
int32 respaldo32;         //Variable de 32 bit
short int   ban_osc;      //Variables de 1 bit
Short int   ban_hab;
Short int   ban_05seg;
short int   ban_tec1;
short int   ban_tec2;
short int   ban_tec3;
short int   ban_tec4;
short int   ban_tec5;
short int   ban_tec6;
short int   ban_tec7;
short int   ban_tec8;
short int   ban_tec9;
short int   ban_tec10;
short int   ban_tec11;
short int   ban_tec12;
short int   ban_tec13;
short int   ban_tec14;
short int   ban_tec15;
short int   ban_tec16;

byte const segmentos[11]={0b00111111,   //Definicion de variables constantes
                     0b00000110,   //o tablas por medio de una matriz
                     0b01011011,
                     0b01001111,
                     0b01100110,
                     0b01101101,
                     0b01111101,
                     0b00100111,
                     0b01111111,
                     0b01101111,
                     0b01000000};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#int_timer1               //Vector de interrupcion por desbordamiento del
void interrupcion_tmr1()   //timer 1
{
   set_timer1(3036);      //Se carga el timer 1 con valor
///////////////////////////////////////

   ban_05seg=1;
}
///////////////////////////////////////////////////////////////////////////////
void bcd_bin()   //Rutina de conversión bcd a binario de 16 bit
{
respaldo16=0;   //Cuando una operación genere carry se recomienda anteponer
            //la sentencia (int16)
respaldo16=(int16)u_mil*1000+(int16)cent*100+(int16)dece*10+unid;
set_point=respaldo16;

}
///////////////////////////////////////////////////////////////////////////////
void bin_bcd()   //Rutina de conversión binario 16 bit a decima 4 digitos
{
u_mil=0;
cent=0;
dece=0;
unid=0;

if(ban_hab==1)
   {
   respaldo16=set_point;
   }
else
   {
   respaldo16=valor_ad;
   }

u_mil=respaldo16/1000;
respaldo16=respaldo16%1000;      //El símbolo % se utiliza para que deje en la
                        //variable el residuo de la operacion
cent=respaldo16/100;         //respaldo16/1000
respaldo16=respaldo16%100;

dece=respaldo16/10;
respaldo16=respaldo16%10;

unid=respaldo16;
}
///////////////////////////////////////////////////////////////////////////////
void rotar()   //Rutina que desplaza los dígitos en el display
{            //cuando se presiona una tecla
u_mil=cent;
cent=dece;
dece=unid;
unid=respaldo;

bcd_bin();
}
///////////////////////////////////////////////////////////////////////////////
void display()   //Rutina general del display
{
bin_bcd();

portc=(segmentos[unid]);
if(ban_osc!=1)
   {bit_set(q4);}
delay_ms(1);
bit_clear(q4);

portc=(segmentos[dece]);
if(ban_osc!=1)
   {bit_set(q3);}
delay_ms(1);
bit_clear(q3);

portc=(segmentos[cent]);
if(ban_osc!=1)
   {bit_set(q2);}
delay_ms(1);
bit_clear(q2);

portc=(segmentos[u_mil]);
if(ban_osc!=1)
   {bit_set(q1);}
delay_ms(1);
bit_clear(q1);
}
///////////////////////////////////////////////////////////////////////////////
void teclado()      //Rutina general de teclado
{
portb=(0x0f);
   bit_clear(portb,0);
   delay_us(100);
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,7)==0)&&(ban_tec1==0))
         {
         ban_tec1=1;
         respaldo = 1;
         rotar();
         }
      if(bit_test(portb,7)==1)
         {
         ban_tec1=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,6)==0)&&(ban_tec2==0))
         {
         ban_tec2=1;
         respaldo = 2;
         rotar();
         }
      if(bit_test(portb,6)==1)
         {
         ban_tec2=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,5)==0)&&(ban_tec3==0))
         {
         ban_tec3=1;
         respaldo = 3;
         rotar();
         }
      if(bit_test(portb,5)==1)
         {
         ban_tec3=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,4)==0)&&(ban_tec4==0))
         {
         ban_tec4=1;
         respaldo = 4;
         rotar();
         }
      if(bit_test(portb,4)==1)
         {
         ban_tec4=0;
         }
      }

   bit_set(portb,0);
   bit_clear(portb,1);
   delay_us(100);
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,7)==0)&&(ban_tec5==0))
         {
         ban_tec5=1;
         respaldo = 5;
         rotar();
         }
      if(bit_test(portb,7)==1)
         {
         ban_tec5=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,6)==0)&&(ban_tec6==0))
         {
         ban_tec6=1;
         respaldo = 6;
         rotar();
         }
      if(bit_test(portb,6)==1)
         {
         ban_tec6=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,5)==0)&&(ban_tec7==0))
         {
         ban_tec7=1;
         respaldo = 7;
         rotar();
         }
      if(bit_test(portb,5)==1)
         {
         ban_tec7=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,4)==0)&&(ban_tec8==0))
         {
         ban_tec8=1;
         respaldo = 8;
         rotar();
         }
      if(bit_test(portb,4)==1)
         {
         ban_tec8=0;
         }
      }

   bit_set(portb,1);
   bit_clear(portb,2);
   delay_us(100);
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,7)==0)&&(ban_tec9==0))
         {
         ban_tec9=1;
         respaldo = 9;
         rotar();
         }
      if(bit_test(portb,7)==1)
         {
         ban_tec9=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,6)==0)&&(ban_tec10==0))
         {
         ban_tec10=1;
         respaldo = 0;
         rotar();
         }
      if(bit_test(portb,6)==1)
         {
         ban_tec10=0;
         }
      }
//////////////////
   if(ban_hab==1)
      {
      if((bit_test(portb,5)==0)&&(ban_tec11==0))
         {
         set_point=0;
         }
      if(bit_test(portb,5)==1)
         {
         ban_tec11=0;
         }
      }
//////////////////
      if((bit_test(portb,4)==0)&&(ban_tec12==0))
         {
         ban_tec12=1;

         if(ban_hab==1)
            {
            ban_hab=0;
            ban_osc=0;
            }
         else
            {
            ban_hab=1;
            ban_osc=1;
            }
         }
      if(bit_test(portb,4)==1)
         {
         ban_tec12=0;
         }
   bit_set(portb,2);
}
///////////////////////////////////////////////////////////////////////////////
void osc_display()         //Rutina que alterna la bandera que hace oscilar
{                     //el display
   if(ban_hab==1)
      {
      if(ban_osc==1)
         {
         ban_osc=0;
         }
      else
         {
         ban_osc=1;
         }
      }
}
///////////////////////////////////////////////////////////////////////////////
void conversion_ad()
{
//set_adc_channel(0);
//delay_us(10);
//valor_ad = read_adc();

bit_set(ad_ini);   //Se da inicio a la conversion
while(ad_ini==1);   //Se espera a que finalice la conversion

valor_ad=((int16)adresh*256)+adresl;   //Se suma los productos de los registos
                              //adresh y adresl en una sola variable
respaldo32=((int32)valor_ad*100)/1023;   //Se entrega el valor en porcentaje
valor_ad=respaldo32;
///////////////////////////////////////
if(valor_ad>=set_point)   //Si valor_ad es mayor que set ponit activa la salida
   {bit_set(salida);}
else
   {bit_clear(salida);}//De lo contrario la apaga

}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

#zero_ram   //Borrado de la memoria ram

main()      //Rutina principal
{
set_tris_a(0b000001);      //Configuracion de entradas y salidas del puerto A
set_tris_b(0b11110000);      //Configuracion de entradas y salidas del puerto B
set_tris_c(0b00000000);      //Configuracion de entradas y salidas del puerto C
port_b_pullups(true);      //Habilitación de las resistencias pull-ups
t1con=(0b00110101);         //Configuracion del tmr1
adcon0=0x01;
adcon1=0x8e;

enable_interrupts(global);   //Habilitación de todas las interrupciones
enable_interrupts(int_timer1); //Habilitación de la interrupción del Tmr1

porta=0;   //Porta inicia en 0
portb=0;   //Portb inicia en 0
portc=0;   //Portc inicia en 0

set_point=25;

while(true)      //Rutina general
   {
   teclado();
   display();
   conversion_ad();

   if(ban_05seg==1)
      {
      ban_05seg=0;
      osc_display();
      }
   }
}
///////////////////////////////////////////////////////////////////////////////


Título: Re: conversor a 10 bit
Publicado por: MLO__ en 26 de Septiembre de 2008, 12:15:19
Hola.

Gracias por compartir tu codigo, de seguro le ha de ser util a alguien.

Diego, uno puede usar el MPLAB como entorno IDE, tan solo es necesario instalar el plugin (la version 8.1 ya debe tenerlo). Para crear un proyecto seleccionando el compilador CCS debes hacer lo siguiente:

1. Ve a Project/Project Wizard
2. Selecciona el micro a utilizar
3. Selecciona el compilador (En Active toolsuite busca el CCS)
4. Selecciona el nombre del proyecto y la ruta del directorio donde lo vas a guardar
5. Adiciona el codigo del programa principal (si lo tienes). Si no lo tienes, dale siguiente y cliqueas en New File, guardas como .c y adicionas el archivo creado en Source Files.

Y listo, puedes usar el entorno del MPLAB IDE compilando con el CCS.

Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 26 de Septiembre de 2008, 16:57:48
MLO, ya hice lo que me indicaste respecto al mplab: creo proyecto, selcciono lenguaje, al compilar me abre el pcw, luego compilo en PCW y este me abre el compilador CCS; pero aparece este mensaje también.
"Exceptio EInOutError in module PCM,DLL at 000C1BF4"

gracias
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 26 de Septiembre de 2008, 18:39:12
MLO, ya hice lo que me indicaste respecto al mplab: creo proyecto, selcciono lenguaje, al compilar me abre el pcw, luego compilo en PCW y este me abre el compilador CCS; pero aparece este mensaje también.
"Exceptio EInOutError in module PCM,DLL at 000C1BF4"

gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 26 de Septiembre de 2008, 18:45:02
Hola.

Instala el plugin para el CCS, es mejor estar seguros de que si lo tienes, una vez instalado revisa que este activa la ruta del compilador.
(http://img221.imageshack.us/img221/5650/compiladorei6.png)

saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 27 de Septiembre de 2008, 09:28:43
Hola MLO, al abrir la ventana que me indicas en la imagen me aparece exactamente lo mismo
que le en la tuya, cuando presiona F10 para compilar automáticamente abre el PCW, luego
intento compilar en PCW con F9, trata de iniciar pero aparece este error
"Exceptio EInOutError in module PCM,DLL at 000C1BF4"

gracias.
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 27 de Septiembre de 2008, 11:42:01
Hola.

Que sistema operativo tienes? WinXP o WinVista?

Título: Re: conversor a 10 bit
Publicado por: Diego E. en 27 de Septiembre de 2008, 14:51:30
MLO, tengo instalado windows XP

gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 27 de Septiembre de 2008, 15:53:42
... cuando presiona F10 para compilar automáticamente abre el PCW, luego
intento compilar en PCW con F9...

No entiendo porque tienes que darle primero F10 y luego F9  :z)

Alguna vez has llegado a la siguiente figura?
(http://img375.imageshack.us/img375/6533/compokdg7.png)

A que te refieres que abre el PCW???

saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 29 de Septiembre de 2008, 09:28:31
Hola de nuevo MLO, yo abro un archivo de c en Mplab creo proyecto y todo lo demás, luego intento compilarlo ahí mismo (en Mplab, esto se logra presioando la tecla F10), en ese momento se abre automaticamente PCW, y carga el archivo de c que tengo abierto en Mplab, luego intento compilar desde el PCW, (F9 es la tecla de acceso rápido); pero veo que tienes la versión 4 de PCW y yo tengo la 3.14, eso no influirá ?
Gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 29 de Septiembre de 2008, 12:16:27
Hola.

No creo que la version tenga algo que ver. Aun no entiendo a que te refieres que te "abre" el PCW  :lol: ... te refieres a que te abre el IDE del CCS?? porque normalmente yo le doy click al boton de Buid All para comilar y ya, me muestra la ventanita que postee en mi mensaje anterior.

Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 29 de Septiembre de 2008, 13:10:28
MLO, si efectivamente abre el PCW cuando le doy la opcion build all; pero MLO, no te quiero quitar mas tiempo con esto ya me has ayudado demasiado. una ultima pregunta cuando en una operacion de resta cuando me da un numero negativo como lo puedo identificar, pues en assembler yo preguntaba por el carry y si este era cero la cifra es negativa y le hacia complemento a 2
pero en C tengo dudas

gracias.
Título: Re: conversor a 10 bit
Publicado por: Micro23 en 29 de Septiembre de 2008, 14:45:17
Hola Diego en C la cosa es mas sencilla declaras tus variables anteponiendole signed, por ejemplo:

int puede tomar valores entre 0 y 255
signed int puede tomar valores entre -128 y 127

Entonces haces las operaciones que quieras y si queres saber si tu variable es negativo preguntas si es menor que cero y listo.

Fijate en la ayuda del CCS en Data definition ahi podes encontrar los tipos datos y los valores que pueden tomar.

Saludos
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 29 de Septiembre de 2008, 15:04:28
Hola.

Estas linkeando el ejecutable que no corresponde, es por eso que te abre el programa.

El compilador identifica automaticamente si el numero es negativo, siempre y cuando hallas hecho la declaracion de la variable como lo menciona Micro23.

Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 29 de Septiembre de 2008, 16:31:26
respaldo2 = 0;
respaldo2=respaldo2 - 10;

if(respaldo2<0)   //Si el resultado es negativo
   {respaldo2 =((~respaldo2)+1);}   //Complemento a 2

//MLO, micro23, De esto forma comprobé el resultado negativo, esta bien ?

gracias
Título: Re: conversor a 10 bit
Publicado por: MLO__ en 29 de Septiembre de 2008, 17:10:50
Hola.

Con el if(respaldo2<0) ya esas comprobando si es negativo la variable respaldo2. Si tu variable respaldo2 esta definida como un signed int no hay necesidad de hacer el complemento a 2, puedes operarla como quieras (ojo con el intervalo que alcanzan las variables, no es lo mismo signed int, que signed int16 o signed int32).

Saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 29 de Septiembre de 2008, 18:23:08
MLO, tenias razó elstaba configurando el compilador PCW y debería ser Ccsc,
veo que aparecen unos errores por las directivas byte, #use, etc , se debe configurar lguna otra cosa ?

gracias
Título: Re: conversor a 10 bit
Publicado por: ncoliv en 03 de Octubre de 2008, 22:27:25
Hola Diego E. tengo este programita hecho para un f877a donde se utiliza un conver. A/d de 10 bits en el se muestra la conversion y el correspondiente voltage.

#include <16F877a.h>
#device adc=10
#include <STDLIB.H>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#byte portb=6
#include <lcd.c>

void main(void)
{
float const resoluc=5.0/1024.0;
int16 valor=0;
float kk=0;


set_tris_b(0x00);
set_tris_a(0xFF);
portb=0x00;

lcd_init();
lcd_gotoxy(1,1);

setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(20);

while(true)
{

valor=read_adc();
kk=valor*resoluc;
lcd_gotoxy(1, 1);
printf(lcd_putc,"fconv: %lu  ",valor);
lcd_gotoxy(1, 2);
printf(lcd_putc,"medida: %2.3f  ",kk);  // muestra el voltage con tres decimales
delay_ms(500);
}
}

es muy basico y tbien esta asesorado por los muchachos de este foro.

espero te sirva
saludos
Título: Re: conversor a 10 bit
Publicado por: Diego E. en 04 de Octubre de 2008, 11:20:17
ncoliv, gracias por tu aporte, cada que veo un programa hecho por otra persona aprendo detalles importantes.

gracias