Autor Tema: Problemas con PORTA pic 18f46k80  (Leído 3067 veces)

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

Desconectado marcelobandini

  • PIC10
  • *
  • Mensajes: 3
Problemas con PORTA pic 18f46k80
« en: 24 de Febrero de 2015, 23:01:46 »
Sres: hace tiempo que programo pics, pero de la linea 16F, en este caso he iniciado con el pic 18F46K80, y configuro el puerto A de la siguiente manera:
    CLRF        PORTA
    CLRF        LATA
    MOVLW    H'03'
    MOVWF    ANCON0
    MOVLW    H'0F'
    MOVWF    TRISA
    BSF         LATA,7
    BSF         LATA,6
    BSF         LATA,5
o sea bits 4..7 salidas, bits 2 y 3 entradas digitales y bits 0 y 1 entradas analógicas.
Todo funciona bien excepto las 2 entradas  digitales, al leer PORTA, me muestra 0 en ambas entradas, pero están con 5V a la entrada.
si a esos 2 bits los configuro como salidas funcionan ok.
Que puede estar pasando?
Gracias por la ayuda que puedan brindarme
Atentamente

Marcelo Bandini

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problemas con PORTA pic 18f46k80
« Respuesta #1 en: 25 de Febrero de 2015, 00:28:33 »
Código: [Seleccionar]
CLRF PORTA ; Initialize PORTA by  clearing output data latches
CLRF LATA ; Alternate method to clear output  data latches

MOVLW 0x0D     ; Configuro entradas A/D AN0 y AN1 (RA0 y RA1) como analogicas lo demas como digitales
MOVWF ADCON1

MOVWF 0x07    ;Configurado para entradas digitales, es decir desconecta los comparadores
MOVWF CMCON

MOVLW 0x0F    ; Configuro bits <4:7> salidas <0:3> entradas
MOVWF TRISA

No se cual es el registro ANCON0

Desconectado marcelobandini

  • PIC10
  • *
  • Mensajes: 3
Re: Problemas con PORTA pic 18f46k80
« Respuesta #2 en: 25 de Febrero de 2015, 09:18:34 »
Primero que nada quiero agradecerte la pronta respuesta.
Paso a contarte lo que he descubierto:
el registro CMCON no existe en este PIC, lo que existe es CM1CON y CM2CON, que siempre se inician a 1 apagando los comparadores.
El registro ANCON0 es uno de los registros del conversor AD y que asignándole 1 en el bit correspondiente selecciona el puerto como analógico
Copio según manual del PIC lo que contempla el ADCON1 y el ANCON0

REGISTER 23-2: ADCON1: A/D CONTROL REGISTER 1
R/W-0       R/W-0     R/W-0  R/W-0  R/W-x  R/W-x  R/W-x  R/W-x
TRIGSEL1 TRIGSEL0 VCFG1 VCFG0 VNCFG CHSN2 CHSN1 CHSN0
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
bit 7-6 TRIGSEL<1:0>: Special Trigger Select bits
11 = Selects the special trigger from the CCP2
10 = Selects the special trigger from the Timer1
01 = Selects the special trigger from the CTMU
00 = Selects the special trigger from the ECCP1
bit 5-4 VCFG<1:0>: A/D VREF+ Configuration bits
11 = Internal VREF+ (4.1V)
10 = Internal VREF+ (2.0V)
01 = External VREF+
00 = AVDD
bit 3 VNCFG: A/D VREF- Configuration bit
1 = External VREF
0 = AVSS
bit 2-0 CHSN<2:0>: Analog Negative Channel Select bits
111 = Channel 07 (AN6)
110 = Channel 06 (AN5)
101 = Channel 05 (AN4)
100 = Channel 04 (AN3)
011 = Channel 03 (AN2)
010 = Channel 02 (AN1)
001 = Channel 01 (AN0)
000 = Channel 00 (AVSS)

REGISTER 23-8: ANCON0: A/D PORT CONFIGURATION REGISTER 0
R/W-1        R/W-1        R/W-1       R/W-1    R/W-1   R/W-1   R/W-1   R/W-1
ANSEL7(1) ANSEL6(1) ANSEL5(1) ANSEL4 ANSEL3 ANSEL2 ANSEL1 ANSEL0
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
bit 7-0 ANSEL<7:0>: Analog Port Configuration bits (AN7 and AN0)(1)
1 = Pin configured as an analog channel: digital input disabled and any inputs read as ‘0’
0 = Pin configured as a digital port
Note 1: AN14 through AN11 and AN7 to AN5 are implemented only on 40/44-pin and 64-pin devices. For 28-pin
devices, the corresponding ANSELx bits are still implemented for these channels, but have no effect.

