Autor Tema: Problema con el expansor 8-bits PCF8574  (Leído 2167 veces)

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

Desconectado xabibix

  • PIC10
  • *
  • Mensajes: 5
Problema con el expansor 8-bits PCF8574
« en: 07 de Febrero de 2006, 17:28:00 »
He construido un circuito con 4 expansores de 8-bits "PCF8574", dos como entradas y los otros dos como salidas, quiero comunicar todos lo PCF8574 con el bus I2C por medio del pic 16f84a, mi problema es el siguiente,al pulsar uno de los  interruptores de entrada del expansor (PCF8574_DireccionLectura1) obtengo la salida del (PCF8574_DireccionEscritura1), pero no obtengo nada en la salida  (PCF8574_DireccionEscritura2), cuando pulso los interruptores del (PCF8574_DireccionLectura2).

Me podriais ayudar?

Muchas Gracias.

El programa es el siguiente:

;************************************ BOTONERA I2C.asm *****************************



; ZONA DE DATOS **********************************************************************

   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   LIST      P=16F84A
   INCLUDE   <P16F84A.INC>

   CBLOCK  0x0C
   Dato
   ENDC

PCF8574_DireccionLectura1   EQU   b"01110001"
PCF8574_DireccionEscritura1   EQU   b"01110010"
PCF8574_DireccionLectura2   EQU   b"01110101"
PCF8574_DireccionEscritura2   EQU   b"01111110"

#DEFINE  PCB8574_INT   PORTB,0      
            
; ZONA DE CÓDIGOS ********************************************************************

   ORG    0
   goto   Inicio
   ORG   4
   goto   ServicioInterrupcion
Inicio
   bsf   STATUS,RP0      
   bsf   PCB8574_INT       
   bcf   OPTION_REG,INTEDG      
   bcf   STATUS,RP0      
   call   ServicioInterrupcion      
   movlw   b"10010000"         
   movwf   INTCON
Principal
   sleep            
   goto   Principal

; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
; Lee los interruptores conectados al PCF8574 que actúa como entrada y el resultado lo visualiza
; en los diodos LEDs conectados al PCF8574 configurado como salida.

ServicioInterrupcion
   call   Retardo_20ms      
   call   PCF8574_Lee1      entrada.
   movwf   Dato
   comf   Dato,W
   call   PCF8574_Escribe1      
   call   Retardo_20ms      
   call   PCF8574_Lee2      
   movwf   Dato
   comf   Dato,W
   call   PCF8574_Escribe2      
   bcf   INTCON,INTF      
   retfie

   INCLUDE  <BUS_I2C.INC>
   INCLUDE  <PCF8574(4).INC>   
   INCLUDE  <RETARDOS.INC>
   END

;**************************** Librería "PCF8574(4).INC" **********************************


   CBLOCK
   PCF8574_Dato         dato leído o que
   ENDC            



PCF8574_Lee1
   call   I2C_EnviaStart      
   movlw   PCF8574_DireccionLectura1   
   call   I2C_EnviaByte
   bsf   I2C_UltimoByteLeer
   call   I2C_LeeByte      
   movwf   PCF8574_Dato      
   call   I2C_EnviaStop      
   movf   PCF8574_Dato,W      
   return



PCF8574_Escribe1
   movwf   PCF8574_Dato      
   call   I2C_EnviaStart      
   movlw   PCF8574_DireccionEscritura1   
   call   I2C_EnviaByte
   movf   PCF8574_Dato,W      
   call   I2C_EnviaByte      
   call   I2C_EnviaStop      
   movf   PCF8574_Dato,W      
   return

PCF8574_Lee2
   call   I2C_EnviaStart      
   movlw   PCF8574_DireccionLectura2   
   call   I2C_EnviaByte
   bsf   I2C_UltimoByteLeer
   call   I2C_LeeByte      
   movwf   PCF8574_Dato      
   call   I2C_EnviaStop      
   movf   PCF8574_Dato,W      
   return

PCF8574_Escribe2
   call   I2C_EnviaStart      
   movlw   PCF8574_DireccionEscritura2   
   call   I2C_EnviaByte
   bsf   I2C_UltimoByteLeer
   call   I2C_LeeByte      
   movwf   PCF8574_Dato      
   call   I2C_EnviaStop      
   movf   PCF8574_Dato,W      
   return








Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Problema con el expansor 8-bits PCF8574
« Respuesta #1 en: 07 de Febrero de 2006, 19:47:00 »
Has probado el hardware por separado?

Has debugueado la posibilidad de que no estes direccionando todos los dispositivos i2C? El ic2 te permite verificar si recibiste o no un acknowledge.  Si no lo recibiste entonces no direccionaste bien el pic o tienes problema en el hardware.

Te aconsejo que empieces por ahi.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Picavid

  • PIC12
  • **
  • Mensajes: 89
    • www.seguridomo.es
RE: Problema con el expansor 8-bits PCF8574
« Respuesta #2 en: 21 de Febrero de 2006, 01:15:00 »
Hola xabibix,

  Aunque soy novato, a mí me paso algo parecido, y me dio mucho por .....
  Prueba con lo siguiente:
 - Activa las resistencias de pull-up (creo que esto no es necesario, pero yo lo tengo puesto asíGiño: bcf    OPTION_REG,NOT_RBPU
- Por que llamas al servicio de interrupcion desde Inicio, ya ira solo.
- En los sub de PCF8574_Lee1, ......, direcciona directamente desde ahí:
      movlw     b"01000001". Esto a mi me fastidió mucho y no se porque.
- Luego he visto que en tus direccionamentos, pones: b"0111xxxx". Teoricamente, esta direccion es para el PCF8574a, para el normal es b"0100xxxx"

Supongo que las librerias de i2c las tienes bien (deben ser las del libro del PIC16F84 no?)

  Espero que te funcione. Un Saludo.

Desconectado pepemarchena

  • PIC10
  • *
  • Mensajes: 10
Re: RE: Problema con el expansor 8-bits PCF8574
« Respuesta #3 en: 25 de Agosto de 2008, 14:27:59 »
hOLA

Bien, yolo estoy intentando en CSS con el PIC 18f2550. He montado un  PCF8574 como entrada ADR001 , y otro como salida ADR:000.
Efectuo la lectura del primero y lo escribo en el segundo. Todo va bien hasta que pongo PB7 del expansor de entradas a cero. No se por que pero cuando he efectuado la lectura y se va ha realizar la escritura el programa se pierde. Lo he montado y simulado y en ambos casos de pierde.
Si tienes alguna sugerencia
tomasgarcia57@hotmail.com
Saludos
He probado por SW y por HW. (Cual es la diferencia)