Autor Tema: Que se requiere para emular I2C en un micro que no tiene este puerto?  (Leído 585 veces)

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

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 265
Cordial saludo...
Tengo varios micros pequeños como el 12f508, como sabran no tiene "EEPROM tampoco I2C", la idea es implementarle una EEPROM externa. y esta se comunica por I2C.
Que necesitaria minimamente el pic  para implementar I2C por sofware?
Gracias de antemano.
Si algo parece complicado... es por que esta mal explicado.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Que se requiere para emular I2C en un micro que no tiene este puerto?
« Respuesta #1 en: 21 de Junio de 2024, 21:04:58 »
Que tal johenrod,

Tu pregunta es muy vaga pudieras específicar lo que necesitas hacer. Porque la respuesta fácil es que todo lo que necesitas es programar el micro, es decir implementar el protocolo I2C por software. No es que necesites algo en especial, simplemente conocimiento del lenguaje que vas a utilizar (ASM, C, Basic), leer las especificaciones del I2C y manos a la obra.

Tal vez si eres un poco más específico en tu pregunta pudiéramos ayudarte mejor.

elreypic

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 265
Re:Que se requiere para emular I2C en un micro que no tiene este puerto?
« Respuesta #2 en: 21 de Junio de 2024, 21:19:29 »

Tal vez si eres un poco más específico en tu pregunta pudiéramos ayudarte mejor.
elreypic
Huuuy si que pena.
Uso "CCS" me gustaria implementar I2C en pic 12f508 o similar. Quisiera saber si los recursos de este micro, pueden manejar la memoria 24LC02, solo requiero guardar 2 datos.
« Última modificación: 21 de Junio de 2024, 21:21:33 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Que se requiere para emular I2C en un micro que no tiene este puerto?
« Respuesta #3 en: 21 de Junio de 2024, 22:22:01 »
Es mediante:  #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_SW)

CCS tiene la librería 2402.C  , solo tenés que usarla.  (aunque aclaro que yo nunca la usé :) con el 12F508 )

Código: [Seleccionar]
///////////////////////////////////////////////////////////////////////////
////   Library for a MicroChip 24LC02B configured for a x8 org         ////
////                                                                   ////
////   init_ext_eeprom();    Call before the other functions are used  ////
////                                                                   ////
////   write_ext_eeprom(a, d);  Write the byte d to the address a      ////
////                                                                   ////
////   d = read_ext_eeprom(a);  Read the byte d from the address a     ////
////                                                                   ////
////   b = ext_eeprom_ready();  Returns TRUE if the eeprom is ready    ////
////                            to receive opcodes                     ////
////                                                                   ////
////   The main program may define EEPROM_SDA                          ////
////   and EEPROM_SCL to override the defaults below.                  ////
////                                                                   ////
////                            Pin Layout                             ////
////   -----------------------------------------------------------     ////
////   |                                                         |     ////
////   | 1: NC   Not Connected | 8: VCC   +5V                    |     ////
////   |                       |                                 |     ////
////   | 2: NC   Not Connected | 7: WP    GND                    |     ////
////   |                       |                                 |     ////
////   | 3: NC   Not Connected | 6: SCL   EEPROM_SCL and Pull-Up |     ////
////   |                       |                                 |     ////
////   | 4: VSS  GND           | 5: SDA   EEPROM_SDA and Pull-Up |     ////
////   -----------------------------------------------------------     ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996, 2003 Custom Computer Services          ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////
#ifndef EEPROM_SDA

#define EEPROM_SDA  PIN_C4
#define EEPROM_SCL  PIN_C3

#endif


#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_SW)

#define EEPROM_ADDRESS BYTE
#define EEPROM_SIZE    256

void init_ext_eeprom() {
   output_float(EEPROM_SCL);
   output_float(EEPROM_SDA);
}

BOOLEAN ext_eeprom_ready() {
   int1 ack;
   i2c_start();            // If the write command is acknowledged,
   ack = i2c_write(0xa0);  // then the device is ready.
   i2c_stop();
   return !ack;
}

void write_ext_eeprom(BYTE address, BYTE data) {
   while(!ext_eeprom_ready());
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
}


BYTE read_ext_eeprom(BYTE address) {
   BYTE data;

   while(!ext_eeprom_ready());
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}

« Última modificación: 21 de Junio de 2024, 22:25:36 por Eduardo2 »

Desconectado Aaronsanchez

  • PIC10
  • *
  • Mensajes: 23
Re:Que se requiere para emular I2C en un micro que no tiene este puerto?
« Respuesta #4 en: 22 de Junio de 2024, 00:14:07 »
la respuesta que quieres esta en el libro "microcontrolador pic16f84 desarrollo de proyectos" tiene un capitulo dedicado a como implementar el protocolo i2c por soft ya que este no tiene ese modulo y el ejemplo que da es precisamente manejar una memoria eeprom y bueno muchas cosas mas con el mismo protocolo solo que es en ensamblador, ahora ya que dices que usas ccs y aunque hay librerías para el manejo del modulo y por soft no lo recomiendo ya que se va a saturar el pic que mencionas, lo que te puedo recomendar seria mejor el pic12f683 los mismos pines un poco mas de memoria y este si tiene eeprom interna para que guardes datos sin perderlos muchos dirán que el pic12f675 pero hay que tener cuidado con no borrar la configuración del oscilador y en el 683 no tiene ese detalle bueno hay están las opiniones.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 265
Re:Que se requiere para emular I2C en un micro que no tiene este puerto?
« Respuesta #5 en: 11 de Julio de 2024, 12:55:47 »
Gracias por sus respuestas, tarde en responder porque cambie de operador y estuve casi un mes sin servicio en casa.
Voy a tratar de implementar lo que me dicen y les cuento como va todo.
Si algo parece complicado... es por que esta mal explicado.