• Domingo 29 de Septiembre de 2024, 05:36

Autor Tema:  16f84 Y Eeprom 24c08!..  (Leído 9134 veces)

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
16f84 Y Eeprom 24c08!..
« en: Viernes 11 de Marzo de 2005, 18:04 »
0
Hola chicos.. :hola: ..alguien derrepente no tiene ejemplos para practicar el manejo de memorias externas 24c08 con un pic 16f84?... :rolleyes: ...en donde pueda darme cuenta de su interconección(circuito) y su comunicación(programa)..claro si no es mucha molestia.. :) ..
Cualquier aporte será bienvenido... :) .. :hola: ..seguiré buscando.. :comp:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

Acor2

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #1 en: Sábado 12 de Marzo de 2005, 09:30 »
0
En  www.ljlopez.com/Proteus.htm  he visto un ejemplo de conexión de un PIC16F84 y una 24LC256 que te puede servir. Además lo puedes bajar y simular en Proteus.

Saludos.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #2 en: Sábado 12 de Marzo de 2005, 20:05 »
0
Hola! Aqui tengo algo de código, que escribí alla por el 2000, por lo que no recuerdo exactamente todos los detalles. Pero si recuerdo que me funcionó con una 24C02 y que, en parte, lo saqué de un manual de AN de Microchip.
Debería adaptarse muy bien a un 16F84 y a una 24C08. Solo hay que declarar bien las variables, los pines, etc... Pero creo que no hay problema con eso ;)
Espero que te sea útil :)

Saludos y suerte!

