TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: jonbul en 02 de Marzo de 2010, 07:35:33
-
Hola, estoy empezand en el mundillo de los pics y ya he hecho algunas cosillas y me gustaria meterme con las entradas analogicas. Estoy haciendo un proyecto para clase con un PIC 16F877 y me gustaria medir una tension analogica que em da un sensor de temperatura. De momento de la ayuda de proton e sacado esto pero no entiendo bien para que sirve cada declaracion. Aparte este ejemplo explica como usar el PORTA pero a mi me gustaria usar el PORTE.
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 = %00000001 ' Configure AN0 (PORTA.0) as an input
ADCON1 = %10000000 ' Set analogue input on PORTA.0
VAR1 = ADIN 0 ' Place the conversion into variable VAR1
En resumen me gustaria saber:
Que signica cada declare
que valor e de meter al adcon1 para asignar el PORTE como entrada analogica
tambien, decir que uso un cristal de 4MHz, que frecuencia pongo en el ADIN_TAD?
-
Hola, estoy empezand en el mundillo de los pics y ya he hecho algunas cosillas y me gustaria meterme con las entradas analogicas. Estoy haciendo un proyecto para clase con un PIC 16F877 y me gustaria medir una tension analogica que em da un sensor de temperatura. De momento de la ayuda de proton e sacado esto pero no entiendo bien para que sirve cada declaracion. Aparte este ejemplo explica como usar el PORTA pero a mi me gustaria usar el PORTE.
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 = %00000001 ' Configure AN0 (PORTA.0) as an input
ADCON1 = %10000000 ' Set analogue input on PORTA.0
VAR1 = ADIN 0 ' Place the conversion into variable VAR1
En resumen me gustaria saber:
Que signica cada declare
que valor e de meter al adcon1 para asignar el PORTE como entrada analogica
tambien, decir que uso un cristal de 4MHz, que frecuencia pongo en el ADIN_TAD?
DECLARE ADIN_RES 10 ' aqui el resultado sera en 10 bit
DECLARE ADIN_TAD FRC 'aqui deberia usar un condensador como referencia RC OSC chosen
DECLARE ADIN_STIME 50 ' Allow 50us sample time
DIM VAR1 as WORD , aqui defini la variable en word que puede ser entre 0 y 65,535
TRISA = %00000001 'aqui activa la resistencia internal pullUp-- Configure AN0 (PORTA.0) as an input
ADCON1 = %10000000 ' aqui activa el puerto A.0--Set analogue input on PORTA.0
VAR1 = ADIN 0 'aqui coloca la varible para la conversion- Place the conversion into variable VAR1
En resumen me gustaria saber:
Que signica cada declare
que valor e de meter al adcon1 para asignar el PORTE como entrada analogica
tambien, decir que uso un cristal de 4MHz, que frecuencia pongo en el ADIN_TAD?
-
jej con los declare me bastaba pero gracias
por lo que he entendido si quiero que el resultado me lo guarde en un byte entre 0 y 255 tendria que poner "ADIN_RES 8", lo del frc sigue sin quedarme claro, adin_stime por lo que he leido por ahi es un tiempo que hay que darle al pic para que lea y lo convierta asi que puedo dejar 50us.
lo de adcon1 puedo suponer que el bit mas a la izquierda o de mayor peso seria RA0/AN0 y si se pone a 1 me lo configura como entradas analogica, es decir si pusiese "ADCON1 = %01100000" ra1 y ra2 serian las entradas analogicas. siendo el de mas a la izquierda AN0 y el de mas a la derecha AN7, es posible que sea asi?
-
1) En lo primero de ADIN_Res 8 estas en lo correcto.
2) Lo del frc es indica el tipo de oscilador que utiliza
Sets the ADC's clock source. All compatible PICmicros have four options for the clock source used by the ADC. 2_FOSC, 8_FOSC, and 32_FOSC, are ratios of the external oscillator, while FRC is the PICmicro's internal RC oscillator.
Traducido: 2_FOSC, 8_FOSC y 32_FOSC son valores usando el oscilador externo y el FRC es usando el oscilador interno del PIC
3) En lo del tiempo tambien andas en lo correcto
4) En lo ultimo no me atrevo a decir nada y mejor espero a que alguien que sepa conteste porque yo solo he hecho una vez pruebas con el ADC y ha sido basandome en ese mismo ejemplo que has puesto tu, sacado del proton.
Un saludo!
-
gracias strepto, espero que alguien me pueda aydar con la ultima. mientras seguire mirando haber si encuentro algo
-
lo de adcon1 puedo suponer que el bit mas a la izquierda o de mayor peso seria RA0/AN0 y si se pone a 1 me lo configura como entradas analogica, es decir si pusiese "ADCON1 = %01100000" ra1 y ra2 serian las entradas analogicas. siendo el de mas a la izquierda AN0 y el de mas a la derecha AN7, es posible que sea asi?
Y si no estoy equivocado ¿No sera que el AN0 es el primeo de la izquierda y el AN7 el primero de la derecha?
Esto lo puedes ver en el datasheet.Mira aqui: http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
El registro ADCON1 sirve para seleccionar el canal de la conversion y como justificas la conversion si a la derecha o a la izquierda cuando el conversor es de 10 bits. Si es de 8 bits el resultado se queda en el registro "adresh" y por tanto ocupa la totalidad del byte en tu variable si la has declarado como tal.
Fer.
-
ha base de empollarme el datasheet, que menos mal que lo encontre en castellano e desubierto como va el adcon1 para poner las salidas analogicas o digitales, esta en el apartad 11-1 en ambos idiomas, al parecer, los 4 bits de menor peso segun el valor que tengan se configuran las entradas analogicas o digitales, lo cual me parece una porqueria ya que no puedes elegir libremente cuales se quiere como analogicas y cuales como digitales
-
Si que puedes elegir, pero de acuerdo a la estructura que te dejan.
¡Eso es lo que hay y con eso tenemos que lidiar!
Fermin
-
Si que puedes elegir, pero de acuerdo a la estructura que te dejan.
¡Eso es lo que hay y con eso tenemos que lidiar!
Fermin
si a eso me referia pero ya tengo todo el diseño y el programa practicamente acabados y esto me obliga a hacer varios cambio, vere que se puede hacer y hare pruebas con el 16f876 y 8 diodos leds en el port B
-
ya h ehecho un programilla de prueba y me funciona
DECLARE ADIN_RES 8 ' -bit result required
DECLARE ADIN_TAD FRC ' RC OSC chosen
DECLARE ADIN_STIME 50 ' Allow 50us sample time
Dim AnDig as byte
trisa=%11111110
trisb=0
Adcon1.0=0
Adcon1.1=1
Adcon1.2=1
Adcon1.3=1
Inicio:
portb= adin 0
delayms 100
goto inicio
A RA0/AN0 he conectado la base de una resistencia ajustables de 4K7 y sus extremos GND y a +5V y todo el PORTB a diodos leds. Al regularla se veia como se iban encendiendo los diodos leds y apagando segun la tension de ra0.
Gracias a todos por la ayuda
-
ahora que ya me funciona la entrada analogica estoy probando con un LM35 para ver la temperatura que hace con un PIC 16f877. Lo tengo directamente conectado a RA0 vcc y gnd. El caso es que cuando mido tensiones a la salida del LM35 me da siempre la temperatura en mV, es decir 20ºC--->Vout=20mV y aumenta ocn la temperatura, pero al medir con el pic en el zocalo me da 0,14mV y cuando le doy calor a lm35 baja la tension y el valor que se muestra en la lcd. Haber si me podria explicar alguien por que.
PD: por lo que he leido en algunos foros no hace falta conectar un operacional a la salida del LM35 al usar un pic 16f877, no se si sera verdad
EDIT: ya me vale, despues de ni se cuanto tiempo buscando el porque, al final resulta que es por que no tenia configurado el RA0 como entrada, de aqui por la ventana
-
Enhorabuena
-
ha base de empollarme el datasheet, que menos mal que lo encontre en castellano e desubierto como va el adcon1 para poner las salidas analogicas o digitales, esta en el apartad 11-1 en ambos idiomas, al parecer, los 4 bits de menor peso segun el valor que tengan se configuran las entradas analogicas o digitales, lo cual me parece una porqueria ya que no puedes elegir libremente cuales se quiere como analogicas y cuales como digitales
disculpa acabo de leer esto y estoy aprendiendo sobre el tema (las entradas analogicas) y me interesa si puedes poner la direccion del data ese que has encontrado en español y de algunos otros aver si entre unos y otros me voy enterando
de antemano gracias