Autor Tema: Una manito por favor  (Leído 49132 veces)

0 Usuarios y 10 Visitantes están viendo este tema.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #30 en: 12 de Mayo de 2009, 01:56:45 »
Muy chulo Marvic.

Que LEDs usaste? chorro o normal? La fuente de los LEDs es por aparte o dejaste los mismos 5v?

Gracias MLO, use de chorro, por ahora la fuente está toda a 5V, pero voy a usar la de un Playstation 2 que tiene 8.5V a 4.2A, y bien económicas que son $20.000  :-/....
Me falta implementar la memoria, el RTC y el teclado PS2, creo que me voy a llevar más tiempo, pero bueno..es un reto que quiero cumplir.

Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Una manito por favor
« Respuesta #31 en: 12 de Mayo de 2009, 01:58:40 »
20k!!!!

Que tamaño tienen?
El papel lo aguanta todo

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #32 en: 12 de Mayo de 2009, 02:05:16 »
20k!!!!

Que tamaño tienen?


12cms X 5,5cms X 2,5cms (largo x ancho x alto) y es de 8,5Vdc a 4,5A..la puedes conseguir en los Sanadresitos, el precio está entre los 20K y 25K (unos US$10) y para este propósito apenas es  :mrgreen:

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #33 en: 12 de Mayo de 2009, 05:05:55 »
La verdad que te ha quedado "belisísima"!!!
Te felicito muchísimo. Y la verdad que ha sido un honor explicarte, porque has aprendido rápido y te has preocupado por entenderlo  y dedicarle tiempo..

Con respecto a la memoria, si estás usando codigo ASCII para almacenar los datos, sí, podés ir guardando caracter x caracter y luego ir leyendolos. Yo personalmente prefiero hacer un buffer más, para ir leyendo la memoria e ir volcando al buffer en el PIC, como para siempre tener datos rapido sin peligros de tener que esperar al I2C o algo.

Mi primer cartel tenía 2 buffers para visualizar, y un tercer buffer para ir leyendo y tomando los datos de la I2C.

He hecho un ejemplo para la 24LC256 acá en el foro. Buscalo en el almacen del assembler, o bien entrando a mi perfil y buscando los temas creados por mi(esta mal, dice mostrar los ultimos IR o algo asi)

Un saludo y felicitaciones!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #34 en: 12 de Mayo de 2009, 13:59:22 »
La verdad que te ha quedado "belisísima"!!!
Te felicito muchísimo. Y la verdad que ha sido un honor explicarte, porque has aprendido rápido y te has preocupado por entenderlo  y dedicarle tiempo..

Con respecto a la memoria, si estás usando codigo ASCII para almacenar los datos, sí, podés ir guardando caracter x caracter y luego ir leyendolos. Yo personalmente prefiero hacer un buffer más, para ir leyendo la memoria e ir volcando al buffer en el PIC, como para siempre tener datos rapido sin peligros de tener que esperar al I2C o algo.

Mi primer cartel tenía 2 buffers para visualizar, y un tercer buffer para ir leyendo y tomando los datos de la I2C.

He hecho un ejemplo para la 24LC256 acá en el foro. Buscalo en el almacen del assembler, o bien entrando a mi perfil y buscando los temas creados por mi(esta mal, dice mostrar los ultimos IR o algo asi)

Un saludo y felicitaciones!

Gracias BrunoF por tus palabras, me motivan más a seguir subiendo en conocimientos.
Y si, ya había leído el post donde está el ejemplo del I2C...ahora mi pregunta es , si en el mismo bus puedo poner el RTC y la memoria 24LC256, es que recuerdo haber leído qeu solo se podía poner una de estas en un bus, pero no se si se podrá conectar adicional con un DS1307...y de nuevo mil gracias por tus ejemplos y compartirlos con todos..

Y hablando de compartir, hice una tabla en excel  para crear  caracteres y otras cositas más en una matrix de 8x8, cuando seleccionas los puntos que formaran el caracter o el gráfico y le pones 1 para indicar que encienden y el solo te genera la cadena de hex para que se agregue a los RETLW o DT

por ejemplo:
 una copa de cocktail(se escribe así? )





