fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Lectura analógica e...
 
Avisos
Vaciar todo

Lectura analógica en un 12F675

6 Respuestas
3 Usuarios
0 Reactions
7,483 Visitas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

¡Muy buenas compañeros!
Estoy haciendo un pequeño proyecto con un 12F675, básicamente tengo que leer de una de sus entradas analógicas, y activar dos patas en consecuencia...
El problema es que el proyecto tiene que ser en Ensamblador... y nunca he leido datos analógicos en este lenguaje...
¿Alguien lo ha hecho? Necesito saber como configurar el micro, y qué registro leer...
Recurro a vosotros como primera opcion, ahora me pondre a investigar aun asi.

Muuuuuuuchas gracias.

Mif

Responder
5 respuestas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

Ya me contesto yo:

;**********************
;* Configuración *
;*******************
Configuracion
clrf PORTA ; Garantizamos que el puerto esta a 0
bsf STATUS, 5 ; Apuntando a la segunda página de registros
CLRF OPTION_REG ; Habilita Pull-Ups, No WDT Prescaler (TIMEOUT=18 mS)
CLRF WPU
CLRF INTCON ; Sin interrupciones

; Configuracion de los pines:
; · BIT 0 = PIN 7 = GPIO-0 Entrada Analógica 1
; · BIT 1 = PIN 6 = GPIO-1 Salida Digital 1
; · BIT 2 = PIN 5 = GPIO-2 Entrada Analógica 2
; · BIT 3 = PIN 4 = GPIO-3 No existe
; · BIT 4 = PIN 3 = GPIO-4 Entrada Analógica 3
; · BIT 5 = PIN 2 = GPIO-5 Salida Digital 2
; PIN 1 = VCC
; *** PIN 8 = GND

MOVLW B'00011101' ; Configuracion de salidas digitales
MOVWF PORTA ; Carga el valor al TRIS

; Configuración del conversor ADC
MOVLW B'01011101' ; Configuracion de las entradas analógicas A/D CLK=FOSC/16
MOVWF ANSEL;

;······································
;· Lectura de datos ADC Canal 0 ·
;······································
LeeADC
movlw B'00000001' ; Detención de cualquier conversión en curso
movwf ADCON0
call Del100us ; Espera de 100us
bsf ADCON0, 1 ; comienzo de la conversión AD Canal GPIO 0, PIN 7
call Del100us ; Espera de 100us
movf ADRESH, 0 ; Carga W con el valor analógico
movwf TmpAct ; Copia del valor analógico en TmpAct
return

Si alguien ve algun fallo que me lo diga pf, aun no lo he probado...

Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

Ahora tengo otra duda...
El proyecto tiene que ser simulado con MPLab, pero... ¿se pueden simular las entradas analogicas de alguna manera? o voy a tener que recurrir a Proteus

Responder
morlok
Respuestas: 32
(@morlok)
Eminent Member
Registrado: hace 19 años

Ahora tengo otra duda...
El proyecto tiene que ser simulado con MPLab, pero... ¿se pueden simular las entradas analogicas de alguna manera? o voy a tener que recurrir a Proteus
Yo en su momento habia hecho esto para probar leer el ADC con un 877 en asm, este ejemplo modula una onda de audio en funcion del valor del adc, no se si te sirve, parece esta igual a tu ejemplo, lo que cambia es que usaba el chequeo de fin de conversion, pero haciendo una pausa fija tambien funciona bien. En cuanto a simular el adc, creo que con el mplab no se puede, no se con la ultima version, creo va por la 7.5 yo tengo la 7.
Lo que queda si no quieres usar el proteus, es una vez asegurado que el algoritmo de lectura funciona, forzar la carga de los registros con valores directos, claro no es dinamico, si quieres implementar un PID vas muerto 🙂
list p=16f877
#include <p16f877>

__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC

;** Var
n1 EQU 0x40
n2 EQU 0x41
n3 EQU 0x42
dtono EQU 0x43
btono EQU 0x44
aux1 EQU 0x45
aux2 EQU 0X46
aux0 EQU 0X47
ttono EQU 0X48
;
****************************************************************
ORG 0x000
goto inicio
ORG 0x004 ; vector de interrupcion
retfie ; retorno
inicio ORG 0x50
bcf STATUS,GIE ;desconecta interrupciones
bcf STATUS,ADIE ;desconecta interrupcion de ADC

bsf STATUS,RP0 ;banco 1
movlw 0x00 ;puerto B completo como salida
movwf TRISB
bcf STATUS,RP0 ;banco
movlw .8
movwf ttono

movlw .100
movwf btono
movlw .14
movwf ADCON1 ; entrada por canal 0 ref vdd vss
movlw .128 ; canal 0 reloj x 32
movwf ADCON0
bsf ADCON0,0 ;enciende adc

tonoadc call convierte
movfw ADRESH
movwf dtono
call tono
goto tonoadc

;**************************
;SUBRUTINAS

tono movfw ttono
movwf aux0
tt0 decfsz aux0
goto tt1
return
tt1 movfw btono
movwf aux1
bt0 decfsz aux1
goto pone1
goto tt0

pone1 bsf PORTB,0
movfw dtono
movwf aux2
dt0 decfsz aux2
goto dt0
pone0 bcf PORTB,0
movfw dtono
movwf aux2
dt1 decfsz aux2
goto dt1
goto bt0

convierte bsf ADCON0,2 ; inicia conversion
conv btfsc ADCON0,2 ;bucle de testeo de fin de conversion
goto conv
return

END

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

Mif, el proyecto creo que puede ser simulado por MPLab, hay un ventana (ahora mismo no te puedo decir dónde exactamente) en la que puedes ver las entradas del micro, y en tiempo de simulación/depuración cambiarle el valor (las tendras que definir como analógicas antes).

S2

Ranganok Schahzaman

Responder
Página 1 / 2
Compartir: