como se hace una segunda conversion con el 18f452

hola a todos....
necesito hacer una segunda conversion lo que no entiendo es que en el data dice que al hacerse una segunda conversion se debe tener un retardo de 2TAD. la verdad pues no se si este tiempo se le debe tambien sumar a los 13uS que es el tiempo que necesita la conversion tampoco se si esto va en la parte del retardo que para la segunda conversion la llamaria retardo2, no se si estoy equivocado si algo me perdonan y toda ayuda se las agradecere.....

entran señales analogas por NA2 y NA0


listp=18f452 ;indica el modelo del pic a utilizar
include<p18f452.inc> ;directiva donde se encuentra la declaracion
;de todos los registros de funcion especifica

;configuracion de los toscs del micro
;------------------------------------
config oscs=off, osc=hs
config bor=off, pwrt=on
config wdt=off
config stvr=on, lvp=off

;variables usuario
;------------------------------------
contador1 equ 0x00 ;posicion en la memoria del operando1

org 0x00

movlw b'11000010'
movwf adcon1 ;configuro el a/d, justificacion a la derecha
;relj de vonversion de 16tosc, los pines an7:an5
;como e/s digitales y los pines an4:an0 como
;entradas analogas

movlw b'01010001'
movwf adcon0 ;reloj de conversion 16tosc, canal2 seleccionando
;y activando el modulo a/d

bcf pir1,adif ;limpiar bit de bandera de interrupcion a/d
clrf trisb
clrf trisd

movlw .11 ;requerimiento del reloj para que transcurra la
;conversion
movwf contador1

retardo
decfsz contador1
goto retardo ;aseguro que haya transcurrido como minimo 13us

bsf adcon0,go ;iniciar conversion a/d

bucle
btfss pir1,adif ;espero a que la conversion finalice
goto bucle

movff adresl,portc
movff adresh,portb

fin
goto fin
end
 
Al utilizar un periférico, no importa de que microcontrolador,
lo recomendable es atenerse a las banderas de estado o status.
En el registro ADCON0, el bit 2 es llamado "GO/-DONE". Se usa
para arrancar, pero también indica el estado. Escribes un uno
para arrancar la conversión, y mientras permanece en uno,
el convertidor está trabajando. Al momento que la conversión
termina, el bit "GO/-DONE" cae a cero. Eso está en la hoja de
datos del micrcontrolador. Para no desperdiciar ciclos, es
preferible usar una rutina de interrupción de fin de conversión.

Saludos
 
Perromuerto dijo:
Al utilizar un periférico, no importa de que microcontrolador,
lo recomendable es atenerse a las banderas de estado o status.
En el registro ADCON0, el bit 2 es llamado "GO/-DONE". Se usa
para arrancar, pero también indica el estado. Escribes un uno
para arrancar la conversión, y mientras permanece en uno,
el convertidor está trabajando. Al momento que la conversión
termina, el bit "GO/-DONE" cae a cero. Eso está en la hoja de
datos del micrcontrolador. Para no desperdiciar ciclos, es
preferible usar una rutina de interrupción de fin de conversión.

Saludos


------------------------------------------------------------------------------------------------------------
gracias por responderme pero, hago todo, tengo el programa hecho. Cuando termino el retardo para la conversion que es de 13uS pongo el bit "GO/DONE" a 1 pero la verdad en el "ADRESH,ADRESL" no obtengo nada lo he simulado por proteus y no obtengo nada en los leds


este es el programa la señal analoga entra por AN0 y debo utilizar un oscilador de 15MHz y lo visulalizo por "PORTB y PORTD" pero no me muestra nada no encuentro el error en mi programa ya que la configuracion de los "ADCON" me parece que esta correcta-

listp=18f452 ;indica el modelo del pic a utilizar
INCLUDE<P18F452.INC> ;directiva donde se encuentra la declaracion
;de todos los registros de funcion especifica

