31 may 2010

ADIN (LEER ADC)

ADIN

Sintaxis

Variable = ADIN número de canal

Información general

Lee el valor del convertidor analogico a digital del microcontrolador.

Operadores

Variable - una variable definida por el usuario de tipo bit, byte, byte_array, palabra, word_array, dword, o flotar.

número del canal - una constante, variable o expresión. (0,1,2,3,4,5,.....)


Ejemplo

'Lee el valor desde el canal 0 del ADC y el lugar en la variable VAR1.

DECLARE ADIN_RES 10 'resultado de 10-bit requiere

RC DECLARE ADIN_TAD FRC 'OSC elegido

DECLARE ADIN_STIME 50 'Permitir 50us muestra de tiempo

DIM VAR1 como WORD

TRISA =% 00000001 'Configurar An0 (PORTA.0) como una variable

ADCON1 =% 10000000 'entrada analógica Ubicado en PORTA.0

VAR1 = 0 ADIN 'coloca la conversión en la variable VAR1



Declaraciones


Hay tres directivas de declarar para el uso con ADIN. Estos son: -


DECLARE ADIN_RES 8, 10 o 12

Establece el número de bits en el resultado. Si no se utiliza esta declaracion, el valor por defecto es la resolución maxima del tipo utilizado PICmicro.


DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC, o FRC.

        Fuente de reloj Establecida para el ADC. Todos los PICmicros compatibles tienen cuatro opciones para la fuente de reloj utilizado por el ADC. 2_FOSC, 8_FOSC y 32_FOSC,son proporcionados por oscilador externo, mientras que la CRF es el oscilador interno de RC del PICmicro. En lugar de utilizar los nombres predefinidos de la fuente de reloj, los valores de 0 a 3 puede ser utilizado. Estos reflejan la configuración de bits 0-1 en ADCON0 registro.

         Se debe tener cuidado al emitir esta declaracion, un tipo equivocado de fuente de reloj puede resultar en baja resolución, o ninguna conversión. CRF es la configuración predeterminada si no se realiza esta declaracion.


DECLARE ADIN_STIME 0 a 65535 microsegundos (nosotros).

        Permite a los condensadores internos que se cargue ncompletamente antes que se tome una muestra. Esto puede ser un valor de 0 a 65535 microsegundos (us). Un valor demasiado pequeño puede resultar en una reducción de la resolución. Mientras que un valor demasiado elevado se traducirá en una velocidad de conversión pobre sin ningún tipo de resolución extra alcanzado.

        Un valor típico para ADIN_STIME es de 50 a 100. Esto permite que un tiempo de carga adecuada, sin perder demasiada velocidad de conversión. Pero la xperimentación producirá el valor correcto para su requerimiento particular. El valor por defecto si no se utiliza esta declaracion es de 50.

Notas

        Antes de que el comando ADIN puede ser utilizado, el registro TRIS deben ser manipulados apropiadamente para que el pin deseado sea una entrada. Además, el registro ADCON1 debe definirse en función al PIN que se requiere como una entrada analógica, y en algunos casos, para configurar el formato del resultado de la conversión. Vea las numerosas fichas técnicas de Microchip para obtener más información sobre estos registros y cómo configurarlo correctamente para el dispositivo específico usado.

        Si varias conversiones se están aplicando a continuación, se debe utilizar un pequeño retraso después del comando ADIN. Esto permite que los condensadores internos de la ADC puedan cargarser íntegramente: -

Ejemplo:

inicio:

VAR1 = ADIN 3 'Coloca la conversión en la variable VAR1


Espere DELAYUS 1 'para 1us


GOTO inicio 'Leer el ADC para siempre

3 comentarios:

  1. device 16f876
    all_digital true

    'include "ad.inc"
    trisb = 0
    portb = 0
    trisc = 0
    portc = 0

    declare lcd_dtpin portb.4
    declare lcd_enpin portb.3
    declare lcd_rspin portb.2


    DECLARE ADIN_RES 10 ' 10-bit result required
    DECLARE ADIN_TAD FRC ' RC OSC chosen
    DECLARE ADIN_STIME 50 ' Allow 50us sample time
    DIM VAR1 as WORD
    TRISA = 000001 ' Configure AN0 (PORTA.0) as an input
    ADCON1 = %10000000 ' Set analogue input on PORTA.0

    symbol led1 portc.0
    symbol led2 portc.1
    symbol led3 portc.2
    symbol led4 portc.3
    symbol led5 portc.4
    symbol led6 portc.5
    symbol led7 portc.6
    symbol led8 portc.7


    cls
    cursor 1,1
    print at 0,0,"Led1 ",dec var1,2
    pause 1000



    inicio:

    VAR1 = ADIN 0
    delayms 200

    if var1 >= 10 and var1 <= 130 then
    led1 = 1
    cls
    cursor 1,1
    print at 0,0,"Led1 ",dec var1 ,2
    else
    cls
    led1 = 0
    endif

    if var1 >= 131 and var1 <= 260 then
    led2 = 1
    else
    led2 = 0
    endif

    if var1 >= 261 and var1 <= 390 then
    led3 = 1
    else
    led3 = 0
    endif

    if var1 >= 391 and var1 <= 520 then
    led4 = 1
    else
    led4 = 0
    endif

    if var1 >= 521 and var1 <= 650 then
    led5 = 1
    else
    led5 = 0
    endif

    if var1 >= 651 and var1 <= 780 then
    led6 = 1
    else
    led6 = 0
    endif

    if var1 >= 781 and var1 <= 910 then
    led7 = 1
    else
    led7 = 0
    endif

    if var1 >= 911 and var1 <= 1023 then
    led8 = 1
    else
    led8 = 0
    endif

    goto inicio


    end

    ResponderEliminar
    Respuestas
    1. Tu encabezado es :
      device 16f876
      all_digital true...

      Pero estas trabajando con entradas analógicas! no podes poner "all_digital TRUE" ya que no todas las entradas son digitales.

      Eliminar
  2. Gracias por la informacion, pero tengo una consulta... Quiero programar las entradas adc de un pic 16f887, y cuando por ejemplo pongo la sentencia Adin 2, me lee la entrada del canal 4, cuando pongo Adin 3, lee las del 6...(pareciera que multiplica por 2 el nro del canal) ¿Sera un error de mi proton ide o un error de la programaciòn?

    ResponderEliminar