Autor Tema: ayuda con ADC  (Leído 3183 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
ayuda con ADC
« en: 03 de Octubre de 2007, 14:51:06 »
     
     Buenas a todos

     Llevo unos dias comiendome el coco y no se como hacer esto.A ver si me explico, igual es una tonteria pero por mas vueltas que le doy no hay manera.
     En un convertidor A/D en el que voy a tener 1024 valores necesito discriminar gran parte de ellos y que solo unos pocos sean 1.Por ejemplo que sean un 1 logico entre 300 y 350 y que el resto de valores no cuenten como entrada.
     se agradeceria cualquier idea, aunque solo fuese para desatascarme y poder empezar.


   saludos y gracias por anticipado.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ayuda con ADC
« Respuesta #1 en: 03 de Octubre de 2007, 15:10:44 »
¿En qué idioma de programación?

En CCS C:

Código: C++
  1. temperatura=read_adc();
  2.  
  3.    switch(temperatura){
  4.       case 300..350:
  5.          valor=1;
  6.          break;
  7.       default:
  8.          valor=0;
  9.          break;
  10.    }
   
Así puedes insertar mas valores intermedios.
« Última modificación: 03 de Octubre de 2007, 15:15:12 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ayuda con ADC
« Respuesta #2 en: 04 de Octubre de 2007, 10:26:10 »
Diego, solo por curiosidad, ¿CCS permite usar rangos en los cases o es una "delphización" del código?  :mrgreen:

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: ayuda con ADC
« Respuesta #3 en: 04 de Octubre de 2007, 10:59:57 »
que yo sepa no  :? pero seria bueno que alguien no los aclare.

edito:
segun el manual de NOviembre 2006 no se puede, ya que nunca hace algo asi, siempre por un valor
« Última modificación: 04 de Octubre de 2007, 11:06:33 por Cryn »
.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: ayuda con ADC
« Respuesta #4 en: 04 de Octubre de 2007, 11:17:06 »
 :shock: pos no no lo creo que se pueda.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ayuda con ADC
« Respuesta #5 en: 04 de Octubre de 2007, 13:56:26 »

     Bueno yo  programo en asm pero estoy aprendiendo C yes posible que migre el programa al C asi que gracias Diego.
     Ademas supongo que en asm seria mas complicado.

    Saludos.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ayuda con ADC
« Respuesta #6 en: 04 de Octubre de 2007, 14:22:45 »
Diego, solo por curiosidad, ¿CCS permite usar rangos en los cases o es una "delphización" del código?  :mrgreen:

No, no se puede.  :oops:

Estoy tan acostumbrado a usar los rangos que lo he puesto sin pensarlo. Al comentarlo tú he ido a probarlo en CCS y ... me salta un error ; expected.  :oops:

Como bien dices, he caído en propia trampa delphinera.


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ayuda con ADC
« Respuesta #7 en: 04 de Octubre de 2007, 15:35:30 »
Como bien dices, he caído en propia trampa delphinera.

Jeje, me pasa seguido y justamente con los 'case' :) jiji, pero el C por suerte da error, jejeje.  :mrgreen: :mrgreen:

También suelo prestar atención al "=" porque en Delphi/Pascal y C son justamente bastante diferentes y ahí no da error!

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ayuda con ADC
« Respuesta #8 en: 04 de Octubre de 2007, 16:07:34 »
Pues fíjate que programo en el trabajo con C++ Builder y PHP sobre todo y en casa con CCS C y Delphi ... y estoy constantemente cometiendo errores en un idioma al usar funciones o sintaxis de otro.  :z) :z) :z)
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ayuda con ADC
« Respuesta #9 en: 05 de Octubre de 2007, 08:59:04 »
     

     Bueno entonces la unica solucion sera hacerlo valor por valor es decir 300,301,302,.....350.
Eso me va ocupar un monton de flash y no ando sobrado de ella.Creo que no me va a valer el 16f877 y por lo que mire es el que mas flash tiene de la gama 16.

    bueno saludos y gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ayuda con ADC
« Respuesta #10 en: 05 de Octubre de 2007, 10:51:47 »
     

     Bueno entonces la unica solucion sera hacerlo valor por valor es decir 300,301,302,.....350.
