TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: soymoe en 22 de Diciembre de 2010, 15:33:13
-
Estoy tratando de encender un display de 7 seg conectado al puerto b para mostar la temperatura, con ra1 y ra2 como pin de habilitacion para 2 digitos multiplexados. Como no se ve nada en el display me pregunto si no sera porque estoy configurando mal los puerto. RA0 es mi entrada analogica. Para configurar el puerto hice una rutina lamada INITPORT que es esta:
IniPort
clrf PORTA
clrf PORTB
bsf STATUS,RP0;seleciona banco 1
movlw b'00000001'
movwf ANSEL;Seleciono channel AN0 como analogico
movlw b'11111001'
movwf TRISA; configuro bit 3-1 como salida bit 0 entrada analogica
movlw b'00000000';salidas la display
movwf TRISB
bcf STATUS,RP0; vuelvo a banco 0
return
Como oscilador uso el interno y lo configuro en el icprog al programar ya que no me acepta la instrucion __config
Ayuda por favor
-
MOVLW 7
MOVWF CMCON ; COMPARADORES APAGADOS
Ponlo antes de cambiar de banco.
Con eso desactivas los comparadores que estan por default usando los pines RA0,RA1,RA2,RA3.
Cuando seleccionas el pin como Analogo en e tu caso ANSEL , si escribes 0 el pin es digital , si escribes 1 es analogo.
Esto es lo que hacía :
MOVLW 7
MOVWF CMCON ; COMPARADORES APAGADOS
BANK1
CLRF TRISA
BSF TRISA,1 ;RA1 <--- ENTRADA
CLRF TRISB
MOVLW B'01111110' ; OSCILADOR INTERNO 8 MHz
MOVWF OSCCON
;--------------------------------- CONFIGURACON ADC
BANKSEL ANSEL
CLRF ANSEL ;E/S DIGITAL
BSF ANSEL,1 ;RA1 <--- ENTRADA ANALOGA
MOVLW B'10000000'
MOVWF ADCON1 ; JUSTIFICADO DERECHO - NO DIVIDIDO /2
; VREF = +VDD -VSS
BANKSEL ADCON0
MOVLW B'11001001' ;CLOCK INT RC -CANAL 1 - ADC ENCENDIDO
MOVWF ADCON0
BANK0
Saludos!
-
:-/Gracias por responder, se que en esta epoca no mucha gente se quiere meter con los pics. Segun lo que me dijiste, he encontrado 2 grandes errores que cometia y que hacia que no se muestre nada en el display:
1-NO configuraba OSCCON.
2- No dsabilitaba los comparadores.
Ya configure el oscilador en el cuerpo del programa principal. Los comparadores los deshabilito en la rutina de configuracion de los puertos.
Voy a probar mostrar los numeros en el display y despues sigo con la conversion A/D.
Muchas Gracias. 8)
-
No logro tener salida en el puerto B, este es mi programa principal de prueba del puerto b:
BSF STATUS,RP0;SELECCIONO BANCO 1
MOVLW b'10001000';OPCIONES
MOVWF OPTION_REG;
;--------------CONFIGURO OPCIONES------------
MOVLW B'01101110' ; OSCILADOR INTERNO 4 MHz
MOVWF OSCCON
BCF STATUS,RP0;SELECCIONO BANCO 0
;----------CONFIGURO OSCILADOR-------------
CALL IniPort; configura port
;----------
CICLO MOVLW .8
MOVWF PORTB;SACO EL VALOR AL PUERTO B
MOVLW 02H
MOVWF PORTA;ACTIVO PRIMERA SALIDA
GOTO CICLO
END;
No se porque no sale nada por el puerto b. :5] Me ayudan?
-
¿y configuraste a RB3 como salida?
-
¿y configuraste a RB3 como salida?
Si ya lo conigure como salida en la rutina Initport que esta al principio. En el simulador de MPlab parece andar todo bien pero no logro tener salida en el puerto. Yo sospecho que por alguna configuracion de oscilador o algo asi el pic no funciona. Pero no se cual sea el problema.
-
Sube tu pograma para darle una revisada.
-
Aqui les paso el programa principal y la rutina Initport:
LIST p=16F88
binH EQU 20H
binL EQU 21H
bcdH EQU 22H
bcdM EQU 23H
bcdL EQU 24H
counter EQU 25H
temp EQU 26H
Resultado_L EQU 27H
Resultado_H EQU 28H
CONTA1 EQU 29H
CONTA2 EQU 2AH
STATUS_TEMP EQU 2BH
binL_TEMP EQU 2CH
binH_TEMP EQU 2EH
ORG 00H
GOTO PROGRAMA
#INCLUDE "p16F88.inc"
#INCLUDE "bin2bcd16.inc"
#INCLUDE "IniPort.inc"
#INCLUDE "sad.inc"
#INCLUDE "display.inc"
#INCLUDE "retardo4ms.inc"
#INCLUDE "tabla.inc"
PROGRAMA
CLRF binH;
CLRF binL
CLRF bcdL
CLRF bcdM
CLRF bcdH
;-------------------------------------------
BSF STATUS,RP0;SELECCIONO BANCO 1
MOVLW b'10001000';OPCIONES
MOVWF OPTION_REG;
;--------------CONFIGURO OPCIONES------------
MOVLW B'01101100' ; OSCILADOR INTERNO 4 MHz
MOVWF OSCCON
CLRF OSCTUNE
BCF STATUS,RP0;SELECCIONO BANCO 0
;----------CONFIGURO OSCILADOR-------------
CALL IniPort; configura port
CICLO MOVLW .255
MOVWF PORTB;SACO EL VALOR AL PUERTO B
MOVLW 02H
MOVWF PORTA;ACTIVO PRIMERA SALIDA
GOTO CICLO
END;
Rutina Initport:
IniPort
clrf PORTA
clrf PORTB
bsf STATUS,RP0;seleciona banco 1
movlw .7
movwf CMCON ; COMPARADORES APAGADOS
movlw b'00000001'
movwf ANSEL;Seleciono channel AN0 como analogico
movlw b'11111001'
movwf TRISA; configuro bit 2-1 como salida bit 0 entrada analogica
movlw b'00000000';salidas la display
movwf TRISB
bcf STATUS,RP0; vuelvo a banco 0
return
-
Logre hacer funcionar el programa :-/, cambiando la configuracion de OSCCON y haciendo un CLRF de OSCTUNE
MOVLW B'01100110' ; OSCILADOR INTERNO 4 MHz
CLRF OSCTUNENo estoy seguro de en que me equivocaba pero ahora funciona. :-/