uControl
Febrero 28, 2017, 02:45:43 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: como se programan puertos que tienen varias funciones? (16f887)  (Leído 1177 veces)
0 Usuarios y 1 Visitante están viendo este tema.
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« : Octubre 24, 2015, 11:45:26 »

Cordial saludo, por aquí de nuevo a solicitar una ayuda,
He programado los puertos del pic 16f887 con sus respectivos ansel anselh y tris, en el caso del los puertos Rc0 y Rc1 cuando requiero que se pongan a 1 lo que hace es pasar de alta impedancia a nivel bajo / y errores así parecidos en otros pines.
Me disculpo por la ignorancia en esta familia de pics pero es que siempre he trabajado los los 12f.
He tratado de entrar a los registros que contiene estas funciones adicionales para tratar de que estos pines se comporten como entradas o salidas digitales pero no encuentro el camino.
Veo que además de seleccionarlo como i/o digital a veces hay que hacer otros ajustes.
Hay una forma clara para aprender a configurarlos cuando esto pase?
Gracias de antemano por vuestra ayuda…..que viva el futbol
« Última modificación: Octubre 24, 2015, 11:50:34 por johenrod » En línea
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5693


Cumulonimbus


WWW
« Respuesta #1 : Octubre 25, 2015, 11:50:23 »

Los puertos RC0 y RC1 no tienen entrada analógicas.

En el datasheet dice lo siguiente:

Citar
BANKSEL PORTC
CLRF PORTC
BANKSEL TRISC
MOVLW B‘00001100’
MOVWF TRISC

;Set RC<3:2> as inputs
;and set RC<7:4,1:0>
;as outputs
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5657



« Respuesta #2 : Octubre 25, 2015, 01:01:03 »

Hay una forma clara para aprender a configurarlos cuando esto pase?
Yo se que  va ha sonar chocante, pero no me canso de repetir, hay que leer la hoja de datos, volver a leerla y volver a leerla nuevamente, y después estudiarla hasta entender como se configura. Probar y volver a probar. Una vez que descubres como hacerlo para un micro te va ha ser mas fácil para el siguiente y mucho mas fácil para el tercero. y no importa que familia programes, si bien las cosas están en diferentes lugares, o se llamen un poco diferente cuando aprendes ha manejar la hoja de datos es mas fácil programar un micro correctamente y no cometer errores del tipo que supiste cometer aqui.


Es mas fácil ver donde puede estar tu error si subes tu código completo tal cual lo tienes, que intentar adivinar o ponerse a explicar que se debe configurar y como, como ya dije eso está en las hojas de datos.
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« Respuesta #3 : Octubre 25, 2015, 01:33:49 »

Hay una forma clara para aprender a configurarlos cuando esto pase?
Yo se que  va ha sonar chocante, pero no me canso de repetir, hay que leer la hoja de datos, volver a leerla y volver a leerla nuevamente, y después estudiarla hasta entender como se configura. Probar y volver a probar. Una vez que descubres como hacerlo para un micro te va ha ser mas fácil para el siguiente y mucho mas fácil para el tercero. y no importa que familia programes, si bien las cosas están en diferentes lugares, o se llamen un poco diferente cuando aprendes ha manejar la hoja de datos es mas fácil programar un micro correctamente y no cometer errores del tipo que supiste cometer aqui.


Es mas fácil ver donde puede estar tu error si subes tu código completo tal cual lo tienes, que intentar adivinar o ponerse a explicar que se debe configurar y como, como ya dije eso está en las hojas de datos.