Código: Text
  1. ;******************************************************************************
  2. ;  RUTINAS DE COMUNICACION SERIE (MODULO I2C)
  3. ;******************************************************************************
  4. ;
  5. ; GENERA START BIT
  6. ;
  7. START_I2C
  8.   BSF  SDA  &#59; dejo linea de datos en 1
  9.   BSF  RP0  &#59; banco 1
  10.   MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas
  11.   ANDLW  b'11100111'&#59;
  12.   MOVWF  TRISC  &#59;
  13.   BCF  RP0  &#59; banco 0
  14.   BCF  SCL  &#59; bajo clock
  15.   NOP    &#59;
  16.   BSF  SCL  &#59; subo clock
  17.   GOTO  $+1  &#59;
  18.   GOTO  $+1  &#59;
  19.   GOTO  $+1  &#59;
  20.   NOP    &#59;
  21.   BCF  SDA  &#59; bajo datos
  22.   GOTO  $+1  &#59;
  23.   GOTO  $+1  &#59;
  24.   GOTO  $+1  &#59;
  25.   NOP    &#59;
  26.   BCF  SCL  &#59; y bajo clock para generar start bit
  27.   GOTO  $+1  &#59;
  28.   GOTO  $+1  &#59;
  29.   RETURN    &#59;
  30. ;
  31. ; GENERA STOP BIT
  32. ;
  33. STOP_I2C
  34.   BCF  SDA  &#59; dejo linea de datos en 0
  35.   BSF  RP0  &#59; banco 1
  36.   MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas
  37.   ANDLW  b'11100111'&#59;
  38.   MOVWF  TRISC  &#59;
  39.   BCF  RP0  &#59; banco 0
  40.   BCF  SDA  &#59; bajo datos
  41.   GOTO  $+1  &#59;
  42.   GOTO  $+1  &#59;
  43.   BSF  SCL  &#59; subo clock
  44.   GOTO  $+1  &#59;
  45.   GOTO  $+1  &#59;
  46.   BSF  SDA  &#59; subo datos
  47.   GOTO  $+1  &#59;
  48.   GOTO  $+1  &#59;
  49.   BCF  SCL  &#59; bajo clock
  50.   GOTO  $+1  &#59;
  51.   GOTO  $+1  &#59;
  52.   RETURN    &#59; y retorno
  53. ;
  54. ; ENVIA UN BIT POR SDA
  55. ;
  56. BITOUT_I2C
  57.   BSF  RP0  &#59; banco 1
  58.   MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas
  59.   ANDLW  b'11100111'&#59;
  60.   MOVWF  TRISC  &#59;
  61.   BCF  RP0  &#59; banco 0
  62.   BTFSS  I2CDO  &#59; enviar un 1 ?
  63.   GOTO  I2CBLO  &#59; no, envio un 0...
  64.   BSF  SDA  &#59; pongo SDA en 1
  65.   GOTO  CLKOUT  &#59;
  66. I2CBLO
  67.   BCF  SDA  &#59; pongo SDA en 0
  68. CLKOUT
  69.   BSF  SCL  &#59; y clockeo
  70.   GOTO  $+1  &#59;
  71.   GOTO  $+1  &#59;
  72.   GOTO  $+1  &#59;
  73.   BCF  SCL  &#59;
  74.   RETURN    &#59; y salgo
  75. ;
  76. ; RECIBE UN BIT POR SDA
  77. ;
  78. BITIN_I2C
  79.   BSF  I2CDI  &#59; asumo que llega un 1
  80.   BSF  RP0  &#59; banco 1
  81.   MOVLW  _TRISC  &#59; configuro SDA como entrada y SCL como salida
  82.   ANDLW  b'11100111'&#59;
  83.   IORLW  b'00010000'&#59;
  84.   MOVWF  TRISC  &#59;
  85.   BCF  RP0  &#59; banco 0
  86.   BSF  SCL  &#59; subo clock
  87.   GOTO  $+1  &#59;
  88.   GOTO  $+1  &#59;
  89.   GOTO  $+1  &#59;
  90.   BTFSS  SDA  &#59; recibio un 1 ?
  91.   BCF  I2CDI  &#59; no, es 0
  92.   BCF  SCL  &#59; bajo clock
  93.   RETURN    &#59; y salgo
  94. ;
  95. ; RUTINA DE TRANSMISION POR I2C
  96. ;
  97. I2C_TX
  98.   MOVLW  .8  &#59; son 8 bits a contar
  99.   MOVWF  CNT  &#59;
  100. I2C_TXLP
  101.   BCF  I2CDO  &#59; asumo que sale un 0
  102.   BTFSC  I2CBUF,7&#59; sacar un 0 ?
  103.   BSF  I2CDO  &#59; no, sale un 1...
  104.   CALL  BITOUT_I2C&#59; envio bit
  105.   RLF  I2CBUF,F&#59; acomodo para sacar proximo bit
  106.   DECFSZ  CNT,F  &#59; salieron los 8 ?
  107.   GOTO  I2C_TXLP&#59; no, continuo sacando...
  108.   CALL  BITIN_I2C&#59; leo bit de acknowledge
  109.   BCF  I2CACKF  &#59; asumo que es 0
  110.   BTFSC  I2CDI  &#59; es 0 ?
  111.   BSF  I2CACKF  &#59; no, envio un 1
  112.   RETURN    &#59; y salgo
  113. ;
  114. ; RUTINA DE RECEPCION POR I2C
  115. ;
  116. I2C_RX
  117.   CLRF  I2CBUF  &#59; borro buffer
  118.   MOVLW  .8  &#59; son 8 bits a leer
  119.   MOVWF  CNT  &#59;
  120.   BCF  C  &#59; borro flag de carry
  121. I2C_RXLP
  122.   RLF  I2CBUF,F&#59; roto un bit a la izquierda
  123.   CALL  BITIN_I2C&#59; y leo bit enviado
  124.   BTFSC  I2CDI  &#59; llego un 0 ?
  125.   BSF  I2CBUF,0&#59; no, escribo un 1 en el buffer
  126.   DECFSZ  CNT,F  &#59; llegaron los 8 bits ?
  127.   GOTO  I2C_RXLP&#59; no, sigo reciviendo...
  128.   BCF  I2CDO  &#59;
  129.   BTFSC  I2CACKF  &#59;
  130.   BSF  I2CDO  &#59;
  131.   CALL  BITOUT_I2C&#59; envio bit de acknowledge
  132.   RETURN    &#59; y salgo
  133. ;
  134. ; LECTURA DE LA MEMORIA 24Cxx
  135. ;
  136. RD24CXX
  137.   CALL  START_I2C&#59; envio condicion de start
  138.   MOVLW  _24CADD  &#59; traigo direccion de esclavo
  139.   MOVWF  I2CBUF  &#59; y cargo en buffer
  140.   CALL  I2C_TX  &#59; direcciono memoria
  141.   MOVFW  ADD24C  &#59; traigo direccion a leer
  142.   MOVWF  I2CBUF  &#59;
  143.   CALL  I2C_TX  &#59; y envio a memoria
  144.   CALL  START_I2C&#59; envio condicion de start
  145.   MOVLW  _24CADD  &#59;
  146.   IORLW  0x01  &#59; direcciono memoria para lectura
  147.   MOVWF  I2CBUF  &#59;
  148.   CALL  I2C_TX  &#59; y envio
  149.   BCF  I2CACKF  &#59; preparo para acknowledge en 0
  150.   CALL  I2C_RX  &#59; y leo byte direccionado
  151.   CALL  STOP_I2C&#59; genero condicion de stop
  152.   MOVFW  I2CBUF  &#59; cargo dato leido en
  153.   MOVWF  DAT24C  &#59; registro de datos de memoria
  154.   RETURN    &#59; y salgo
  155. ;
  156. ; ESCRITURA DE LA MEMORIA 24Cxx
  157. ;
  158. WR24CXX
  159.   CALL  START_I2C&#59; genero bit de start
  160.   MOVLW  _24CADD  &#59; cargo direccion del esclavo
  161.   MOVWF  I2CBUF  &#59; en buffer
  162.   CALL  I2C_TX  &#59; envio...
  163.   MOVFW  ADD24C  &#59; cargo direccion a escribir
  164.   MOVWF  I2CBUF  &#59; en buffer
  165.   CALL  I2C_TX  &#59; envio...
  166.   MOVFW  DAT24C  &#59; cargo dato a escribir
  167.   MOVWF  I2CBUF  &#59; en buffer
  168.   CALL  I2C_TX  &#59; envio...
  169.   CALL  STOP_I2C&#59; genero bit de stop
  170.   MOVLW  .60  &#59;
  171.   MOVWF  CNT1  &#59;
  172. WR24POLL
  173.   CALL  START_I2C&#59;
  174.   MOVLW  _24CADD  &#59;
  175.   MOVWF  I2CBUF  &#59;
  176.   CALL  I2C_TX  &#59;
  177.   BTFSS  SDA  &#59;
  178.   GOTO  WR24P_EXIT&#59;
  179.   DECFSZ  CNT1,F  &#59;
  180.   GOTO  WR24POLL&#59;
  181.   RETLW  0xFF  &#59;
  182. WR24P_EXIT
  183. ;  MOVLW  .20  &#59;
  184. ;  MOVWF  DEL_TIME&#59; espero 10 mseg para dar tiempo a memoria
  185. ;  CALL  DELAY  &#59;
  186.   RETLW  0x00  &#59; y salgo
  187. ;
  188. ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*;
  189.  
  190.  

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #3 en: Domingo 13 de Marzo de 2005, 06:04 »
0
Gracias Chicos por su gentil ayuda!.. :hola: ..practicaré y les contaré los resultados.. ;) ..
Nos vemos..bye.. :hola:  :sorcerer:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #4 en: Lunes 14 de Marzo de 2005, 16:09 »
0
Hola Acor2!.. :hola: ..Intenté bajarme el ejercicio que dices...pero el zip está con clave.. :(  ...creo que tendré que comprar el libro!..
Gracias de todos Modos... :hola: ..seguiré practicando!... :comp:   :sorcerer:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

Acor2

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #5 en: Lunes 14 de Marzo de 2005, 20:47 »
0
La clave está puesta en la misma página y es:

D.P.E.

Por cierto, ese libro es muy bueno, te lo recomiendo.
 
Acor.

microman

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #6 en: Lunes 21 de Marzo de 2005, 12:09 »
0
Hola Elisa, soy nuevo x aca me incribi hace un par de dias  y me llamo la atencion la discusion q comenzaste ya q tengo un problema parecido con un 16f628 q quiero comunicar a una E2prom. Me comunique con los muchachos y dicen q algo t pasaron y aca viene la pregunta, lo pudist implementar? Q tal anda?

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #7 en: Miércoles 23 de Marzo de 2005, 23:46 »
0
Hola! Estuve probando el código que dejé más arriba; la rutina de escritura funciona, solo debemos tener en cuenta que la 24C necesita de algunos milisegundos para completar la operación. La rutina de lectura no me funcionó (tampoco probé mucho), pero creo que es un problema con la segunda condición de start.
De cualquier manera, si están a tiempo, no es nada malo cambiar a un MCU con MSSP ;)
Les dejo como adjunto la AN578 de Microchip, que les puede ser útil...