Los hex que genera son de las columnas y la primera fila es el bit más bajo, si a alguien le interesa lo subo y si quieren que le agregue algo más me pueden decir y cuando tenga un tiempito lo hago y lo subo.

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #35 en: 12 de Mayo de 2009, 14:28:41 »
Y si, ya había leído el post donde está el ejemplo del I2C...ahora mi pregunta es , si en el mismo bus puedo poner el RTC y la memoria 24LC256, es que recuerdo haber leído qeu solo se podía poner una de estas en un bus, pero no se si se podrá conectar adicional con un DS1307...y de nuevo mil gracias por tus ejemplos y compartirlos con todos..

Hace rato que no toco el I2C, pero según recuerdo no hay problemas en usar lo que comentás. Cada uno de los que mencionaste debe tener un ID único seguramente. Aún así podés conectar hasta 8 dispositivos con el mísmo ID utilizando el mismo bus I2C.

Y hablando de compartir, hice una tabla en excel  para crear  caracteres y otras cositas más en una matrix de 8x8, cuando seleccionas los puntos que formaran el caracter o el gráfico y le pones 1 para indicar que encienden y el solo te genera la cadena de hex para que se agregue a los RETLW o DT
...
Los hex que genera son de las columnas y la primera fila es el bit más bajo, si a alguien le interesa lo subo y si quieren que le agregue algo más me pueden decir y cuando tenga un tiempito lo hago y lo subo.

Siempre viene bien una herramienta más de edicion. Gracias.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Una manito por favor
« Respuesta #36 en: 12 de Mayo de 2009, 14:37:19 »
marvicdigital  felicidades ....muy bueno el letrero esperamos verlo completo muy pronto jejejeje :mrgreen:

te cuento que yo utilice la eeprom 24lc256 y el ds1307 en el mismo bus sin ningun problema

Saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Una manito por favor
« Respuesta #37 en: 12 de Mayo de 2009, 15:26:53 »
 :-/ Muy buen trabajo el que estas desarrollando marvicdigital, y también felicitaciones al profe BrunoF  :mrgreen:

Con el bus I2C puedes conectar varios dispositivos, el formato de comunicación envia un primer byte indicando la dirección y si se desea escribir o leer el dispositivo esclavo. Aquí un tutorial sobre dicho bus...
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #38 en: 12 de Mayo de 2009, 17:46:45 »
Impresionante, este foro es de lo mejor que existe hoy en día en este mundo de los microcontroladores,   :-) Suky, muchas gracias por ese PDF que me viene muy bien, y también he leído mucho tus explicaciones sobre ASM ..mil gracias.. y a jmcs87, gracias por compartir su experiencia con este par de juguetes  :mrgreen:  y bueno al profe, BrunoF, que siempre está al pie del cañón para cualquier ayuda, el archivo de excel lo quiero mejorar un poco, dando también los Hex de las filas, ya que he leído varios post donde usan las filas...espero poderlo subir esta semana y si no pues subo el que hay por ahora...

Saludos y de nuevo mil gracias  :-/

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #39 en: 14 de Mayo de 2009, 01:20:11 »
Hola de nuevo.
Bueno después de un día completo de leer la teoría de I2C, el datasheet de la 24LC256, y el código ejemplo de BrunoF, me lancé hacer el código para implementarlo en este pasamensajes, inicialmente programe con código ascii  los primeros bytes, con el PIckitV2 el programa, luego implementé la rutina para que fueran leídos aleatoriamente por el uC tal y como muestra la sigueinte imagen del datasheet de la 24LC256:



Entonces hice lo siguiente:

1.  llamo la rutina del Bit Start
2.  cargo el registro I2C_data con la configuración, en mi caso sería "10100000"  como el acceso es aleatorio el último bit debe ser 0

3.  Envío el dato por el puerto I2C
4.  Luego el ACK
5.  Envío la Dirección alta de la memoria, en mi caso  hice un CLRF  Haddeeprom
6.  Luego de enviar hago un ACK con SENDACK
7.  Repito pasos 5 y 6 para la direccion baja de la memoria osea hago un CLRF  Laddeeprom y envío
7.  Vuelvo y envío el BIT DE START
8.  Envió el byte de control pero el primer bit está en 1  osea "10100001"
9.  Envío ese byte por  el puerto serial
10.  Luego ACK
11. Recibo el dato
12. Y doy el bit de stop.
13. El byte leído lo grabo en un registro buffer y lo llevo a la pantalla

me guié por la imagen que está en el datasheet.