Esta noche voy a revisar lo del registro BSR ya que por lo que veo el Registro ANCON0 está fuera de la paginación estandar
Te mantendré informado.

Saludos y gracias nuevamente

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problemas con PORTA pic 18f46k80
« Respuesta #3 en: 25 de Febrero de 2015, 13:41:29 »
Si perdon, puse 18F46k80 y no se por que me salio el datasheet del 18F4680 y cambia todo...

Como bien decis viene por ahi:

Citar
Addresses, E41h through F5Fh, are also used by the SFRs, but are not part of the Access RAM. To access these registers, users must always load the proper BSR value.

Asi que o especificas el BSR o podes hacer un acceso indirecto ( FSR y INDF, ya que son de 12 bits y no vas a tener necesidad de cambiar bancos )

Si no me equivoco en ASM para pic18 esta definido ACCESS como 0 y BANKED como 1, sino reemplazalos. Lo que si no recuerdo cual es el default, si es ACCESS o BANKED. Pero imagino que es el ACCESS ( me refiero a default cuando no se especifica )



Opcion 1:

Código: [Seleccionar]
   CLRF        PORTA ,ACCESS     ;access bank
    CLRF        LATA ,ACCESS                 ;access bank
    MOVLB     0x0F                          ;Cargo el valor del banco
    MOVLW    H'03'        
    MOVWF    ANCON0 ,BANKED         ; Uso el banco
    MOVLW    H'0F'
    MOVWF    TRISA ,ACCESS            ;Access bank
    BSF         LATA ,7 ,ACCESS
    BSF         LATA ,6 ,ACCESS
    BSF         LATA ,5 ,ACCESS



o podes usar registro indirecto como dije

Opcion 2:

Código: [Seleccionar]
   CLRF        PORTA ,ACCESS     ;access bank
    CLRF        LATA ,ACCESS                 ;access bank
    LFSR        0,ANCON0             ; cargo la direccion de ANCON0 en FSR0
    MOVLW    H'03'        
    MOVWF    INDF0 ,ACCESS         ; No uso el banco, sin o sigo usando el access RAM
    MOVLW    H'0F'
    MOVWF    TRISA ,ACCESS            ;Access bank
    BSF         LATA ,7 ,ACCESS
    BSF         LATA ,6 ,ACCESS
    BSF         LATA ,5 ,ACCESS



Opcion 3:

Por ultimo y menos intuitivo podrias cargar el FSR2 con 0xF00 ( si no lo usas ) de esa forma podes acceder desde 0xF00 a 0xFFF utilizando el ACCESS (no cubre todos los regisrtos pero en su mayoria), ya que cuando es menos a 0x060 la direccion que va por que el opcode termina usandose un offset entre FSR2+8bit opcode, si quisieras acceder a 0xF50 quedaria asi (FSR2 = 0xF00 y opcode= 0x50 ) lo cual se sumaria y daria el acceso como si fuera al Access RAM. por otra parte si es mayor a 0x60 se manejaria comunmente. Explicacion en 6.6.2 y 6.6.3 del datasheet



Creo que la principal diferencia con los PIC16F es eso... es el cambio de las instrucciones que permiten el trabajo con el ACCESS RAM (una seccion ) / Toda la RAM con bancos / o en fin usar registros indirectos.
Hay algunas cosas buenas con el registro indirecto como que si estan todos seguidos directametne escribis en POSTINC0 (en ves de INDF0) y solo se incrementa FSR0. Tambien tenes PREINC0, y otros mas

Por ejemplo si apuntas a LATG lo unico que haces es cargar valores en POSTINC0 y vas llenando todos los LATx , al igual que los PORTx


Es todo lo que puedo aportar.
« Última modificación: 25 de Febrero de 2015, 14:27:38 por KILLERJC »

Desconectado marcelobandini

  • PIC10
  • *
  • Mensajes: 3
Re: Problemas con PORTA pic 18f46k80
« Respuesta #4 en: 26 de Febrero de 2015, 10:23:14 »
Funcionó Perfecto, tan simple y tan difícil de encontrar como eso.

Muchas gracias

Un Abrazo