Autor Tema: Poner únicamente una entrada del CAD como analogica SOLUCIONADO  (Leído 1879 veces)

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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Poner únicamente una entrada del CAD como analogica SOLUCIONADO
« en: 03 de Agosto de 2009, 06:33:34 »
Hola compañeros:

Resulta que estoy usando CCS y para poner una única entrada del CAD como analógica y el resto como digital no me funciona, en mi caso estoy usando un PIC18F13k50 pero esto tendría que ser extensible a todos los micros.

El código que estoy usando es el siguiente

Código: [Seleccionar]
#include <18F13K50.h>
#device adc=10
#fuses HS, NOWDT, NOPROTECT, NOLVP, USBDIV1, CPUDIV1
#use delay(clock=12000000)
#use rs232(baud=115200, xmit=PIN_B7, rcv=PIN_B5, stream=PC)
#byte ANSEL = 0xF7E  //Dirección de memoria del byte ANSEL
#byte ANSELH = 0xF7F //Dirección de memoria del byte ANSELH

float const resoluc = 5.0/1024.0; // Conversión de 10 bits
long value;
float Voltios;

void main(void) {

// 1 = Para ponerlo como analogico
// 0 = Para ponerlo como digital
                            bit ->   7     6     5     4     3     2     1     0
       //Registro ANSEL -> AN7 AN6 AN5 AN4 AN3   --    --    --
   ANSEL = 0x80; //10000000 Ponemos únicamente el AN7 a analógico, ver datasheet pic 18F1Xk50
   ANSELH = 0;
  
   delay_ms(100);  

   setup_adc( ADC_CLOCK_INTERNAL );
  //setup_adc_ports(0x7 | VSS_VDD); //No se pone ya que lo hemos configurado con ANSEL y ANSELH
  
   enable_interrupts(global); // Habilita interrupciones
      
   while (TRUE)
   {
            set_adc_channel(7);
            delay_ms(1);//Esperamos a que se estabilice el CAD
            value = read_adc();//voltios=((fondo_de_escala*read_adc())/2^n), donde n es el número de bit del CAD
            Voltios = value * resoluc;
            if (Voltios<1)
            {
               printf("V<1\r\n");
            }
            else if ((Voltios>1)&&(Voltios<2))
            {
               printf("1<V<2\r\n");
            }
            else if (Voltios>2)
            {
               printf("V>2\r\n");
            }
    }//Fin bucle infinito
}//Fin void

Si alguien sabe como se hace, aunque sea añadiendo unas lineas de ensamblador sería de agradecer.

Como siempre muchas gracias compañeros.
« Última modificación: 17 de Agosto de 2009, 06:47:54 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Poner únicamente una entrada del CAD como analogica SOLUCIONADO
« Respuesta #1 en: 03 de Agosto de 2009, 08:12:57 »
Hola compañeros:

Pensaba que el programa no funcionaba ya que en la simulación con proteus no funcionaba, pero lo he probado en un micro real y funciona perfectamente.

Muchas gracias por la ayuda.


Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Poner únicamente una entrada del CAD como analogica SOLUCIONADO
« Respuesta #3 en: 03 de Agosto de 2009, 14:54:47 »
La verdad es que por el momento he tenido pocos problemas con el proteus. ¿ Sabes que problemas comunes tiene este simulador ?

Un saludete.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Poner únicamente una entrada del CAD como analogica SOLUCIONADO
« Respuesta #4 en: 03 de Agosto de 2009, 16:17:13 »
A lo largo de mi historia en el foro he ido viendo errores de unos y otros usuarios con Proteus, además de los que yo he podido sufrir.
No tengo ningún compendio de ellos, pero recuerdo que suele ir mal con tensiones analógicas.