Escrito originalmente por kronocher
hola.
estoy queriendo conectar al conversor ADC0804 al pic pero no logro que funcione adecuadamente. Conecto el CS y RD a tierra y los pines WR y INTR a los pines del PIC. Ademas utilizo dos registros 74374 para hacer de entrada y salida.
Entiendo que teniendo CS y RD a tierra , mandandole un nivel 0 a WR comienza la conversion. y hay que esperar a que ocurra la interrupcion en INTR.
y luego de recibir la interrupcion hay que darle un nivel bajo para comience otra conversion. Es eso del todo correcto???
quisiera que alguien me proporcione. el algoritmo correcto para conectar el ADC0804 al PIC16F84.
por cierto cuando hago funcionar el ADC sin el PIC en modo LIBRE, al ir variando la tension de entrada del ADC a la salida tengo leds que indican la conversion s digital , pero estos led en momentos comienzan a parpadear , como pudiera solucionar esto. Demas esta decir que el tipo de sensor puede ser cualquiera en este caso es uno de temperatura ojala te sirva.
gracias.........
Hola mira yo use una rutina que encontre en internet y me funciono bien ahora lo del parpadeo es propio del adc no te compliques porque el soft del pic soluciona los timming del adc te envio la rutina .
;Medición digital de la temperatura
;mediante un LM35 y ADC0804 y envío
;de la temperatura al PC mediante un PIC16F84A
;y un MAX232 vía RS-232
LIST P=16F84
;*****************************
;Declaración de registros
status equ 0x03
PORTA equ 0x05
PORTB equ 0x06
carry equ 0
TX equ 1
WR equ 2
CLK equ 3
INTR equ 4
loops equ 0x0c
r0d equ 0x0d
r0e equ 0x0e
trans equ 0x0f
org 0
goto inicio
org 5
;****************************
;Subrutina reloj, que se encarga de dar pulsos al ADC0804
reloj bsf PORTA,CLK ;sube la linea del reloj
movlw 0x1F
movwf loops ;retardo
reloj2 decfsz loops
goto reloj2
bcf PORTA,CLK ;baja la linea de reloj
movlw 0x1F
movwf loops ;retardo
reloj3 decfsz loops
goto reloj3
return
;Fin de la subrutina reloj
;****************************
;Subrutina delay para transmitir un bit
delay movlw .166 ;cargar para 833 microseg aproximadamente
startup movwf r0e ;llevar a cabo el retardo
redo nop ;limpiar circuito de vigilancia
nop
decfsz r0e
goto redo
retlw 0
;Fin de la subrutina delay
;****************************
;Subrutina enviar, envia el valor de la temperatura
;al PC de manera serial
enviar movwf trans ;llevar el contenido de w a transmision
xmrt movlw 8 ;cargar con el numero de bits
movwf r0d ;el contador
bcf PORTA,TX ;colocar la linea de transmision en bajo
call delay ;para generar bit de arranque
xnext bcf PORTA,TX ;colocar la linea de transmision en bajo
bcf status,carry ;limpiar el carry
rrf trans ;rotar registro de transmision
btfsc status,carry ;preguntar por el carry
bsf PORTA,TX ;si es uno, colocar linea en alto
call delay
decfsz r0d ;decrementar el contador, saltar si cero
goto xnext ;repetir hasta transmitir el dato
bsf PORTA,TX ;colocar la linea de transmision en alto
call delay ;llamar retardo 1 bit -bit de parada-
retlw 0
;Fina de la subrutina enviar
;****************************
;Inicio del programa
inicio bsf status,5
movlw 0x11
movwf PORTA
movlw 0xFF
movwf PORTB
bcf status,5
bsf PORTA,TX ;colocar la linea de transmision en alto
bcf PORTA,WR ;colocar en bajo WR para resetear el ADC
movlw 0x1F
movwf loops ;retardo
salto1 decfsz loops
goto salto1
bsf PORTA,WR ;colocar en alto WR para iniciar la conversion
movlw 0x1F
movwf loops ;retardo
salto2 decfsz loops
goto salto2
pulsos call reloj ;llamar a la subrutina reloj
btfsc PORTA,INTR ;preguntar se INTR es cero, si lo es saltar
goto pulsos
movf PORTB,w ;cargar el dato binario en w
call enviar ;llamar a la subrutina enviar
goto inicio
;Fin del programa principal
;*****************************
end