Saludos!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #8 en: Jueves 20 de Octubre de 2005, 18:40 »
0
Hoooola A todos
Bueno, cheque el foro, y me parece que esta perfecto
he trabajado un poco con ellos, he usado PWM, ADC,
sus interrupciones, programa en C, transmisiones serial
LCD, asi que si les puedo ayudar no tengan duda que lo hare.

Bueno apesar que he echo varios programas, el conocimiento
sigue, me han dicho que el libro de "Microcontrolador PIC16F84. Desarrollo de proyectos"esta muy bueno, abusando de ustedes
si alguien lo tubiera Scaneado y me lo mandara e mi correo se los agradeceria.

He trabajado con PROTEUS por si tienen alguna duda
y con los PIC18F452

Gracias
bye :hola:

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #9 en: Viernes 21 de Octubre de 2005, 10:14 »
0
Alternative
Citar
Bueno apesar que he echo varios programas, el conocimiento
sigue, me han dicho que el libro de "Microcontrolador PIC16F84. Desarrollo de proyectos"esta muy bueno, abusando de ustedes
si alguien lo tubiera Scaneado y me lo mandara e mi correo se los agradeceria.
compañero, yo compre el libro y t cuento q es muy bueno, pero por su secilles; si dices q ya has manejado con pics usart, lcds, adcs, etc, no tiene mucho sentido q andes buscando el libro.

................................

Eliza
aqui t dejo una libreria en c para manejar la memoria, solo tienes q llamar a las funciones d lectura y escritua y listo, fascilisimo.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #10 en: Sábado 22 de Octubre de 2005, 01:07 »
0
Gracias jpaler por tu comentario
y pues  si tienes dada sobre el manejo de los PIC, rutinas del LCD
o manejo del PWM o cualquier cosa, si te puedo ayudar
co gusto lo hare.

He echo algunos proyectos como es un neuromodulador (no es mas
que un motor a pasos que se mueve en distancias de micrometros)
controlado desde un teclado y un select externos. De echo termine apenas
un entrenador de PIC´s que lo ando probando, quiero empesar con
los DSPIc, he echo ya algunos programas, pero no los he podido programar,
e utilizado para los DSPIC MELAB, y para los PIC's EPICWIN

Si has programado en DSPIC y te funciona el programador
te agradeceria m pudiaras atudar.
Por todo gracias

Bye

 :hola:

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #11 en: Sábado 22 de Octubre de 2005, 03:05 »
0
muchas gracias Alternative x tu ayuda ofrecida, de seguro la necesitare + adelante, x q en esto d los pics, cada dia me encuentro cosas raras.

...,lastima no poder colaborarte, no he trabajado aun con los dsPICs, PERO INICIA LA DISCUCION, POR Q ESTOY SEGURO Q TODA LA COMUNIDAD HARA LO POSIBLE X AYUDARTE.

chao....

