Autor Tema: ADQUIRIR VARIOS CANALES DEL A/D 16F877  (Leído 2806 veces)

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

Desconectado PiCStart

  • PIC10
  • *
  • Mensajes: 6
ADQUIRIR VARIOS CANALES DEL A/D 16F877
« en: 28 de Julio de 2005, 08:07:00 »
Hola a tod@s! Soy novatilla y mi problema es q necesito adquirir por 5canales 5 señales analogicas. El codigo q tengo funciona para el primer canal por el q adquiera (tanto 0 como 1, etc) pero al cambiar de canal..... en la salida no da lo q esta en el canal da otro valor. Paso el codigo...

#include "16F877.h"
#device ADC=8
#use delay (clock=4000000) //Modo del oscilador
#fuses XT,PUT,NOWDT //Modo del oscilador



void inicia() {
set_tris_a(0x2F);
set_tris_B(0x00);  output_B(0x00);
set_tris_D(0x00);   output_D(0x00);
setup_adc_ports(AN0_AN1_AN2_AN3_AN4 );  //  A0 A1 A2 A3 A5
setup_adc(adc_clock_div_2);}
void main(){
 int cuenta=0; int value=0;
 inicia();
 while(TRUE){
                set_adc_channel(0);value=read_adc();  output_B(value);
                delay_ms(20000);

                set_adc_channel(1); cuenta=read_adc();  output_D(cuenta);
                delay_ms(20000);
}}

 
Aqui pongo el ejemplo solo de 2 canales porq si no me va asi... con 5 no me quiero imaginaaaaaaaarrr
MUUUUUUUUUUUUUUCHAS GRACIAS POR VUESTRO TIEMPO!!Rebotado

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: ADQUIRIR VARIOS CANALES DEL A/D 16F877
« Respuesta #1 en: 28 de Julio de 2005, 09:56:00 »
Así a bote pronto, se que cuando se selecciona un canal del conversor A/D, se debe hacer un tiempo de espera para que se cargue el condensador que hay a la entrada de este en el PIC, creo que con 50uS está bien. Prueba a aver que tal y nos comentas. Suerte!

P.D.: yo tb pondria un divisor del reloj del adc al menos de 8 ó 16.
Si juegas contra el mejor, pierdes como los demás.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ADQUIRIR VARIOS CANALES DEL A/D 16F877
« Respuesta #2 en: 28 de Julio de 2005, 10:29:00 »
¿No estaría mejor así?:

Codigo:

#include "16F877.h"
#device ADC=8
#use delay (clock=4000000) //Modo del oscilador
#fuses XT,PUT,NOWDT //Modo del oscilador

void main()
{
      int cuenta=0; int value=0;

      set_tris_a(0x2F);
      set_tris_B(0x00); output_B(0x00);
      set_tris_D(0x00); output_D(0x00);

      setup_adc_ports(AN0_AN1_AN2_AN3_AN4 ); // A0 A1 A2 A3 A5
      //setup_adc(adc_clock_div_2);     .... en todo caso div_32
       setup_adc(adc_clock_internal);

      while(1)
      {
             set_adc_channel(0);value=read_adc(); output_B(value);
             delay_ms(20000);

             set_adc_channel(1); cuenta=read_adc(); output_D(cuenta);
             delay_ms(20000);
      }
}



Prueba y cuentas.

Un saludo

Desconectado PiCStart

  • PIC10
  • *
  • Mensajes: 6
RE: ADQUIRIR VARIOS CANALES DEL A/D 16F877
« Respuesta #3 en: 29 de Julio de 2005, 02:24:00 »
 SonrisaSonrisaSonrisaPues va a ser q era el "delay_us(50);" Necesita un tiempo de espera entre la instruccion de seleccion de canal (set_adc_channel(0)Giño y la lectura de dicho canal (read_adc)y asi para todos los canales!!!!GiñoSonrisaGiño

Lo q he cambiado tb pero no aprecio la diferencia en los resultados es el divisor del reloj! He puesto la opcion "adc_clock_internal" y funciona ok tb. Segun la table 11.1 de la pag 116 del datasheet  del PIC 16F877  el divisor deberia ser de 8 porq la frec a la q trabajo es de 4MHz, no?? No termino de entender esto de las frecuencias...... HeladoHelado






Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ADQUIRIR VARIOS CANALES DEL A/D 16F877
« Respuesta #4 en: 29 de Julio de 2005, 03:13:00 »
¿Estais seguros que es por el delay? yo he montado unos cuantos y van sin el delay.



Desconectado PiCStart

  • PIC10
  • *
  • Mensajes: 6
RE: ADQUIRIR VARIOS CANALES DEL A/D 16F877
« Respuesta #5 en: 01 de Agosto de 2005, 07:30:00 »
    Yo primero añadi el delay y ya me funciono bien. Despues probe a cambiar el adc_clock_2 por adc_clock internal y tb me funcionaba por lo q creo q aunq influya lo determinante sera añadir el delay. Ademas este delay si solo adquiere por un canal no es necesario pero en cuanto tienes mas de un canal.... ya lo necesitas (eso me hace concluir la experiencia!)


THANKS!!RebotadoRebotadoRebotadoRebotadoRebotadoRebotado