Autor Tema: Módulo A/D utilizando un PIC16F877  (Leído 4549 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Módulo A/D utilizando un PIC16F877
« en: 18 de Julio de 2008, 23:45:20 »
Un saludo a todos, es la primera ves que voy a publicar un articulo, espero que sirva

voy hablar del módulo A-D del pic16f877 debido a que visto muchas preguntas hacerca de esté módulo

Resumiendo el módulo tiene un registros de trabajo que es adcon0, donde se configura el canal, la habilitación del módulo y además se pregunta cuando ha terminado de convertir, el otro que es muy importante es el adcon1, esté registro sirve para configurar los terminales destinados a las señales análogas y seleccionar en que registro se va grabar la conversión una vez terminada (bit 7 (admf) creo) los registros son adresh y adresl

Bueno compañeros voy a poner un código en el ensamblador espero que sea útil si alguien me puede decir como adjuntar archivos estaría muy agradecido ya que me quedo grande.



; Conversión A/D a 8 bits, el resultado del registro ADRESH  se muestra en los LEDs

; ******** DEFINICION DE REGISTROS UTILIZADOS

pcl   equ   02h
status   equ   03
ptoa   equ   05
ptob   equ   06
ptoc   equ   07
ptod   equ   08
ptoe   equ   09
pclath   equ   0ah
intcon   equ   0bh
pir1   equ   0ch
rcsta   equ   18h
txreg   equ   19h
rcreg   equ   1ah
adresh   equ   1eh
adcon0   equ   1fh
trisa   equ   85h
trisb   equ   86h
trisc   equ   87h
trisd   equ   88h
trise   equ   89h
txsta   equ   98h
spbrg   equ   99h
adresl   equ   9eh
adcon1   equ   9fh

;Definición de bits utilizados

rp0   equ   5
rp1   equ   6
irp   equ   7
z   equ   2
c   equ   0
txif   equ   4
go   equ   2

;Variables del usuario

loops   equ   30h
loops2   equ   31h
buffer   equ   32h
contador   equ   43h

; ************  Configuración para el simulador Proteus

list p=16f877

_CP_ALL                         EQU     H'0FCF'
_CP_HALF                        EQU     H'1FDF'
_CP_UPPER_256                   EQU     H'2FEF'
_CP_OFF                         EQU     H'3FFF'
_DEBUG_ON                   EQU     H'37FF'
_DEBUG_OFF                      EQU     H'3FFF'
_WRT_ENABLE_ON                  EQU     H'3FFF'
_WRT_ENABLE_OFF                 EQU     H'3DFF'
_CPD_ON                         EQU     H'3EFF'
_CPD_OFF                        EQU     H'3FFF'
_LVP_ON                         EQU     H'3FFF'
_LVP_OFF                        EQU     H'3F7F'   
_BODEN_ON                       EQU     H'3FFF'
_BODEN_OFF                      EQU     H'3FBF'
_PWRTE_OFF                      EQU     H'3FFF'
_PWRTE_ON                       EQU     H'3FF7'
_WDT_ON                         EQU     H'3FFF'
_WDT_OFF                        EQU     H'3FFB'
_LP_OSC                         EQU     H'3FFC'
_XT_OSC                         EQU     H'3FFD'
_HS_OSC                         EQU     H'3FFE'
_RC_OSC                         EQU     H'3FFF'

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON



; ***** EMPIEZA EL PROGRAMA

   org   00
   goto   inicio
                       ;subrutina de retardo en milisegundos
retarms   movwf   loops
top2       movlw   d'110'        ;el numero de milisegundos llega
           movwf   loops2     ;cargado en el registro loops
top       nop
           nop
           nop
           nop
           nop
           nop
           decfsz  loops2,1     ;pregunta si termino 1 ms
           goto    top
           decfsz  loops,1     ;pregunta si termina el retardo
           goto    top2
           return

            ;Rutina de conversión A/D a 8 bits
conver   nop         
   nop         ;estas instrucciones nop sirven para
   nop         ;darle al micro el tiempo de adquisición
   nop         ;requerido. En este caso es de 7 us aprox.
   nop
   nop
   nop
   nop
   bsf   adcon0,go   ;inicia conversión
   nop
   nop
consu   btfsc   adcon0,go   ;espera que termine de convertir el dato
   goto   consu
   movf   adresh,0   ;guarda resultado de 8 bits en W y en buffer
   movwf   buffer      
   return

;  ************  PROGRAMA PRINCIPAL  ***************

inicio   clrf   status      ;poner status en cero para asegurar banco 0
   bsf   status,rp0   ;pasar al banco 1
   movlw   b'11111111'      
   movwf   trisa      ;puerto A entradas
   movlw   b'00000000'
   movwf   trisb      ;puerto B salidas
   movlw   b'11111111'
   movwf   trisc      ;puerto C entradas 
   movlw   b'11111111'
   movwf   trisd      ;puerto D entradas
   movlw   b'11111111'
   movwf   trise      ;puerto E entradas 

movlw   b'00000010'   ;selecciono Vref internos (+5 y GND) y 5 canales del puerto A análogos
   movwf   adcon1      ;el resultado de la conversión queda en ADRESH y 2 bits en ADRESL
   
bcf   status,rp0   ;pasar al banco 0
   
   movlw   b'10000001'   ;selecciona canal análogo 0, reloj de conv. fosc/32
   movwf   adcon0      ;convertidor encendido
   
   call   conver      ;llama rutina de conversión A/D
   
   movf   buffer,0      ;el resultado binario de la conversión llega en registro buffer y pasa a W
   movwf   ptob      ;entrega por el puerto B el dato binario de la conversión

   movlw   d'250'      ;retardo entre conversiones de 4 caracteres
   call   retarms      ;este retardo equivale a 250 milisegundos
            ;el usuario puede escoger el tiempo que desee
   goto   inicio      ;Vuelve a empezar el ciclo para hacer otra conversión
   end
chau
Un saludo desde Pereira - Colombia

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #1 en: 19 de Julio de 2008, 00:18:42 »
hOLA Chenao, bienvenido al foro, y gracias por tu aporte!!!  :-/

Un abrazo

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #2 en: 20 de Julio de 2008, 23:17:44 »

Muchisimas gracia hombre por la bienvenida, espero colaborar al desarrollo del foro y aprender muchisimas cosas que ignoro con respecto a la electrónica.

Un abrazo desde Pereira - Colombia la ciudad de la puertas abiertas.

Chau
Un saludo desde Pereira - Colombia

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #3 en: 21 de Julio de 2008, 06:32:38 »
Magnífica forma de comenzar tu andadura en el foro. Muchas gracias, Chenao.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #4 en: 21 de Julio de 2008, 19:59:49 »
Espero que te haya gustado el ejemplito debido a que tiene muchas aplicaciones, principalmente en la adquisición de datos, las señales y el control.

Un abrazo desde Pereira-colombia la ciudad de la puertas abiertas

Un saludo desde Pereira - Colombia

Desconectado jaironeus

  • PIC10
  • *
  • Mensajes: 1
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #5 en: 24 de Octubre de 2010, 18:35:20 »
buenas
soy nuevo en esto de los pics y tengo un problema eh intentado realizar el conversor analogo digital con el codigo aportado lo eh copiado tal cual en mplab y eh creado el .hex pero cuando programo mi pic con el pickit2 y lo monto en protoboard es como si no hubiera programado nada cual creen que es el herror??
alguien podria ayudarme ?

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Módulo A/D utilizando un PIC16F877
« Respuesta #6 en: 26 de Octubre de 2010, 12:05:52 »
Saludos jaironeus.

El programa que he adjuntado funciona, porque ya lo he implementado, el problema puede estar en la forma en que quemaste el micro y en el esquemático que estas montado. Te recomiendo que subas el esquemático y la forma como quemaste el micro para así poderte colaborar.  
Un saludo desde Pereira - Colombia