andre52

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #12 en: Miércoles 7 de Diciembre de 2005, 01:26 »
0
Cita de: "Huguen_aus_Tirol"
Hola! Aqui tengo algo de código, que escribí alla por el 2000, por lo que no recuerdo exactamente todos los detalles. Pero si recuerdo que me funcionó con una 24C02 y que, en parte, lo saqué de un manual de AN de Microchip.
Debería adaptarse muy bien a un 16F84 y a una 24C08. Solo hay que declarar bien las variables, los pines, etc... Pero creo que no hay problema con eso ;)
Espero que te sea útil :)

Saludos y suerte!

Código: Text
  1. ;******************************************************************************
  2. ;  RUTINAS DE COMUNICACION SERIE (MODULO I2C)
  3. ;******************************************************************************
  4. ;
  5. ; GENERA START BIT
  6. ;
  7. START_I2C
  8.   BSF  SDA  ; dejo linea de datos en 1
  9.   BSF  RP0  ; banco 1
  10.   MOVLW  _TRISC  ; configuro SDA y SCL como salidas
  11.   ANDLW  b'11100111';
  12.   MOVWF  TRISC  ;
  13.   BCF  RP0  ; banco 0
  14.   BCF  SCL  ; bajo clock
  15.   NOP    ;
  16.   BSF  SCL  ; subo clock
  17.   GOTO  $+1  ;
  18.   GOTO  $+1  ;
  19.   GOTO  $+1  ;
  20.   NOP    ;
  21.   BCF  SDA  ; bajo datos
  22.   GOTO  $+1  ;
  23.   GOTO  $+1  ;
  24.   GOTO  $+1  ;
  25.   NOP    ;
  26.   BCF  SCL  ; y bajo clock para generar start bit
  27.   GOTO  $+1  ;
  28.   GOTO  $+1  ;
  29.   RETURN    ;
  30. ;
  31. ; GENERA STOP BIT
  32. ;
  33. STOP_I2C
  34.   BCF  SDA  ; dejo linea de datos en 0
  35.   BSF  RP0  ; banco 1
  36.   MOVLW  _TRISC  ; configuro SDA y SCL como salidas
  37.   ANDLW  b'11100111';
  38.   MOVWF  TRISC  ;
  39.   BCF  RP0  ; banco 0
  40.   BCF  SDA  ; bajo datos
  41.   GOTO  $+1  ;
  42.   GOTO  $+1  ;
  43.   BSF  SCL  ; subo clock
  44.   GOTO  $+1  ;
  45.   GOTO  $+1  ;
  46.   BSF  SDA  ; subo datos
  47.   GOTO  $+1  ;
  48.   GOTO  $+1  ;
  49.   BCF  SCL  ; bajo clock
  50.   GOTO  $+1  ;
  51.   GOTO  $+1  ;
  52.   RETURN    ; y retorno
  53. ;
  54. ; ENVIA UN BIT POR SDA
  55. ;
  56. BITOUT_I2C
  57.   BSF  RP0  ; banco 1
  58.   MOVLW  _TRISC  ; configuro SDA y SCL como salidas
  59.   ANDLW  b'11100111';
  60.   MOVWF  TRISC  ;
  61.   BCF  RP0  ; banco 0
  62.   BTFSS  I2CDO  ; enviar un 1 ?
  63.   GOTO  I2CBLO  ; no, envio un 0...
  64.   BSF  SDA  ; pongo SDA en 1
  65.   GOTO  CLKOUT  ;
  66. I2CBLO
  67.   BCF  SDA  ; pongo SDA en 0
  68. CLKOUT
  69.   BSF  SCL  ; y clockeo
  70.   GOTO  $+1  ;
  71.   GOTO  $+1  ;
  72.   GOTO  $+1  ;
  73.   BCF  SCL  ;
  74.   RETURN    ; y salgo
  75. ;
  76. ; RECIBE UN BIT POR SDA
  77. ;
  78. BITIN_I2C
  79.   BSF  I2CDI  ; asumo que llega un 1
  80.   BSF  RP0  ; banco 1
  81.   MOVLW  _TRISC  ; configuro SDA como entrada y SCL como salida
  82.   ANDLW  b'11100111';
  83.   IORLW  b'00010000';
  84.   MOVWF  TRISC  ;
  85.   BCF  RP0  ; banco 0
  86.   BSF  SCL  ; subo clock
  87.   GOTO  $+1  ;
  88.   GOTO  $+1  ;
  89.   GOTO  $+1  ;
  90.   BTFSS  SDA  ; recibio un 1 ?
  91.   BCF  I2CDI  ; no, es 0
  92.   BCF  SCL  ; bajo clock
  93.   RETURN    ; y salgo
  94. ;
  95. ; RUTINA DE TRANSMISION POR I2C
  96. ;
  97. I2C_TX
  98.   MOVLW  .8  ; son 8 bits a contar
  99.   MOVWF  CNT  ;
  100. I2C_TXLP
  101.   BCF  I2CDO  ; asumo que sale un 0
  102.   BTFSC  I2CBUF,7; sacar un 0 ?
  103.   BSF  I2CDO  ; no, sale un 1...
  104.   CALL  BITOUT_I2C; envio bit
  105.   RLF  I2CBUF,F; acomodo para sacar proximo bit
  106.   DECFSZ  CNT,F  ; salieron los 8 ?
  107.   GOTO  I2C_TXLP; no, continuo sacando...
  108.   CALL  BITIN_I2C; leo bit de acknowledge
  109.   BCF  I2CACKF  ; asumo que es 0
  110.   BTFSC  I2CDI  ; es 0 ?
  111.   BSF  I2CACKF  ; no, envio un 1
  112.   RETURN    ; y salgo
  113. ;
  114. ; RUTINA DE RECEPCION POR I2C
  115. ;
  116. I2C_RX
  117.   CLRF  I2CBUF  ; borro buffer
  118.   MOVLW  .8  ; son 8 bits a leer
  119.   MOVWF  CNT  ;
  120.   BCF  C  ; borro flag de carry
  121. I2C_RXLP
  122.   RLF  I2CBUF,F; roto un bit a la izquierda
  123.   CALL  BITIN_I2C; y leo bit enviado
  124.   BTFSC  I2CDI  ; llego un 0 ?
  125.   BSF  I2CBUF,0; no, escribo un 1 en el buffer
  126.   DECFSZ  CNT,F  ; llegaron los 8 bits ?
  127.   GOTO  I2C_RXLP; no, sigo reciviendo...
  128.   BCF  I2CDO  ;
  129.   BTFSC  I2CACKF  ;
  130.   BSF  I2CDO  ;
  131.   CALL  BITOUT_I2C; envio bit de acknowledge
  132.   RETURN    ; y salgo
  133. ;
  134. ; LECTURA DE LA MEMORIA 24Cxx
  135. ;
  136. RD24CXX
  137.   CALL  START_I2C; envio condicion de start
  138.   MOVLW  _24CADD  ; traigo direccion de esclavo
  139.   MOVWF  I2CBUF  ; y cargo en buffer
  140.   CALL  I2C_TX  ; direcciono memoria
  141.   MOVFW  ADD24C  ; traigo direccion a leer
  142.   MOVWF  I2CBUF  ;
  143.   CALL  I2C_TX  ; y envio a memoria
  144.   CALL  START_I2C; envio condicion de start
  145.   MOVLW  _24CADD  ;
  146.   IORLW  0x01  ; direcciono memoria para lectura
  147.   MOVWF  I2CBUF  ;
  148.   CALL  I2C_TX  ; y envio
  149.   BCF  I2CACKF  ; preparo para acknowledge en 0
  150.   CALL  I2C_RX  ; y leo byte direccionado
  151.   CALL  STOP_I2C; genero condicion de stop
  152.   MOVFW  I2CBUF  ; cargo dato leido en
  153.   MOVWF  DAT24C  ; registro de datos de memoria
  154.   RETURN    ; y salgo
  155. ;
  156. ; ESCRITURA DE LA MEMORIA 24Cxx
  157. ;
  158. WR24CXX
  159.   CALL  START_I2C; genero bit de start
  160.   MOVLW  _24CADD  ; cargo direccion del esclavo
  161.   MOVWF  I2CBUF  ; en buffer
  162.   CALL  I2C_TX  ; envio...
  163.   MOVFW  ADD24C  ; cargo direccion a escribir
  164.   MOVWF  I2CBUF  ; en buffer
  165.   CALL  I2C_TX  ; envio...
  166.   MOVFW  DAT24C  ; cargo dato a escribir
  167.   MOVWF  I2CBUF  ; en buffer
  168.   CALL  I2C_TX  ; envio...
  169.   CALL  STOP_I2C; genero bit de stop
  170.   MOVLW  .60  ;
  171.   MOVWF  CNT1  ;
  172. WR24POLL
  173.   CALL  START_I2C;
  174.   MOVLW  _24CADD  ;
  175.   MOVWF  I2CBUF  ;
  176.   CALL  I2C_TX  ;
  177.   BTFSS  SDA  ;
  178.   GOTO  WR24P_EXIT;
  179.   DECFSZ  CNT1,F  ;
  180.   GOTO  WR24POLL;
  181.   RETLW  0xFF  ;
  182. WR24P_EXIT
  183. ;  MOVLW  .20  ;
  184. ;  MOVWF  DEL_TIME; espero 10 mseg para dar tiempo a memoria
  185. ;  CALL  DELAY  ;
  186.   RETLW  0x00  ; y salgo
  187. ;
  188. ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*;
  189.  
  190.  