Se supone que debería mostrarme el caracter del hexadecimal que está en la eeprom, pero se me queda bloqueado el PIC, si lo reinicio me muestra otra cosa, o pasan cosas raras en los leds, como el programa no esta depurado pues ya voy por encima de las 2K de memoria por eso he usado PAGESELW  para evitar porblemas con el PClath, pero no se si debo hacerlo asi o de otra forma..o si el problema está en el modo de usar el I2C por que si pongo el buffer con un valor constante y me salto  los pasos para la lectura de la memoria I2C me muestra el caracter bien...

Este es el bloque donde hago los pasos para leer aleatoriamente los datos de la memoria 24LC256

Código: [Seleccionar]
LEER_EEPROM
      CLRF             HADDEEPROM
      CLRF              LADDEEPROM
LOOP_EE
         CLRF         IC2DATA                                ;BUFFER 1
CLRF         PALABRA                         ;BUFFER 2 QUE ES EL LEE LA RUTINA DE PANTALLA                                   
PAGESELW CONFIG_TRANSMISION_I2C
CALL         CONFIG_TRANSMISION_I2C
PAGESELW BIT_START_I2C
CALL         BIT_START_I2C
MOVLW          B'10100000'                   ;BYTE CONTROL
PAGESELW TRANSMITIR_DATO_I2C
CALL         TRANSMITIR_DATO_I2C
PAGESELW         I2C_SENDACK
CALL         I2C_SENDACK
MOVF          HADDEEPROM,W             ;DIRECCION ALTA
PAGESELW TRANSMITIR_DATO_I2C
CALL         TRANSMITIR_DATO_I2C
PAGESELW I2C_SENDACK
CALL         I2C_SENDACK
MOVF         LADDEEPROM,W
PAGESELW TRANSMITIR_DATO_I2C
CALL         TRANSMITIR_DATO_I2C
PAGESELW I2C_SENDACK
CALL         I2C_SENDACK
PAGESELW RESTART_I2C
CALL         RESTART_I2C
PAGESELW BIT_START_I2C
CALL         BIT_START_I2C
  MOVLW         B'10100001'                    ;ENVÍO EL CONTROL BYTE PERO CON 1
PAGESELW TRANSMITIR_DATO_I2C
CALL         TRANSMITIR_DATO_I2C
PAGESELW I2C_SENDACK
CALL         I2C_SENDACK
PAGESELW RECIBIR_DATO_I2C
  CALL         RECIBIR_DATO_I2C
PAGESELW BIT_STOP_I2C
CALL         BIT_STOP_I2C
MOVF        IC2DATA,W
;MOVLW         .65                              ;para hacer pruebas retiro el ";" y funciona bien
MOVWF         PALABRA                              ;con el valor constante .65
MOVLW          .32                             ;esta resta es para la tabla con los hex en ascii
SUBWF          PALABRA,F
NOP
PAGESELW SIGUIENTE_FASE
CALL                 SIGUIENTE_FASE                  ;siguiente fase es el bloque donde muestro PALABRA en pantalla
PAGESELW ESPACIOS_BLANCO
CALL         ESPACIOS_BLANCO              ;luego de mostrar la letra A le sumo espacios en blanco a la derecha
  GOTO         LEER_EEPROM

  INCLUDE  I2C.INC

Y este es el I2C.INC

Código: [Seleccionar]
CONFIG_TRANSMISION_I2C
      BSF        STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
      BSF        TRISC,4
      BSF        TRISC,3
      MOVLW .2
      MOVWF SSPADD ; CARGAS 02H EN EL REGISTRO SSPADD LA VELOCIDAD DE
      CLRF         SSPSTAT ;TRANSMISION SERA DE 333 KHZ con 4MHZ en el X-tal
      BCF         STATUS,RP0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
      MOVLW      B'00101000'
      MOVWF SSPCON ; PERMITES LA CONFIGURACION SERIE DE LOS PINES SDA Y SCL.
      CLRF PIR1
      PAGESELW I2C_IDLE
      CALL         I2C_IDLE
      RETURN

BIT_START_I2C
      PAGESELW I2C_IDLE
      CALL         I2C_IDLE
      BSF         STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
      BSF         SSPCON2,SEN
      BTFSC         SSPCON2,SEN
      GOTO          $-1 ; LANZAMOS EL BIT DE START.
       BCF         STATUS,RP0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
       BTFSS PIR1,SSPIF
       GOTO $-1
       BCF         PIR1,SSPIF
       RETURN
TRANSMITIR_DATO_I2C
      MOVWF IC2DATA
       BCF         FLAGEE,0