Cordial saludo…
No suena chocante para nada,,, estoy es aprendiendo.
El error que me citas es el 16f88 y eso ya me quedo claro, en cuanto a la aclaracion que me hace Leon Pic también se que no tiene entradas análogas en esos pines.
Para ser más puntual el pin 15 RC0 y RC1 del 16F887 comparte su i/o digital con T1OSO y T1CKI - T1OSI Y CCP2 busco estos registros y trato de modificar los bits que me parecen afectan este puerto RC0 y no logro obtener que el pin se comporte como i/o digital. (la idea desabilitar estos 2 registros para que me deje trabajar este pin como i/o digital)
Por esta vez podrían indicarme por favor como los configuro, es decir que viene  a sus mentes cuando los están configurando, no soy perezoso busco y leo el datasheet pero recuerden que para ustedes esto es muy fácil.  Prometo no tratar este tema nuevamente solo quiero saber cómo o cuando estos pines se ven afectados por otros registros, gracias de antemano.


« Última modificación: Octubre 25, 2015, 02:02:37 por johenrod » En línea
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5657



« Respuesta #4 : Octubre 25, 2015, 02:07:35 »

Básicamente no hay mucho, además de los registros tris, des-habilitar la parte analógica con los ansel, des-habilitar los módulos comparadores, des-habilitar los PWM, respetando obviamente los bancos donde se encuentra cada uno de los registros respectivos.

Es mas fácil ver donde puede estar tu error si subes tu código completo tal cual lo tienes, que intentar adivinar o ponerse a explicar que se debe configurar y como, como ya dije eso está en las hojas de datos.
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« Respuesta #5 : Octubre 25, 2015, 04:23:25 »

Cordial saludo, gracias por sus respuestas..
aqui trato de encender y apagar un led por RC1 pero lo que muestra en la salida es que pasa de alta impedancia a nivel bajo / nunca alto.
 
Código:

list p=16f887 ; list directive to define processor
#include <p16f887.inc> ; processor specific variable definitions

__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V


;ASIGNACION DE VARIABLES-

CounterB EQU   0X021
CounterA EQU   0X022
CounterC EQU   0X023

;INICIO DEL PROGRAMA

ORG 0X00
         
GOTO MAIN       
   
ORG  0X05

 MAIN 
BANKSEL OSCCON ; ; SELECCIONO el BANCO 1
MOVLW 0x72 ; ; CONFIGURO OSC INTERNO 4 MHZ
MOVWF OSCCON ;


BANKSEL ANSEL ;SELECCIONO TODOS  PUERTOS DIGITALES
CLRF ANSEL ; altos y bajos
CLRF ANSELH

BANKSEL PORTA ; VOY AL BANCO 1
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE




  BANKSEL    TRISC         ; VOY AL BANCO 1
            MOVLW       B'00000000'    ;Config. PUERTO A ENTRADAS
            MOVWF       TRISC


  BSF  PORTC,1
            CALL RET
            BCF PORTC,1
            CALL RET
            GOTO INICIO
« Última modificación: Octubre 25, 2015, 07:50:14 por johenrod » En línea
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5657



« Respuesta #6 : Octubre 25, 2015, 05:18:26 »

   BANKSEL    TRISC         ; VOY AL BANCO 1
            MOVLW       B'00000000'    ;Config. PUERTO A ENTRADAS
            MOVWF       TRISC
         
            BANKSEL PORTC
   
            BSF  PORTC,1
            CALL RET
            BCF PORTC,1
            CALL RET
            GOTO INICIO


hola el tema es que te olvidaste de hacer el cambio de banco para poder trabajar con el puerto, por lo que en realidad estabas modificando el TRIS y no el PORT.

Agrega la línea que puse en rojo.

Saludos
HJ
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5657



« Respuesta #7 : Octubre 25, 2015, 05:21:35 »

Otro detalle a tener en cuenta es que tu etiqueta "inicio" debería estar en otro lugar del código, justo debajo de la o arriba, para este caso da igual, de la instrucción que te dije que agregaras. De esta forma dejas de fuera del lazo infinito a la configuración de los registros, ya que no hace falta hacerla en cada ciclo como está ahora en tu programa.

Saludos
HJ
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« Respuesta #8 : Octubre 25, 2015, 05:35:01 »

