Autor Tema: Ayuda con codigo A/D para un PIC16F877  (Leído 1232 veces)

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

Desconectado jcjorque

  • PIC10
  • *
  • Mensajes: 3
Ayuda con codigo A/D para un PIC16F877
« en: 20 de Mayo de 2005, 23:03:00 »
Hola a todos en el foro:

Necesito que me ayuden o digan como hacer un codigo para convertir una señal analoga en una digital en un PIC16F877, lo hago en este PIC ya que son 8 señales analogas distintas provenientes de unos sensores.
No se ni como se empieza un codigo asi que cualquier ayuda sera bien venida.

Desconectado Protheus5

  • PIC10
  • *
  • Mensajes: 37
RE: Ayuda con codigo A/D para un PIC16F877
« Respuesta #1 en: 21 de Mayo de 2005, 04:14:00 »
Hola, lo primero seria saber que lenguaje de programacion usas.

Bueno, a continuacion te explico un simple ejemplito que hice usando lenguaje c en un pic 18f452, ya que el tuyo aun no lo he progrmado. aun asi, hay muchas cosas comunes en ambos.

Nota: si programas con CCS en el manual vienen ejemplitos para hacer estas tareas.


#include <18f452.h>

#device adc=10 //seleccionas cuantos bits de resolucion del convers quieres
#use delay(clock=8000000)
#fuses NOWDT,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, NOPUT,  NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8)

main()
{
float valor1,valor2,volt1,volt2;

setup_adc_ports(ALL_ANALOG); //seleccionas los canales que vas a usar.
                                                    //en la cabecera de tu pic veras las opciones                                                
                                                    // posibles de configuracion

setup_adc(ADC_CLOCK_INTERNAL); //selecc el modo del adc

delay_ms(5);
printf("-------Listo para adquirir-----
"Giño;

while (TRUE)
{

set_adc_channel(0); //seleccionas el canal o del ADC (yo tengo 8 canales en mi pic)
delay_us(20);            //esperamos para el Tad (minimo son 13 us)
              //asi el C interno puede cargarse bien

valor1=read_adc();  // leo el valor
volt1=valor1*(5.0/1024.0); //si por ejemplo quiero pasarlo a voltios, hago esta
                                            //operacion

delay_us(30);

set_adc_channel(1); //selecciono otro canal, y repito lo anterior
delay_us(20);
valor2=read_adc();
volt2=valor2*(5.0/1024.0);
delay_us(30);

printf("(1)%4.0f   ->%1.2f   :::",valor1,volt1);
printf("(2)%4.0f   ->%1.2f
",valor2,volt2);

}
}



Bueno espero que te haya servido de ayuda para comenzar a trabajar.
Un saludo



 

anything