Eso me va ocupar un monton de flash y no ando sobrado de ella.Creo que no me va a valer el 16f877 y por lo que mire es el que mas flash tiene de la gama 16.

    bueno saludos y gracias.

tapi8 podrías usar una variable que contemple el rango y listo.

Por ejemplo, yendo a un ejemplo burdo


r = 0;
if ((a >= 300) && (a <= 350)) r = 1;
if ((a >= 351) && (a <= 400)) r = 2;




Y luego haces un switch de r

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ayuda con ADC
« Respuesta #11 en: 05 de Octubre de 2007, 13:54:24 »


    Pues bien, te contare como ha ido cuando haga la migracion a C porque creo que lo tendre que pasar todo a C para usar algun PIC de la gama 18,24 o DSP, y como lo tengo en asm de 35 instrucciones. No esposible usar ese programa en la gama 18? verdad.


    saludos y gracias

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: ayuda con ADC
« Respuesta #12 en: 05 de Octubre de 2007, 14:18:33 »
mira aca tengo una rutina en ensamblador para el 16f877a, que convierte la entrada analógica del canal 0 RA0 a digital y lo muestra en 10 bits por el puerto B y C, dale un vistazo, solom debes configurar el adc y esperar con un retardo de 20us para cargar el muestreo creo y despues tenes el resultado en adresl y adresh, esta tb explicado en la hoja de datos:

Código: [Seleccionar]
INICIO
BANCO_0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF TMR0
MOVLW B'11010000'
MOVWF OPTION_REG

BANCO_1
MOVLW D'0'
MOVWF TRISB
MOVLW D'252'
MOVWF TRISC
MOVLW D'255'
MOVWF TRISA

;SE INICIALIZA MODULO DE CONVERSION A/D
BANCO_0
MOVLW D'193'
MOVWF ADCON0

BANCO_1
MOVLW D'142'
MOVWF ADCON1

;LECTURA CANAL ANALÓGICO
MAIN
BANCO_0
CALL DELAY_20us     ; es una rutina de retardo qeu esta en un INC que estaba incluido en este programa
BSF ADCON0,GO

WAIT BTFSC ADCON0,GO
GOTO WAIT

MOVF ADRESH,W
MOVWF PORTC

BANCO_1
MOVF ADRESL,W
BANCO_0
MOVWF PORTB

GOTO MAIN
END

y la misma rutina pero en CCS:

Código: [Seleccionar]
//----------------------------------------------
// P5.c
// El resultado de la conversión A/D del canal0
// se muestra en el puerto b y puerto c
//----------------------------------------------

#include <16F877a.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
#use delay (clock=4000000)

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#byte port_a=0x05
#byte port_b=0x06
#byte port_c=0x07

#byte ADRESH=0x1e
#byte ADRESL=0x9e

/*---------------------------------------------------------------------*/
void main()
{
   int16 adcValue;
   setup_adc_ports(RA0_ANALOG); //RA0 entrada analógica
   setup_adc(ADC_CLOCK_INTERNAL); // reloj interno

   set_tris_a(0xFF);
   set_tris_b(0x00);
   set_tris_c(0xBC);

   port_b=0x00;
   port_c=0x00;

   do
   {
         set_adc_channel(0);      // selecciona el canal 0
         delay_us(20);            // Retardo para carga del cap. de muestreo
         adcValue=read_adc();     // Lee el resultado de la conversion
         port_c=ADRESH;           // Parte alta de la conversion al PORTC
         port_b=ADRESL;           // Parte baja de la conversion al PORTB
         delay_ms(1000);
   } while (TRUE);
}

espero te sirva, y si tienes alguna duda acerca del codigo aca te respondemos
ahh y para lo de los rangos en ASM te sugiero que te des una vueltita por el foro del lenguaje ensamblador qeu seguro encontras una respuesta para ello, y bueno si es solo un rango talvez solo sea necesario 8 bits y no los 10 del conversor, date una miradita por ahi en el subforo

un saludo
« Última modificación: 05 de Octubre de 2007, 14:21:06 por Cryn »
.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ayuda con ADC
« Respuesta #13 en: 08 de Octubre de 2007, 05:44:08 »

    Gracias por la aportacion Cryn, no es exactamente lo que quiero hacer pero me servira para para adaptarlo a lo que quiero hacer.

   saludos y gracias