;CONFIGURACION DE LOS TOSCS DEL MICRO
;------------------------------------
CONFIG OSCS=OFF, OSC=HS
CONFIG BOR=OFF, PWRT=ON
CONFIG WDT=OFF
CONFIG STVR=ON, LVP=OFF

;VARIABLES USUARIO
;------------------------------------
CONTADOR equ 0x00 ;posicion en la memoria del operando1

ORG 0X00

movlw b'10001110' ;justificado a la derecha, reloj 32Tosc
;AN0 entrada analoga
movwf ADCON1

movlw b'10000001'
movwf ADCON0

bcf PIR1,ADIF ;limpiar bandera
clrf PORTB
clrf PORTD

movlw .17
movwf CONTADOR

;---------------------------------
retardo
decfsz CONTADOR
goto retardo

bsf ADCON0,GO ;iniciar conversion A/D

conversion
btfss PIR1,ADIF
goto conversion

;-----------------------------------
movff ADRESL,PORTB
movff ADRESH,PORTD

lazo goto lazo
END

hasta luego.....
 
Comparando tu código con el de las notas de aplicación
de microchip, me parece que se te ha olvidado configurar
el puerto A. Esencialmente borrar TRISA, tal como lo haces con
TRISB.
En el ejemplo 9-1 de la nota de aplicación para los PIC18FXX2
lo hacen explícitamente.

Saludos.
 
Perromuerto dijo:
Comparando tu código con el de las notas de aplicación
de microchip, me parece que se te ha olvidado configurar
el puerto A. Esencialmente borrar TRISA, tal como lo haces con
TRISB.
En el ejemplo 9-1 de la nota de aplicación para los PIC18FXX2
lo hacen explícitamente.

Saludos.

----------------------------------------------------------------------------------------------------------------

si amigo, asi fue no configure el puerto "A" y el puerto"B" en el codigo no debi utiliazar el portA y el portB, tenia que hacer con trisA y trisB, con esto ya el codigo corre. Pero te hago una pregunta y disculpa tanta molestia, como hago si tengo dos señales analogas y las deseo convertir, ya por lo menos tengo el programa para una sola conversion, pero si deseo que haga una segunda como debe ser el codigo, me imagino que configuro denuevo los adcon, pongo la bandera en cero, configuro los puertos con tris, hago un retardo "este es el problema de cuanto es el retardo para una segunda conversion" y luego coloco a uno el Go para hacer conversion, pues la verdada hice el codigo pero no funciona solo me hace una conversion, mas la otra conversion que le entra por el otro pin no la hace.... gracias por tu ayuda. saludos hasta pronto
 
No te preocupes, que para eso estamos.
Primero, estas habilitando solo una entrada analógica
cuando escribes ADCON1. Verifica en el manual.
Segundo, en ADCON0 los bit CHS0, CHS1 y CHS2 se usan
para seleccionar la entrada a convertir.
No necesitas reconfigurar los puertos de entrada/salida una
vez que esten configurados. Volver a borrar TRISA deperdicia
ciclos de procesador. Una vez puesta la bandera de ADON
en ADCON0, no necesitas reactivar el ADC. Una vez hecha la
primera conversion solo tienes que ir cambiando el canal
y verificando la bandera de Go.
Lo que debes hacer es mantener una constante tipo plantilla
para la configuración de ADCON0, la cargas en el acumulador
(W) y le haces un OR con el número del canal que quieres
convertir, y luego cargas eso en ADCON0.

Saludos
 
Perromuerto dijo:
No te preocupes, que para eso estamos.
Primero, estas habilitando solo una entrada analógica
cuando escribes ADCON1. Verifica en el manual.
Segundo, en ADCON0 los bit CHS0, CHS1 y CHS2 se usan
para seleccionar la entrada a convertir.
No necesitas reconfigurar los puertos de entrada/salida una
vez que esten configurados. Volver a borrar TRISA deperdicia
ciclos de procesador. Una vez puesta la bandera de ADON
en ADCON0, no necesitas reactivar el ADC. Una vez hecha la
primera conversion solo tienes que ir cambiando el canal
y verificando la bandera de Go.
Lo que debes hacer es mantener una constante tipo plantilla
para la configuración de ADCON0, la cargas en el acumulador
(W) y le haces un OR con el número del canal que quieres
convertir, y luego cargas eso en ADCON0.