HOLA Huguen_aus_Tirol ESTUVE VIENDO TU CODIGO DE LA I2C PERO REALMENTE NO ENTIENDO MUCHAS COSAS, PORQUE NO ESCRIBISTE LA DECLARACION DE VARIABLES Y POR TAL MOTIVO ESTOY UN POCO PERDIDA...TE AGRADECERIA MUCHO QUE ME ENVIARAS EL CODIGO COMPLETO..

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #13 en: Miércoles 7 de Diciembre de 2005, 06:48 »
0
Hola! No hay problema, pero tendrás que tenerme un poquito de paciencia, por lo menos hasta el sábado. Estoy con demasiado trabajo, y tengo que buscar el programa para enviartelo. En otra discución veo que quieres implementar el I2C con un 16F877; este micro ya tiene modulo I2C.
Asi que te pasaré el programa completo para emular I2C en un 16F84, y las rutinas para configurar este modulo en los micros que ya lo tienen.
Pero paciencia :) No prometo nada, pero si me da un tiempito en una de esas lo hago antes, pero no es promesa...
Saludos

andre52

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #14 en: Miércoles 7 de Diciembre de 2005, 21:33 »
0
Cita de: "Huguen_aus_Tirol"
Hola! No hay problema, pero tendrás que tenerme un poquito de paciencia, por lo menos hasta el sábado. Estoy con demasiado trabajo, y tengo que buscar el programa para enviartelo. En otra discución veo que quieres implementar el I2C con un 16F877; este micro ya tiene modulo I2C.
Asi que te pasaré el programa completo para emular I2C en un 16F84, y las rutinas para configurar este modulo en los micros que ya lo tienen.
Pero paciencia :) No prometo nada, pero si me da un tiempito en una de esas lo hago antes, pero no es promesa...
Saludos
Muchas gracias por tu atencion, sigo trabajando en eso, si, tienes razon el 877 ya tiene el modulo configurado pero no he logrado hacer que me funcione con el MSSP, por eso estoy intentando guiarme por tu codigo para hacerlo paso a paso ya que mi entrega es para este viernes. Igualmente te agradeceria si por casualidad tienes algun codigo que te haya funcionado con el MSSP y si no, no te preocupes continua con lo que tienes que hacer y de nuevo muchas gracias.

 ;)

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #15 en: Jueves 8 de Diciembre de 2005, 00:41 »
0
Hola! No sabía que era tan urgente! Bueno, mañana es feriado (se me había pasado), asi que me hago un tiempito para dejarte algo de código para los MCU que tienen el modulo MSSP.

