Autor Tema: PBPro+PCF8575 no le hago funcionar  (Leído 1735 veces)

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

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
PBPro+PCF8575 no le hago funcionar
« en: 16 de Noviembre de 2004, 10:20:00 »
A ver si hay alguien que haya funcionado con este dispositivo, ya que me vuelvo loco y no consigo conmutar las salidas.

Estoy usando un 877A vía I2C para escribir en los puertos de un PCF8575 (expansor de 16 puertos).

Estas son las definiciones de los pin y defines:

"*****************************
"*        DEFINE             *
"*****************************

"Define   LOADER_USED   1   "Se usa bootloader
DEFINE    OSC      20      " Ajuste de la frecuencia del oscilador en 20MHz
DEFINE    SER2_BITS   8   "Ajusto la transmision a 8 bits sin paridad
DEFINE  NO_CLRWDT 1     "desactivo CLRWD automatico
define  CHAR_PACING 1000 "Tiempo entre caracteres de la puerta serie 1ms
DEFINE I2C_SLOW 1       "Reloj SCL a 100KHz con oscilador a 20MHz

"Ajustes del display LCD
DEFINE LCD_DREG PORTD  " Ajusto el puerto para datos D
"DEFINE LCD_DBIT 4  " Ajusta el bit de inicio (0 o 4) si el bus es de 4 bits
DEFINE LCD_RSREG PORTA  " Ajusta el puerto para el RS del LCD
DEFINE LCD_RSBIT 2 " Ajusto el bit de RS dentro del puerto elegido
DEFINE LCD_EREG PORTA " Ajusto el puerto para Enable
DEFINE LCD_EBIT 0  " Ajusto el bit Enable dentro del puerto elegido
DEFINE LCD_RWREG PORTA " LCD read/write pin port
DEFINE LCD_RWBIT 1 " LCD read/write pin bit
"DEFINE LCD_RWREG PORTA " Ajusto el puerto del pin R/W del LCD
"DEFINE LCD_RWBIT 1 " Ajusto el pin del puerto para usar R/W del LCD
DEFINE LCD_BITS 8 " Ajusto el tamaño del bus (4 o 8 bits)
DEFINE LCD_LINES 2 " Ajusto el numero de lineas del LCD
DEFINE LCD_COMMANDUS 2000 " Ajusto el retardo de los comandos en microsegundos
DEFINE LCD_DATAUS 50 " Ajusto retardo de los datos en microsegundos


"** FIN DE DEFINE


"DEFINICION DE CONSTANTES

transmito    con  1  "constante usada para conmutar la transmision/recepcion
recibo       con  0  " "    "            
apagado      con  0  "constante para apagar los led
encendido    con  1  "constante para encender los led
                 

"DEFINICION DE VARIABLES
 SDA        var    PORTC.4  "Data I2C
 SCL        var    PORTC.3  "Clock I2C
 LEDROJO    var    PORTE.0  "Led rojo
 LEDVERDE   var    PORTE.1  "Led verde
 tempo8     var    byte  "Variable temporal tipo byte
 tempo16    var    word  "Variable temporal tipo Word
 i          var    word   "Variable temporal tipo Word
 i2         var    byte   "Variable temporal tipo byte

 
"DEFINICION DE LOS PINES DE ENTRADA/SALIDA.

ADCON1 = 7     "PORTA y PORTE como I/O digitales
OPTION_REG.7=0  "activo las resistencias pull up del puerto B

TRISA=%00000000   "Los pin PORTA son salidas
TRISB=%01110000   "Los pin (PORTB.4, 5 y 6) son entradas.
TRISC=%10000000   "Los pin (PORTC.7) son entradas.
TRISD=%00000000   "Todos los pin salidas.
TRISE=%00000000   "Todos los pin salidas.

El cuerpo principal del programa es el siguiente:

while 1
    I=i+1
   
    ledrojo= ~ledrojo
    for tempo16=1 to 500
        pause 1
    next tempo16
   
    gosub visualizar
    gosub escribir_PCF
    "Pause 5
    "Gosub  escribir_PCF
    "U9 tiene A0 A1 A2 --> 1 0 1



 wend

