TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Juanp en 07 de Marzo de 2007, 02:37:03
-
Hola, soy un usuario principiante de PICs y tengo unas pequeñas dudas sobre el pic 16F87X.
1) Quisiera saber si antes de una conversión con el CAD es necesario limpiar los registros ADRESL y ADRESH o si cada vez que se realiza una conversión estos registros se sobreescriben.
A continuación voy a poner el fragmento de una rutina, en esta misma voy a señalar las dudas que tengo
;--------- Configuración inicial del Conversor A/D ---------------------------
BCF STATUS,RP1
BSF STATUS,RP0 ;Selecciono Banco 1
MOVLW 80 ; Los 6 bits más significativos serán leidos como cero
MOVWF ADCON1 ; en la cadena de 16 bits donde solo uso 10
BCF STATUS,RP0 ; Selecciono Banco 0
;--------- Inicio de la conversión ---------------------------------------
MOVLW 25 ; Grabo 00100101. Configuro RA5 como la entrada
MOVWF ADCON0 ;a convertir y comienzo la conversión
LOOP BTFSC ADCON0,2 ; Testeo el bit de fin de conversión GOTO LOOP ; sigo esperando fin de conversión
BCF ADCON0,0 ; Apago el módulo A/D
2) quisiera saber si hasta ahora la rutina anterior es correcta para medir y digitalizar una señal analógica.
3) Es correcto lo siguiente para visualizar la parte baja en el Puerto C? La idea es poner unos LEDs que estén apagados o prendidos (representando unos y ceros) para leer el dato.
BSF STATUS,RP0 ; Selecciono Banco 1
MOVF ADRESL,0
BCF STATUS,RP0 ; Selecciono Banco 0
MOVWF PORTC
4) Ahora mi gran problema. Solo quiero visualizar solo los dos bits menos significativos en dos salidas del Puerto B (utilizando unos LEDs) pero la verdad no tengo ni idea como hacerlo.
MOVF ADRESH,0
y no se como continuarlo. Si alguien me pudiera decir como hacer le estaría muy agradecido.
Saludos para todos y gracias.
-
1) Quisiera saber si antes de una conversión con el CAD es necesario limpiar los registros ADRESL y ADRESH o si cada vez que se realiza una conversión estos registros se sobreescriben.
No es necesario. El PIC sobreescribirá su contenido en la próxima conversión.
2) quisiera saber si hasta ahora la rutina anterior es correcta para medir y digitalizar una señal analógica.
No veo nada incorrecto.Asegurate de configurar bien las entradas/salidas. Tal vez deberías ajustar el duty cycle a 1/64 para lecturas un poco mas estables. Dependerá de tu aplicación eso.
3) Es correcto lo siguiente para visualizar la parte baja en el Puerto C? La idea es poner unos LEDs que estén apagados o prendidos (representando unos y ceros) para leer el dato.[/color]
Si. Es correcto siempre y cuando todos los pines del PORTC estén configurados como salidas.
4) Ahora mi gran problema. Solo quiero visualizar solo los dos bits menos significativos en dos salidas del Puerto B (utilizando unos LEDs) pero la verdad no tengo ni idea como hacerlo.
¿Menos significativos?...
Esto muestra los dos bits MENOS significativos de la conversion en los pines RB0 y RB1.
movlw 0xFC ;cargo W= b'11111100'
andwf PORTB,F ;la AND con W fuerza a los bits RB0 y RB1 a valer cero.
bsf STATUS,RP0
MOVF ADRESL,0 ;copio valor de ADRESL en W
bcf STATUS,RP0
andlw 0x03 ;me quedo solo con los dos bits de menor peso y
iorwf PORTB,F ;la IOR se encargara de setear los bits correspondientes en el PORTB.
Suerte.
-
Muchas Gracias BrunoF!! y perdón por no aclarar que los bits menos significativos a los que me refería eran solamente los del ADRESH. Obviamente la falta de aclaración pudo dar lugar a pensar que podría referirme al dato completo ADRESH_ADRESL. Pero bueno, me entendiste perfectamente a que apuntaba la pregunta. Saludos y espero con el tiempo poder ser yo quien pueda dar una mano acá.
-
Ah! Ok. Si. Me resultaba raro lo que pedias, pero era posible por lo que asumi que te referias a los 2 bits menos significativos de toda la conversion :D
Para los dos bits del ADRESH es mas facil:
movlw 0xFC ;cargo W= b'11111100'
andwf PORTB,F ;la AND con W fuerza a los bits RB0 y RB1 a valer cero.
;bsf STATUS,RP0 No se usa porque ADRESH esta en BANK0
MOVF ADRESH,0 ;copio valor de ADRESL en W
;bcf STATUS,RP0
;andlw 0x03 ;no se necesita xq la conversion ya pone en cero los otros 6 bits del registro.
iorwf PORTB,F ;la IOR se encargara de setear los bits correspondientes en el PORTB.
Quedando:
movlw 0xFC ;cargo W= b'11111100'
andwf PORTB,F ;la AND con W fuerza a los bits RB0 y RB1 a valer cero.
MOVF ADRESH,0 ;copio valor de ADRESL en W
iorwf PORTB,F ;la IOR se encargara de setear los bits correspondientes en el PORTB.
Suerte!