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
device 16f876
ResponderEliminarall_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
Tu encabezado es :
Eliminardevice 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.
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