Saludos

------------------------------------------------------------------------------

hola de nuevo mira este fue el programa ya lo termine e hice caso de configurar una ves el ADCON1 y mover solo el ADCON0, espero que te sirva de algo, los simule en proteus y el tiempo en que los leds varian "hace la conversion" es de 1s para eso utilice el TIMER..... y muchas gracias por tu ayuda me sirvio bastante..
hasta pronto amigo




listp=18f452 ;indica el modelo del pic a utilizar
INCLUDE<P18F452.INC> ;directiva donde se encuentra la declaracion
;de todos los registros de funcion especifica

;CONFIGURACION DE LOS FUSES DEL MICRO
;------------------------------------
CONFIG OSCS=OFF, OSC=HS
CONFIG BOR=OFF, PWRT=ON
CONFIG WDT=OFF
CONFIG STVR=ON, LVP=OFF

;VARIABLES USUARIO
;------------------------------------
CONTADOR equ 0x00 ;posicion en la memoria del operando1
CONTADOR2 equ 0x01
conta1 equ 0x02
conta2 equ 0x03

ORG 0X00

;PRIMERA CONVERSION
;------------------------------------
movlw b'10000101' ;configurar timer0 para tiempo de 1S
;preescaler de 64
movwf T0CON

movlw .27
movwf TMR0H ;cargo timer0h con 27
movlw .30
movwf TMR0L ;cargo timer0l con 30
bcf INTCON,2 ;bandera en cero

movlw b'10001001' ;justificado a la derecha, reloj 32Tosc
;AN0 entrada analoga
movwf ADCON1
clrf TRISB
clrf TRISD

inicio
movlw b'10000001'
movwf ADCON0

bcf PIR1,ADIF ;limpiar bandera


movlw .17
movwf CONTADOR

call retardo
bsf ADCON0,GO ;iniciar conversion A/D
call conversion

movff ADRESL,PORTB
movff ADRESH,PORTD


;SEGUNDA CONVERSION
;----------------------------------
movlw b'10101001'
movwf ADCON0

clrf CONTADOR

movlw .21
movwf CONTADOR

call retardo
bsf ADCON0,GO
call conversion

movff ADRESL,PORTB
movff ADRESH,PORTD
GOTO inicio
;RETARDOS
;---------------------------------

retardo
decfsz CONTADOR
goto retardo
bucle
btfss INTCON,2 ;revision de desbordamiento
goto bucle
bcf INTCON,2
return

conversion
btfss PIR1,ADIF
goto conversion
bcf PIR1,ADIF
return
END
;-----------------------------------
 
No creo que haga falta utilizar timers para hacer dos simples conversiones. Simplemente las haces una detras de la otra y ya está. Para hacer una conversión tienes que seleccionar el canal que quieres y despues activar el bit GO_DONE. EJ:

movlw b'00001100' ;Se elegen los canales AN0,AN1,AN2.
movwf ADCON1

movlw b'00000001' ;Habilitar A/D y elegir canal AN0.
movwf ADCON0

bsf ADCON0,GO_DONE ;Se inicia la conversión A/D.
Espera:
btfsc ADCON0,GO_DONE ;Comprueba si la conv.ha llegado a su fin.
goto Espera
;Mover los valores del conversor a las variables que quieras.

movlw b'00001001' Seleccion del canal AN2.
bsf ADCON0,GO_DONE ;Se inicia la conversión A/D.
Espera:
btfsc ADCON0,GO_DONE ;Comprueba si la conv.ha llegado a su fin.
goto Espera
;Mover los valores del conversor a las variables que quieras.

Es sencillo para cambiar el canal que estas utilizando para la conversión solo tienes que camviar el valor del registro ADCON0.

Un saludo y que vayabien... PEDRO
 
Atrás
Arriba