Saludos cordiales,

Lo del inicio lo tendré en cuenta y lo del resalto en rojo para cambio de banco si lo tengo agregado es solo que de tanto molestar el programa se me había borrado y asi lo pegue aquí, pero igual no me funcionaba al tenerlo en el banco adecuado.
Por un rinconcito del datasheet encontré enable del registro T1CON y cambie el pin 3bit y ya me dio,,,  como debo a futuros programas comenzar (en que orden) con los registros ansel, tris , clrf porc.

Dejo código corregido, estaría bien ahora?
Muchas gracias…
Código:
list p=16f887 ; list directive to define processor
#include <p16f887.inc> ; processor specific variable definitions

__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

CounterB EQU  0X021
CounterA EQU  0X022
CounterC EQU  0X023



ORG 0X00
      
GOTO INICIO        
    
ORG  0X25

  
BANKSEL OSCCON ; ; SELECCIONO el BANCO 1
MOVLW 0x72 ; ; CONFIGURO OSC INTERNO 4 MHZ
MOVWF OSCCON ;


BANKSEL ANSEL ;SELECCIONO TODOS  PUERTOS DIGITALES
CLRF ANSEL ; altos y bajos
CLRF ANSELH

BANKSEL PORTC ; VOY AL BANCO 1
CLRF PORTC


BANKSEL TRISC ; VOY AL BANCO 1
MOVLW B'00000000' ;Config. PUERTO A SALIDAS
MOVWF TRISC

;BANKSEL CCP2CON
;CLRF   CCP2CON

BANKSEL T1CON
BCF   T1CON,3
INICIO
BANKSEL PORTC
MOVLW 0XFF
MOVWF  PORTC
CALL RET
MOVLW 0X00
MOVWF  PORTC
CALL RET
GOTO INICIO

RET
;PIC Time Delay = 1,00001100 s with Osc = 4000000 Hz
movlw D'6'
movwf CounterC
movlw D'19'
movwf CounterB
movlw D'176'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
retlw 0

END

Citar
            ;BANKSEL    CCP2CON
            ;CLRF        CCP2CON
            
            BANKSEL    T1CON
            BCF        T1CON,3

INICIO      
            BANKSEL    PORTC
            MOVLW 0XFF
            MOVWF  PORTC
« Última modificación: Octubre 25, 2015, 05:46:13 por johenrod » En línea
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5693


Cumulonimbus


WWW
« Respuesta #9 : Octubre 25, 2015, 06:16:32 »

El error que yo veo, es que nunca se entra a la configuración que armaste.
Cuando se enciende en PIC, el mismo arranca con un vector de reset ,o sea, el CP va a la posición de memoria (de programa) 0x00. Ahí mismo el CP encuentra un GOTO INICIO y salta toda la configuración. En la parte INICIO no se va a la configuración, por lo tanto, el PIC queda configurado con los valores predefinidos en un RESET.

Una pregunta ¿Por qué comenzas con la posición 0x25? debería ser 0x05.
Te recomiendo esto:

Código:
list p=16f887 ; list directive to define processor
#include <p16f887.inc> ; processor specific variable definitions

__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

CounterB EQU   0X021
CounterA EQU   0X022
CounterC EQU   0X023



ORG 0X00
         
GOTO CONFIG         
   
ORG  0X05

   
CONFIG BANKSEL OSCCON ; ; SELECCIONO el BANCO 1
MOVLW 0x72 ; ; CONFIGURO OSC INTERNO 4 MHZ
MOVWF OSCCON ;


BANKSEL ANSEL ;SELECCIONO TODOS  PUERTOS DIGITALES
CLRF ANSEL ; altos y bajos
CLRF ANSELH

BANKSEL PORTC ; VOY AL BANCO 1
CLRF PORTC


BANKSEL TRISC ; VOY AL BANCO 1
MOVLW B'00000000' ;Config. PUERTO A SALIDAS
MOVWF TRISC