;PAGESELW I2C_IDLE
       CALL         I2C_IDLE
        MOVF IC2DATA,W
        MOVWF SSPBUF ; TRANSMITIMOS EL DATO AL ESCLAVO
         BSF      STATUS,RP0      ;BANCO 1
        BTFSC        SSPSTAT,R_W      ;ESPERAR A QUE TERMINE EL ENVIO
        GOTO       $-1
        BTFSS      SSPCON2,ACKSTAT    ;CHECKEAR ACK
        GOTO      OKACK
        BSF        SSPCON2,PEN      ;ERROR ACK. ENVIAR STOP
        BCF      STATUS,RP0      ;BANCO 0
       RETURN                ;VOLVER CON FLAG= 0 ERROR

OKACK   
        BCF      STATUS,RP0      ;BANCO 0
BTFSS      PIR1,SSPIF      ;ESPERAR FINALIZACION DEL NOVENO CLOCK
GOTO      $-1
BCF      PIR1,SSPIF
BSF      FLAGEE,0         
RETURN
RECIBIR_DATO_I2C
PAGESELW I2C_IDLE
CALL I2C_IDLE
  BCF PIR1,SSPIF
  BSF STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
  BSF SSPCON2,RCEN
BTFSC SSPCON2,RCEN
GOTO $-1
BTFSS SSPSTAT,BF ;PERMITO LA RECEPCION DE DATOS
GOTO $-1
BCF         STATUS,RP0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
MOVF SSPBUF,W
MOVWF IC2DATA
RETURN
BIT_STOP_I2C

  BSF STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
  BSF SSPCON2,PEN
  BCF STATUS,RP0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
  RETURN
RESTART_I2C

  BSF STATUS,RP0
  BSF SSPCON2,RSEN
  BTFSC SSPCON2,RSEN
  GOTO $-1
  BCF STATUS,RP0
VOLVER
          RETURN

I2C_IDLE

   BSF      STATUS,RP0      ;BANCO 1
   BTFSC        SSPSTAT,R_W
   GOTO        $-1

   MOVF        SSPCON2,W
   ANDLW        0X1F
   BTFSS        STATUS,Z
   GOTO        $-3

   BCF      STATUS,RP0      ;BANCO 0
   RETURN
I2C_SENDACK
BSF      STATUS,RP0      ;BANCO 1
  BCF        SSPCON2,ACKDT
    BSF        SSPCON2,ACKEN
    BCF      STATUS,RP0      ;BANCO 0
    RETURN

I2C_SENDNACK
BSF      STATUS,RP0      ;BANCO 1
    BSF       SSPCON2,ACKDT
    BSF       SSPCON2,ACKEN
    BCF      STATUS,RP0      ;BANCO 0
  RETURN

La verdad es que ahora estoy muy agotado, y mi cabeza no quiere analizar muy bien en donde tengo el error, por eso recurro a los más expertos y me den una pista de ver que hago mal....una última cosita, estas lineas están por encima de las 2k de memoria, por si sirve de ayuda  :?

Bueno muchas gracias y saludos.





Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #40 en: 14 de Mayo de 2009, 01:39:01 »
Hola.

No entré en detalle en el código, pero si mal no recuerdo y por lo que estoy mirando(nuevamente) en el gráfico que posteas, los ACK y NACK son enviados por la memoria, no por el uC. Si estás mandandolos vos, estás pegandole una linda mareada al bus IC2.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Una manito por favor
« Respuesta #41 en: 14 de Mayo de 2009, 04:18:45 »
Hola.

No entré en detalle en el código, pero si mal no recuerdo y por lo que estoy mirando(nuevamente) en el gráfico que posteas, los ACK y NACK son enviados por la memoria, no por el uC. Si estás mandandolos vos, estás pegandole una linda mareada al bus IC2.

Saludos.