Código: Text
  1.  
  2. ;******************************************************************************
  3. ;  PLACA EXPERIMENTAL CON 16F873
  4. ;
  5. ; Autor: Hugo Rodolfo ERHARD
  6. ; Fecha: 06/03/05
  7. ;
  8. ;******************************************************************************
  9.   include "p16f873.h"
  10.   errorlevel -215, -302
  11.   __CONFIG 0x3D31
  12. ;
  13. M24C02  equ  b'10100000'&#59;
  14. ;
  15.   CBLOCK  0x22
  16. ; VARIABLES DE USO GENERAL
  17.   CNT      &#59; contador general
  18.   CNT1      &#59; contador general
  19.   COUNT      &#59;
  20.   COUNT01      &#59;
  21.   TMP      &#59; temporal general
  22.   PTR      &#59; puntero general
  23.   REG0
  24.   REG1
  25.   REG2
  26.   count
  27.   tmp_h
  28.   tmp_l
  29.   temp
  30.   I2C_cmd
  31.   I2C_adr
  32.   I2C_dat
  33.   I2C_aux
  34. ;
  35.   _070lim
  36. ;
  37.   ENDC
  38. ;
  39. #DEFINE  STR  PORTA,1  &#59;
  40. #DEFINE  DAT  PORTA,2  &#59;
  41. #DEFINE  CLK  PORTA,3  &#59;
  42. #DEFINE  LED  PORTA,4  &#59;
  43. #DEFINE  PS  PORTA,5  &#59;
  44. ;
  45. #DEFINE  RSDIS  PORTB,1  &#59;
  46. #DEFINE  EDIS  PORTB,3  &#59;
  47. ;
  48. #DEFINE  SCL  PORTC,4  &#59;
  49. #DEFINE  SDA  PORTC,3  &#59;
  50. #DEFINE  COMEN  PORTC,5  &#59;
  51. ;
  52. #DEFINE  I2CDO  I2CSTAT,6&#59;
  53. #DEFINE  I2CDI  I2CSTAT,7&#59;
  54. #DEFINE  I2CACKF  I2CSTAT,5&#59;
  55. ;
  56. ;
  57. ;******************************************************************************
  58. ;
  59.   ORG  0
  60. _POR
  61.   goto  MAIN  &#59;
  62. ;
  63.   ORG  4
  64. _ISR
  65.   movwf  SAVE_W  &#59; salvo W durante la interrupcion
  66.   swapf  STATUS,W&#59; cargo STATUS en W invirtiendo nibbles
  67.   movwf  SAVE_S  &#59; y salvo
  68.   clrf  STATUS  &#59; para asegurar que este en banco 0
  69. ;;  btfsc  TMR1IF  &#59; timer 1
  70. ;;  goto  TMR1_ISR&#59;
  71. ;;  btfsc  RCIF  &#59; USART Rx
  72. ;;  goto  RX485_ISR&#59;
  73. _NOISR
  74.   swapf  SAVE_S,W&#59; recupero STATUS invirtiendo nibbles
  75.   movwf  STATUS  &#59;
  76.   swapf  SAVE_W,F&#59; recupero W de esta manera para no afectar
  77.   swapf  SAVE_W,W&#59; los bits de STATUS
  78.   retfie      &#59;
  79. ;
  80. ;
  81. ;*****************************************************************************;
  82. ;  SUBRUTINAS VARIAS                 &#59;
  83. ;*****************************************************************************;
  84. ;
  85. I2C_IDLE
  86.   bsf  RP0
  87.   btfsc  SSPRW
  88.   goto  $-1
  89.   movfw  SSPCON2
  90.   andlw  0x1F
  91.   btfss  Z
  92.   goto  $-3
  93.   bcf  RP0
  94.   return
  95. ;
  96. ;
  97. I2C_START
  98.   bsf  RP0
  99.   bsf  SEN
  100.   btfsc  SEN
  101.   goto  $-1
  102.   bcf  RP0
  103.   return  
  104. ;
  105. ;
  106. I2C_WRITE
  107.   movwf  SSPBUF
  108.   bsf  RP0
  109.   btfsc  SSPRW
  110.   goto  $-1
  111.   btfsc  ACKSTAT
  112.   goto  $-1
  113.   bcf  RP0  
  114.   return
  115. ;
  116. ;
  117. I2C_READ
  118.   bsf  RP0
  119.   bsf  RCEN
  120.   btfsc  RCEN
  121.   goto  $-1
  122.   bcf  RP0
  123.   movfw  SSPBUF
  124.   return
  125. ;
  126. ;
  127. I2C_RESTART
  128.   bsf  RP0
  129.   bsf  RSEN
  130.   btfsc  RSEN
  131.   goto  $-1
  132.   bcf  RP0
  133.   return
  134. ;
  135. ;
  136. I2C_NOACK
  137.   bsf  RP0
  138.   bsf  ACKDAT
  139.   bsf  ACKEN
  140.   btfsc  ACKEN
  141.   goto  $-1
  142.   bcf  RP0
  143.   return
  144. ;
  145. ;
  146. I2C_STOP
  147.   bsf  RP0
  148.   bsf  PEN
  149.   btfsc  PEN
  150.   goto  $-1
  151.   bcf  RP0
  152.   return
  153. ;
  154. ;
  155. RD24C02
  156.   call  I2C_IDLE
  157.   call  I2C_START
  158. ;
  159.   movfw  I2C_cmd
  160.   call  I2C_WRITE
  161. ;
  162.   movfw  I2C_adr
  163.   call  I2C_WRITE
  164. ;
  165.   call  I2C_RESTART
  166. ;
  167.   movfw  I2C_cmd
  168.   iorlw  0x01
  169.   call  I2C_WRITE
  170.   call  I2C_READ
  171.   movwf  I2C_dat
  172. ;
  173.   call  I2C_NOACK
  174.   call  I2C_STOP
  175.   return
  176. ;
  177. ;*******************************************************************
  178. ;
  179. ;
  180. MAIN
  181.   bsf    RP0      &#59; banco 1
  182.   movlw  b'00000001'  &#59; puerto A
  183.   movwf  TRISA    &#59;
  184.   movlw  b'00000000'  &#59; puerto B
  185.   movwf  TRISB    &#59;
  186.   movlw  b'10011001'  &#59; puerto C
  187.   movwf  TRISC    &#59;
  188.   bcf  RP0    &#59; banco 0
  189.   clrf  PORTA    &#59; todas las salidas en 0
  190.   clrf  PORTB    &#59;
  191.   clrf  PORTC    &#59;
  192.   clrf  HOR    &#59;
  193.   clrf  MIN    &#59;
  194.   clrf  SEG    &#59;
  195. ;
  196. ; Configuro MSSP como i2c maestro
  197. ;
  198.   bsf  RP0    &#59;
  199.   movlw  0x09    &#59; velocidad 400 KHz
  200.   movwf  SSPADD    &#59;
  201.   movlw  b'10000000'  &#59; slew rate speed control enabled, niveles segun i2c
  202.   movwf  SSPSTAT    &#59;
  203.   movlw  b'00000000'  &#59;
  204.   movwf  SSPCON2    &#59;
  205.   bcf  RP0    &#59;
  206.   movlw  b'00111000'  &#59; i2c habilitado, modo maestro
  207.   movwf  SSPCON    &#59;
  208.   clrf  PIR1
  209.   clrf  PIR2
  210. ;
  211.   bsf  RP0    &#59;
  212.   movlw  b'00100001'  &#59; int timer 1
  213.   movwf  PIE1    &#59;
  214.   bcf  RP0
  215.   movlw  b'11000000'  &#59;
  216.   movwf  INTCON    &#59;
  217. ;
  218.   movlw  0xFF
  219.   movwf  I2C_aux
  220.   clrf  I2C_adr
  221.   clrf  I2C_dat
  222. ;
  223. MAIN_LOOP
  224. WAIT1i2c_wr
  225.   movlw  M24C02
  226.   movwf  I2C_cmd
  227.   movlw  .20
  228.   movwf  I2C_aux
  229.   clrf  I2C_adr
  230.   clrf  I2C_dat
  231. I2C_RLOOP
  232.   call  WR_OUT
  233.   movlw  M24C02
  234.   movwf  I2C_cmd
  235.   call  RD24C02
  236. ;
  237.   movlw  .1
  238.   movwf  DSEG
  239. WAIT1i2c
  240.   tstf  DSEG
  241.   bnz  WAIT1i2c
  242. ;
  243.   incf  I2C_adr,f
  244.   decfsz  I2C_aux,f
  245.   goto  I2C_RLOOP
  246. ;
  247.   movlw  .1
  248.   movwf  DSEG
  249. WAIT1S
  250.   tstf  DSEG
  251.   bnz  WAIT1S
  252.   goto  MAIN_LOOP
  253. ;
  254.   end
  255.  
  256.  