"*************************************************************************
"** SUBRUTINA: escribir_PCF
"** escribe  uno de los expansores de bus
"*************************************************************************


escribir_PCF:
    i2=i2+1
    i2cwrite SDA, SCL,%01001010, [i2,i2]
    Return
   
"** FIN SUBRUTINA: escribir_PCF


"*************************************************************************
"** SUBRUTINA: visualizar
"** escribe en el display LCD
"*************************************************************************


visualizar:
    lcdout $FE,$C0
    lcdout dec i," ",bin8 i2
    Return
   
"** FIN SUBRUTINA: visualizar


   
 

El display y los LED me funcionan bien. Pero no consigo escribir en el PCF8575.

Según el PDF del datasheet la palabra de control es 0 1 0 0 A2 A1 A0 0
Las direcciones hardware del dispositivo las tengo así:

A2 a +5
A1 a GND
A0 a +5 (las he medido con el polímetro)
 

No se si estoy pasando algo por alto

Se agradece cualquier ayuda.

Saludos
Ricky

 

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: PBPro+PCF8575 no le hago funcionar
« Respuesta #1 en: 16 de Noviembre de 2004, 12:31:00 »
Pana Ricky, la señalizacion de control no deberia de ser 01000000 ??
Un abrazo pana

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: PBPro+PCF8575 no le hago funcionar
« Respuesta #2 en: 16 de Noviembre de 2004, 14:25:00 »
Hola Ricky:

O las has puesto por fuera o no tienes pull ups en las lineas de sda y scl....puesto que la habilitacion de los pull ups solo es para port b y tus lieas no salen por portB


otra esa variable i2c=i2c+1 ...no le has dado valor inicial ...0 o 1 y porque motivo la mandas a escribir 2 veces???sera igual las dos veces...... 11  2 2  lo que interpreto que tu comando envia la palabra de control que a mi modesto entender esta bien y una repeticion del mismo numero .....

pero fijate en lpos pull ups

saludos

khasistos


Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: PBPro+PCF8575 no le hago funcionar
« Respuesta #3 en: 16 de Noviembre de 2004, 17:05:00 »
Hola muchachos,

Gracias por vuestra rápida respuesta.

La palabra de control es la siguiente: 01001010

0100 lo dice el DS del fabricante.
101 mi hardware lo impone así  A2 A1 A0
0  para escribir
 Así que deduzco que la palabra está bien.
--------------------------
Las pull up las tengo puestas, primero puse unas de 4K7 y no contento con eso miré la señal en un osciloscopio y las cambié por 2K. Sale una señal mucho más cuadrada con 2K. Lo recomiendo para velocidades altas del bus.

La inicialización de la variable i2 si la hago pero por algún motivo no se ha copiado la linea.

Por otra parte lo de mandarle 2 veces la misma variable es simplemente porque como tiene 16 salidas yo tengo que enviarle 2 bytes para poner las salidas como quiera y en principio esto es una prueba yo solo quiero ver como varían con un contador que vaya aumentando. En el display veo como la variable i2 va cambiando pero no en las salidas del expansor. He probado a 100KHz y a 400KHz, pero de ningún modo va. He mirado con el osciloscopio y la señal llega a los pines del expansor. No se si se me escapa algo por soft o es que la pieza estará rota. La he soldado con un soldador de baja potencia y con mucho mimo, pero quien sabe.

Saludos panas y gracias por la ayuda.

Ricky

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: PBPro+PCF8575 no le hago funcionar
« Respuesta #4 en: 16 de Noviembre de 2004, 17:40:00 »
HOLA RICKY:

obviamente si chekeaste las sda y scl ,chekeaste que envie la palabra de control?? la puedes llegar a ver como un tren de pulsos...

baja la velocidad del contador o dejala fija con un dato determinado.....

tal vez este esperando el bit de confirmacion de recepcion creo llamado ack por eso te digo que mandes la config y UN solo dato...y fijate si hay salidas no sigas incrementando la variable.....

 no recurerdo bien pero habia dos formas una ignorando el ACK y otra con recepcion del ack si no no enviaba o no se producia la comunicacion chekea esas cosas ricky.

saludos

khasistos


 

anything