;BANKSEL CCP2CON
;CLRF  CCP2CON

BANKSEL T1CON
BCF  T1CON,3
                     BANKSEL PORTC
INICIO

MOVLW 0XFF
MOVWF  PORTC
CALL RET
MOVLW 0X00
MOVWF  PORTC
CALL RET
GOTO INICIO

RET
;PIC Time Delay = 1,00001100 s with Osc = 4000000 Hz
movlw D'6'
movwf CounterC
movlw D'19'
movwf CounterB
movlw D'176'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
retlw 0

END
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« Respuesta #10 : Octubre 25, 2015, 07:33:08 »

saludos cordiales.
Comencé con la posición 25 porque me confundí con los registros de propósito general que deben ser después de la 20h y como tengo los counters del retardo en 21,22,y 23h empecé con la programación luego de estos 25h, y si, estos deben ser en la memoria de programa que van luego de 4h vector de interrupciones. (Tienes toda la razón).

Siempre he colocado inicio y luego la configuración de los puertos, me doy cuenta por tus observaciones que el programa pasaba por  la configuración sin necesidad pero así me enseñaron, lo cambiare a futuro en mis programas.
Simplemente agrego otra etiqueta que haga referencia donde comienzo el programa.
He aprendido mucho más de lo que esperaba , ahora me enfrento a aprender a configurar el oscilador que es más complicado que para un 12f508.
muchas gracias por tu tiempo y paciencia,

dejo el codigo como me ha quedado despues de tus observaciones.
Código:
list p=16f887 ; list directive to define processor
#include <p16f887.inc> ; processor specific variable definitions

__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V


;ASIGNACION DE VARIABLES-

CounterB EQU   0X021
CounterA EQU   0X022
CounterC EQU   0X023

;INICIO DEL PROGRAMA

ORG 0X00
         
GOTO MAIN       
   
ORG  0X05

 MAIN 
BANKSEL OSCCON ; ; SELECCIONO el BANCO 1
MOVLW 0x72 ; ; CONFIGURO OSC INTERNO 4 MHZ
MOVWF OSCCON ;


BANKSEL ANSEL ;SELECCIONO TODOS  PUERTOS DIGITALES
CLRF ANSEL ; altos y bajos
CLRF ANSELH

BANKSEL PORTA ; VOY AL BANCO 1
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE


BANKSEL TRISC ; VOY AL BANCO 1
;MOVLW B'00000000' ;Config. PUERTO A SALIDAS
;MOVWF TRISC


CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE

;BANKSEL CCP2CON
;CLRF  CCP2CON

;BANKSEL T1CON
;BCF  T1CON,3
BANKSEL PORTA
INICIO

MOVLW 0XFF
MOVWF  PORTA
CALL RET
MOVLW 0X00
MOVWF  PORTA
CALL RET

BANKSEL PORTB
MOVLW 0XFF
MOVWF  PORTB
CALL RET
MOVLW 0X00
MOVWF  PORTB
CALL RET

MOVLW 0XFF
MOVWF  PORTC
CALL RET
MOVLW 0X00
MOVWF  PORTC
CALL RET

MOVLW 0XFF
MOVWF  PORTD
CALL RET
MOVLW 0X00
MOVWF  PORTD
CALL RET

MOVLW 0XFF
MOVWF  PORTE
CALL RET
MOVLW 0X00
MOVWF  PORTE
CALL RET
GOTO INICIO

RET
;PIC Time Delay = 1,00001100 s with Osc = 4000000 Hz
movlw D'6'
movwf CounterC
movlw D'19'
movwf CounterB
movlw D'176'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
retlw 0

END

un abrazo desde "locombia"
« Última modificación: Octubre 25, 2015, 07:43:04 por johenrod » En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.044 segundos con 25 consultas. (Pretty URLs adds 0.009s, 2q)
loggkey