Quite algunas partes del programa, para que no se vea más complicado. Pero las rutinas y configuración de lo que es I2C está tal como lo usé.
Perdón por la falta de comentarios.
Con este código puedes leer una 24Cxx. Te aconsejo tener a mano la hoja de datos de los modulos MSSP.
Bueno, espero te sirva. Cualquier problema, aqui estoy!

Saludos

andre52

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #16 en: Jueves 8 de Diciembre de 2005, 22:58 »
0
HOLA...MUCHISIMAS GRACIAS POR TU CODIGO, PUEDE GUIARME UN POCO, AUNQUE NO SE PORQUE TODAVIA NO ME FUNCIONA..TENGO UN PROBLEMA AL LEER LA BANDERA DEL PIR1, SSPIF, NUNCA ME PASA DE AHI...TE AGRADEDERIA MUCHO QUE ME AYUDARAS

********************************************************************
      BANCO1
      CLRF      TRISB            ; PURTO B COMO SALIDA
      movlw      b'00010000'
      MOVWF      TRISC            ; PUERTO C, ENTRADA
      ;MOVLW      B'11001111'      
      ;MOVWF      OPTION_REG
      BSF         SSPSTAT,SMP         ;EL DATO DE ENTRADA ES LEIDO AL FINAL DEL DATO DE SALIDA
      MOVLW      .9      
      MOVWF      SSPADD            ; VELOCIDAD DE 100KHZ
      BANCO0

      ;CONFIGURACION DE MMSP
      MOVLW      B'00101000'
      MOVWF      SSPCON
      CLRF      PIR1
      CALL       WRITE      
      CALL       READ         
      MOVWF      PORTD
      GOTO      main
