c

caaruizbe

Usuario (España)

Primer post: 20 oct 2015Último post: 20 oct 2015
1
Posts
0
Puntos totales
1
Comentarios
M
Memoria eeprom reciclada de impresora
Ciencia EducacionporAnónimo10/20/2015

Hola Hace poco hice un post de como utilizar la LCD de una impresora HP, se puede ver aquí. Continuando con el despiece de la impresora, me encuentro con la tarjeta madre y me dispongo a encontrar algo útil entre todos los componentes que hay allí. Encuentro muchas cosas, en principio me interesan los circuitos integrados que me puedan ser útiles. Hay muchas cosas, sin embargo entre las cosas que encuentro me llama la atención (pueden buscar los datasheet en Internet si les da curiosidad): Regulador ld1117, 3.3V (Con esto puedo hacer una fuente para un micro por ejemplo)CPU freescale sc414454 (no encuentro mucha documentación y esta soldado con BGA, así que reciclarlo no es una opción)Varios IC de HP (Como es de esperar no se encuentra ninguna documentación)Memoria ram de 256Mb DDR400 SDRAM K4H561638F (interesante pero no es muy practico reciclarlo ya que tiene 66 pines, la dejare guardada por si algún día hace falta)IC de Texas Instruments SN104961PJP (no hay documentación así que será algún diseño a medida)Un IC LM324 (Un IC muy popular ya que es barato y tiene 4 amplificadores encapsulados)Un AFE (analog front end) WM8152 (básicamente un conversor análogo digital para el sensor del escaner, se podría hacer un proyecto interesante con esto)Un IC que protege de sobre corrientes TPS2043AD (La impresora lo usa para protegerse si hay un corto en el puerto usb), (útil si en un diseño se pretende que el usuario conecte cosas y el usuario es un poco torpe y el puerto propenso a hacer corto) (una vez vi un ordenador en el que el dueño conecto un pendrive al revés y puso en corto circuito el puerto)Varios IC CBT3244A (Interruptores de buses, básicamente dejan pasar la comunicación de un bus o la cortan, se podrían usar como multiplexores)Un EEPROM de 256 Kb 4256BWP (Kb, la b en minúscula, es decir que en realidad son 32KBytes) (este IC va a ser el tema de este post) LA conclusión de esto es que a impresora es como un mini ordenador (de poca potencia, eso si), posee una CPU, una lcd, memoria ram, memoria rom (EEPROM) y algunos periféricos. Hoy en día es bastante común encontrarse con sistemas así. Si quisiera, podría extraer el programa almacenado en la EEPROM (si no esta encriptado), analizarlo y así tratar entender el funcionamiento del procesador, sin embargo esto tardaría mucho tiempo y al final, es una simple impresora rota , normalmente la habría tirado ya a la basura, pero hago esto por aprender un poco Una cosa, en realidad esta EEPROM es barata, una búsqueda rápida me muestra que este IC cuesta alrededor de 2 euros (comprando una unidad), así que su reciclaje de la manera que vamos a tratar aquí no es muy rentable, sin embargo lo hago mas con la mentalidad de aprender. De este 4256BWP se encuentra documentación y al leerla me doy cuenta que es muy similar y compatible con el la eeprom 24LC256 de la cual ya existen algunas librerías para arduíno (genial, esto me quita trabajo) Lo primero que debo hacer es desoldar el IC, el cual es de montaje superficial, para luego soldarlo en un adaptador y así manejarlo con facilidad (si no hay adaptador habria que hacer al modo dead bug, busquenlo en google si no saben lo que es). Para desoldar la memoria hago uso de mi estación de soldadura, la cual cuenta con una pistola de aire caliente, en Internet hay muchos vídeos de como usala (aquí hay uno, esta en ingles pero es muy gráfico). Extraigo la memoria y la sueldo en un adaptador, el resultado: Cuento con una trajeta compatible con arduino, la cual posee un conector Grove ( Aquí hay información del conector) El pinout de este conector funcionando para I2C es: GNDVCCSDASCL Así que aprovecho los pines libres del adaptador para conectar la memoria fácilmente al arduino el resultado final es este: Para poner a funcionar la memoria en Arduino busque la existencia de algún código en Internet, para esta memoria 4256BWP no encontre nada, sin embargo mirando el datasheet encuentro que esta memoria es muy similar (para fines prácticos idéntica) a la EEPROM 24LC256. Afortunadamente de la 24LC256 hay ejemplos. El siguiente ejemplo lo saqué de aquí /* * Use the I2C bus with EEPROM 24LC64 * Sketch: eeprom.pde * * Author: hkhijhe * Date: 01/10/2010 * * */ #include <Wire.h> //I2C library void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) { int rdata = data; Wire.beginTransmission(deviceaddress); Wire.send((int)(eeaddress >> 8)); // MSB Wire.send((int)(eeaddress & 0xFF)); // LSB Wire.send(rdata); Wire.endTransmission(); } // WARNING: address is a page address, 6-bit end will wrap around // also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) { Wire.beginTransmission(deviceaddress); Wire.send((int)(eeaddresspage >> 8)); // MSB Wire.send((int)(eeaddresspage & 0xFF)); // LSB byte c; for ( c = 0; c < length; c++) Wire.send(data); Wire.endTransmission(); } byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) { byte rdata = 0xFF; Wire.beginTransmission(deviceaddress); Wire.send((int)(eeaddress >> 8)); // MSB Wire.send((int)(eeaddress & 0xFF)); // LSB Wire.endTransmission(); Wire.requestFrom(deviceaddress,1); if (Wire.available()) rdata = Wire.receive(); return rdata; } // maybe let's not read more than 30 or 32 bytes at a time! void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) { Wire.beginTransmission(deviceaddress); Wire.send((int)(eeaddress >> 8)); // MSB Wire.send((int)(eeaddress & 0xFF)); // LSB Wire.endTransmission(); Wire.requestFrom(deviceaddress,length); int c = 0; for ( c = 0; c < length; c++ ) if (Wire.available()) buffer = Wire.receive(); } void setup() { char somedata[] = "this is data from the eeprom"; // data to write Wire.begin(); // initialise the connection Serial.begin(9600); i2c_eeprom_write_page(0x50, 0, (byte *)somedata, sizeof(somedata)); // write to EEPROM delay(10); //add a small delay Serial.println("Memory written"; } void loop() { int addr=0; //first address byte b = i2c_eeprom_read_byte(0x50, 0); // access the first address from the memory while (b!=0) { Serial.print((char)b); //print content to serial port addr++; //increase address b = i2c_eeprom_read_byte(0x50, addr); //access an address from the memory } Serial.println(" "; delay(2000); } Con este código encuentro que la EEPROM funciona correctamente. Más que reciclar la EEPROM, la finalidad es aprender, mirar dentro de las cosas y encontrar como funcionan, y en este caso extraer componentes útiles y conocer la existencia de otros. Si les ha gustado y han aprendido algo, dejen sus comentarios.

0
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.