Exacto, tu le envias el dato a la memoria, y si esta todo correcto te devuelve el ack.
« Última modificación: 07 de Julio de 2009, 12:49:24 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #42 en: 14 de Mayo de 2009, 09:24:37 »
Gracias por la aclaración, víctima del cansancio  :mrgreen:
Gracias Suky por el archivo  :-)
Ya rectifiqué y sigo con el mismo problema, no puedo leer el primer byte en la dirección 0 , estuve leyendo otros post incluyendo el que creo BrunoF y modifiqué mi rutina con la información de groundman ; rutina; que fue la que le funcionó y sigo sin poder leer bien el primer byte. Dejo el código para ver si me hechan una manito, que estoy ya algo aburrido de ver que no me funciona y que se que no veo el error  :x :? :(

Código: [Seleccionar]
LEER_EEPROM
PAGESELW CONFIG_TRANSMISION_I2C
CALL         CONFIG_TRANSMISION_I2C
CLRF         HADDEEPROM                             ;DIRECCIÓN Y LECTURA DE LA MEMORIA EEPROM
CLRF         LADDEEPROM
LOOP_EE
        CLRF                 IC2DATA
CLRF                 PALABRA
PAGESELW         BIT_START_I2C
CALL                 BIT_START_I2C
MOVLW         B'10100000'
PAGESELW         TRANSMITIR_DATO_I2C
CALL                 TRANSMITIR_DATO_I2C
MOVF         HADDEEPROM,W
PAGESELW         TRANSMITIR_DATO_I2C
CALL                 TRANSMITIR_DATO_I2C
MOVF         LADDEEPROM,W
PAGESELW         TRANSMITIR_DATO_I2C
CALL                 TRANSMITIR_DATO_I2C
PAGESEL         RESTART_I2C
CALL                 RESTART_I2C
MOVLW         B'10100001'
PAGESELW         TRANSMITIR_DATO_I2C
CALL                 TRANSMITIR_DATO_I2C
PAGESELW         RECIBIR_DATO_I2C
CALL                 RECIBIR_DATO_I2C
CALL              I2C_SENDNACK
    CALL              BIT_STOP_I2C
MOVF         IC2DATA,W              ;EL IC2DATA NO RETORNA CON EL VALOR DE LA PRIMERA MEMORIA
;MOVLW         .65                           ;SI HABILITO ESTA LINEA ME MUESTRA EL CARACTER A LA PANTALLA
MOVWF         PALABRA                           ;UNA Y OTRA VEZ, CADA VEZ QUE PASA POR ACÁ
MOVLW         .32
SUBWF         PALABRA,F
NOP
PAGESELW         SIGUIENTE_FASE
CALL                 SIGUIENTE_FASE       ;RUTINA DE MUESTRA DE PANTALLA
PAGESELW         ESPACIOS_BLANCO
CALL                 ESPACIOS_BLANCO   ;ROTA EL CARACTER HASTA DESAPARECER DE LA PANTALLA
GOTO         LOOP_EE                   ;VUELVO A MOSTRAR   


Y este es el I2C.inc  modificado con la información de groundman:

Código: [Seleccionar]
CONFIG_TRANSMISION_I2C
MOVLW      B'00101000'
MOVWF         SSPCON
BSF                 STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
BSF                 TRISC,4
BSF                 TRISC,3
MOVLW         .9
MOVWF        SSPADD ; CARGAS 02H EN EL REGISTRO SSPADD LA VELOCIDAD DE
CLRF                SSPSTAT ;TRANSMISION SERA DE 333 KHZ
BCF                STATUS,RP0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
CLRF                PIR1
PAGESEL        I2C_IDLE
CALL                I2C_IDLE
RETURN                   ; PERMITES LA CONFIGURACION SERIE DE LOS PINES SDA Y SCL.

BIT_START_I2C
PAGESEL        I2C_IDLE
CALL             I2C_IDLE
    BSF             STATUS,RP0      ;BANCO 1
  BSF               SSPCON2,SEN
    BTFSC             SSPCON2,SEN
    GOTO               $-1
    BCF             STATUS,RP0      ;BANCO 0
    BTFSS             PIR1,SSPIF
  GOTO             $-1
    BCF             PIR1,SSPIF
    RETURN

TRANSMITIR_DATO_I2C

BCF             FLAGEE,0
PAGESEL        I2C_IDLE        ;INICIALIZAR FLAG COMO "ERROR"
    CALL             I2C_IDLE
    MOVF             IC2DATA,W          ;MOVER DATO A W
    MOVWF            SSPBUF          ;CARGAR DATO EN BUFFER I2C
    BSF             STATUS,RP0      ;BANCO 1
    BTFSC        SSPSTAT,R_W      ;ESPERAR A QUE TERMINE EL ENVIO
    GOTO               $-1
    BTFSS             SSPCON2,ACKSTAT    ;CHECKEAR ACK
    GOTO             OKACK
    BSF               SSPCON2,PEN      ;ERROR ACK. ENVIAR STOP
    BCF             STATUS,RP0      ;BANCO 0
    RETURN                ;VOLVER CON FLAG= 0 ERROR
OKACK   
        BCF             STATUS,RP0      ;BANCO 0
    BTFSS             PIR1,SSPIF      ;ESPERAR FINALIZACION DEL NOVENO CLOCK
    GOTO             $-1
    BCF             PIR1,SSPIF
    BSF             FLAGEE,0          ;VOLVER CON FLAG = 1 OK!
    RETURN ;VOLVER CON FLAG= 0 ERROR


RECIBIR_DATO_I2C
PAGESEL        I2C_IDLE
CALL             I2C_IDLE   
    BSF             STATUS,RP0      ;BANCO 1   
    BSF               SSPCON2,RCEN      ;ACTIVAR MODO LECTURA
    BTFSC        SSPCON2,RCEN      ;TERMINO LA RECEPCION?
    GOTO               $-1          ;NO, ESPERAR
    BTFSS             SSPSTAT,BF      ;DATO DISPONIBLE EN SSPBUF PARA SER LEIDOS?
    GOTO             $-1          ;NO, ESPERAR
    BCF             STATUS,RP0      ;BANCO 0
    MOVF             SSPBUF,W
    MOVWF      IC2DATA
    RETURN

BIT_STOP_I2C

BSF                 STATUS,RP0 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
BSF                 SSPCON2,PEN
BCF                 STATUS,RP0
RETURN ; SELECIONO LA PAGINA 0 DE LA MEMORIA

RESTART_I2C

BSF                 STATUS,RP0
BSF                SSPCON2,RSEN
BTFSC        SSPCON2,RSEN
GOTO         $-1
BCF                STATUS,RP0

VOLVER RETURN

I2C_IDLE

    BSF              STATUS,RP0      ;BANCO 1
    BTFSC        SSPSTAT,R_W
    GOTO                $-1
    MOVF                SSPCON2,W
    ANDLW        0X1F
  BTFSS        STATUS,Z
    GOTO                $-3
    BCF              STATUS,RP0      ;BANCO 0
    RETURN

I2C_SENDACK

    BSF               STATUS,RP0      ;BANCO 1
    BCF                 SSPCON2,ACKDT
    BSF                 SSPCON2,ACKEN
    BCF               STATUS,RP0      ;BANCO 0
    RETURN

I2C_SENDNACK

    BSF               STATUS,RP0      ;BANCO 1
    BSF                  SSPCON2,ACKDT
    BSF                 SSPCON2,ACKEN
    BCF               STATUS,RP0      ;BANCO 0
    RETURN

Aclaro varias cosas, las resistencias Pull-up son de 4.7K, según el datasheet de la memoria para velocidades superiores a 300k se ponen de 2K, por eso decidí setiar la velocidad a 100khz. La memoria la grabé aparte escribiendo varios hex en las primeras direcciones de la memoria, que corresponden al valor ASCII de las letras A ,B , C ,D, P etc....
Si le pongo un valor fijo a PALABRA este valor me lo muestra en la matrix, que sería la A..eso quiere decir de que la rutina I2C no presenta problema alguno(aparentemente) lo que pasa es que no carga el valor de la memoria en el registro SSPBUF, o si lo carga es un valor diferente..en fin ya me está dando dolor de cabeza..ahh Dios quien me mandó  :( :shock:

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #43 en: 14 de Mayo de 2009, 13:40:03 »
Hola. Los PAGESELW son MACROs que utilizan el registro de trabajo(W). Te está ensuciando los datos. Cambiá los PAGESELW por PAGESEL en tu rutina.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #44 en: 14 de Mayo de 2009, 14:29:14 »
Hola. Los PAGESELW son MACROs que utilizan el registro de trabajo(W). Te está ensuciando los datos. Cambiá los PAGESELW por PAGESEL en tu rutina.

Saludos.

Nada, ya hice el cambio y sigo igual, creo que me voy a hacer la rutina de la forma más rudimentaria, a punta de BSF portc,sd  call 10_MS etc...por que no le veo el problema, la memoria  ya la cambié y nada, le puse otra de menor tamaño y elimine las lineas de la dirección alta y nada, revise conexiones, resistencias voltajes y nada....pregunto tendrá algo que ver los casi 30cms de cable del bus que van desde el entrenador al protoboard donde tengo la memoria?..solo me falta descartar eso...

BrunoF muchas gracias por ayudarme..

Saludos


 

anything