START
      BANCO1
      BSF         SSPCON2,SEN         ; CONDICION DE INICIO EN LOS PINES SDA Y SCL
      BTFSC      SSPCON2,SEN
      GOTO      $-1
      BANCO0
      CALL      ESPERAR
      RETURN
START2
      BANCO1
      BSF         SSPCON2,RSEN         ; CONDICION DE INICIO EN LOS PINES SDA Y SC
      BANCO0
      CALL      ESPERAR
      RETURN

SEND   
      BCF         PIR1,SSPIF         ;FLAG MSSP
      MOVWF      SSPBUF            ; BUFFER DE SALIDA
      CALL      ACKX
      CALL      ESPERAR            
      RETURN

WRITE   
      CALL       START      
      MOVLW      B'10100000'         ;DIRECCION DISPOSITIVO         
      CALL      SEND
      MOVLW      B'00000000'         ;DIRECCION DE LA MEMORIA
      CALL      SEND
      MOVLW      .90               ;DATO
      MOVWF      SSPBUF      
      CALL      ACKX
      CALL      ESPERAR
      CALL      STOP
      RETURN

ACKX      
      BANCO1   
      BTFSC       SSPCON2, ACKSTAT    ;TRANSMISION HA OCURRIDO
      GOTO      ACKX
      BANCO0
      RETURN
      ;BANCO1
      ;BSF         SSPCON2,ACKEN      ;ACTIVA GENERACION DE ACK

READ
      CALL       START      
      MOVLW      B'10100000'         ;DIRECCION DISPOSITIVO
      CALL      SEND
      MOVLW      B'00000000'         ;DIRECCION DE LA MEMORIA
      CALL      SEND
      CALL      START2
      MOVLW      B'10100001'         ;DIRECCION DISPOSITIVO
      CALL      SEND
      BANCO1
      BSF         SSPCON2,RCEN
      BANCO0
      CALL      ESPERAR
      CALL      NACK
      CALL      LEE_BYTE
      CALL      ESPERAR
      MOVF      SSPBUF,W
      MOVWF      PORTB
      CALL      STOP
      RETURN

NACK
      BANCO1
      BSF         SSPCON2,ACKDT      ;PONE BIT ACK A 0
      BSF         SSPCON2,ACKEN      ;ACTIVA GENERACION DE ACK
      BTFSC      SSPCON2,ACKEN
      GOTO      $-1
      BANCO0
      RETURN
STOP      
      BANCO1
      BSF         SSPCON2,PEN         ;ACTIVA SECUENCIA DE PARADA
      BTFSC      SSPCON2,PEN
      GOTO      $-1
      BANCO0
      CALL      ESPERAR
      RETURN

ESPERAR   
      BCF         PIR1,SSPIF   
      BTFSS      PIR1,SSPIF      ;TRANSMISION O RECEPCION HA OCURRIDO
      GOTO      $-1
      RETURN
LEE_BYTE
      BCF         PIR1,SSPIF
      BANCO1
      BSF         SSPCON2,RCEN
      BTFSC      SSPCON2,RCEN
        GOTO      $-1
      BANCO0
      RETURN      

 

END

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: 16f84 Y Eeprom 24c08!..
« Respuesta #17 en: Viernes 9 de Diciembre de 2005, 07:04 »
0
Hola Andre52! Fijate que en el código que te pasé no utilizo la bandera de interrupción; recuerdo que traté de hacerlo con SSPIF, pero me dio problemas. Luego me funcionó sin utilizar este flag.
No te olvides de conectar una R de 10 K entre SDA y VCC, y otra entre SCL y VCC.
Bueno, más tarde me fijo más detenidamente tu código y vemos que pasa...
Saludos :hola: