rodralez labs

El producto de una ecuación muy compleja

  • Categorías

  • Tag Cloud

  • Comentarios recientes

Microchip: bugs en el silicio

Posted by Rodrigo G. on 20th July 2007

Actualmente en mi trabajo estoy desarrollando sistemas embebidos basados en microcontroladores (uC) PIC de la empresa Microchip, en particular estoy usando el 18F6722. La aplicación que estoy desarrollando, como tantas otras, necesita guardar el valor de algunas variables en una memoria no volátil, por lo que decidí codear algunas rutinas para grabar datos en la memoria EEPROM del PIC. Como buen desarrollador que soy (autobombooo), decidí primero leer el manual del integrado (¡estas son cosas que uno aprende a la fuerza !). En la sección referida al manejo de la memoria EEPROM el documento hace referencia a una misteriosa especificación llamada specification D124. Buscando y buscando me topé con un documento de la gente de Microchip llamado PIC18F6620/8620/6720/8720 Rev. A3 Silicon/Data Sheet Errata. Mmmm… ¿errata?… esto huele mal. Este documento es un compendio de errores que se encuentran en el manual de estos PIC’s y eventuales errores en su funcionamiento.
Aparece la especificación que estaba buscando, la cual indica la cantidad de veces que Microchip garantiza que se puede borrar/grabar un byte de memoria EEPROM en forma confiable (entre 1 y 10 millones de veces), los cuales son valores estándares, o sea, nada nuevo aquí. Saciada mi curiosidad, seguí leyendo el documento y me encontré con cosas realmente aterradoras.
Una de ellas es la siguiente: si la primera instrucción que se pone en la dirección de RESET de la memoria ROM del PIC (dirección 0×0000) es un GOTO, esta instrucción en contados casos no se ejecuta, lo que implica que el sistema NO arranca, algo para nada trivial. En código ensamblado:

ORG 0×0000
GOTO    main;
 

Por suerte la gente de Microchip nos tira un work around, o dicho en castellano una forma de safar de este posible problema, muy pero muy pero muuuuuuy ingeniosa, la cual no es más ni menos que poner un NOP como primera instrucción en lugar del GOTO. Qué genialidad ! ;)

ORG 0×0000
NOP
GOTO    main;
 

Suena un poco a tomada de pelo, pero es lo que aconsejar hacer. De todas formas generalmente la primera instrucción que se pone en la dirección de RESET de un microcontrolador es aquella que deshabilita todas las interrupciones, para de esta forma inicializar a nuestro gusto los periféricos del uC y algunas variables sin que algo venga a “golpearnos la puerta”.

ORG 0×0000
CLRF     INTCON,A
GOTO    init;
 

Si uno sigue leyendo esta fe de erratas se puede encontrar con otros bugs escalofriantes ¿Quién dijo que sólo el software tiene bugs? No señor, a veces también vienen en encapsulados de plástico con patitas.

Tags: ,
Posted in I+D | No Comments »

Sueldo de un desarrollador

Posted by Rodrigo G. on 10th July 2007

El año pasado The Ganssle Group, un sitio dedicado a consultoría para empresas que desarrollan sistemas embebidos, llevó a cabo una encuesta, de la cual participaron 491 personas, sobre el monto de los sueldos que ganan desarrolladores de sistemas embebidos alrededor del mundo. De la misma se desprende que un ingeniero junior, con [0-4] años de experiencia, gana al año: en EEUU U$D 62.000, en Europa U$D 55.000, en Australia U$D 58.000, en Canadá U$D 50.000 y en la India U$D 10.000. Tomando el sueldo de lo puede llegar a ganar un ingeniero recién recibido en Argentina que se dedique a esta área de desarrollo, digamos unos $2500 (algo así como U$D 817), vemos que al año gana U$D 9.800… un poco menos de lo que ganaría en la India !!. Tampoco uno pretende ganar lo mismo que un ingeniero de Alemania, pero de la India… como que dan un poco ganas de llorar. Por otro lado, hoy leo en Clarín que “Los ejecutivos y los profesionales argentinos están entre los peores pagos de América Latina” y todo me cierra. Pero bueno, no todo es dinero en la vida… también hay acciones, bonos, cheques, joyas, lingotes de oro, antigüedades, y tantas otras cosas que hacen que uno duerma más tranquilo, no? :)

Actualización 01/12/2008: visto y considerando que estoy viendo que varias personas llegan a esta entrada en mi blog buscando información respecto a cuánto gana un ingeniero en Mendoza, puedo contar que hasta octubre de 2008 IMPSA estaba ofreciendo $2900 (en mano) para un cargo de ingeniero programador de PLC.

Tags: ,
Posted in I+D | No Comments »

LM2576: fuente switching de bolsillo

Posted by Rodrigo G. on 23rd October 2006

Fuente switchingResulta que en mi trabajo necesitaba diseñar una fuente continua que entregara 5 volts, 3 amperes de salida y fuera alimentada con entre 12 y 24 volts a la entrada. La misma debía ser muy estable (es decir, regular muy bien), ya que se usará para alimentar una impresora térmica, las cuales para funcionar correctamente requieren un pico de corriente de amplitud algo alta, es decir, mucha corriente en un lapso de tiempo breve.

Estaba claro que el viejo y siempre fiel regulador lineal LM7805 no me iba a servir, ya que estos normalmente entregan hasta 1A. Cuentan leyendas urbanas que algunos avezados técnicos les dan llegado a sacar 1.5A, pero estimo que usando un disipador del tamaño de un estadio de futbol :)

Entonces decidí que diseñaría una fuente switching DC-DC, las cuales por definición son más eficientes que las lineales, ocupan menos espacio, pero claro, más complejas de diseñar y más caras, o por lo menos estos eran conceptos que me habían quedado en mi paso por la Universidad. Pero estos prejucios se derrumbaron cuando me topé con este integrado: el LM2576 de National Semiconductors.

Tiene un encapsulado parecido al de un LM7805, pero con más pines. Si no se presta atención son fáciles de confundir. La hoja de datos del LM2576 incluye una guía paso a paso para diseñar la fuente switching que se requiere. A partir de esta guía se obtiene la BOM (bill of materials) completa, es decir todos los componentes necesarios con los códigos del fabricante incluidos. Todo lo que tuve que hacer fue poner estos códigos en Digikey, comprar los componentes y sentarme ansioso a esperar que llegaran.

Una vez que tuvimos el paquete de TNT en nuestras manos, armamos la fuente en un tris. Después de pruebas exhaustivas debo decir que la fuente anduvo perfecta. Entregó los 3A en forma continua, la máxima corriente que el fabricante garantiza, claro que el encapsulado del integrado se calentó un poquito (llegó a los 80ºC), pero no explotó, lo cual no es poco :) Esto se podría solucionar con un disipador más grande o ventilación forzada. Algo en lo que se debe tener mucho cuidado (y esto la hoja de datos lo señala) es que todas las líneas de tierra en el PCB deben ser lo más cortas posibles y unirse SOLAMENTE en un punto. Se degrada bastante el rendimiento si esto no se cumple. Pero bastante, debido a inductancias parásitas y realimentaciones espúreas.

La fuente es algo más cara que una armada con un regulador lineal, pero también entrega el triple de corriente y, por ende, el triple de potencia, algo a tener en cuenta a la hora de decidir por cual diseño volcarse: switching o lineal. Haciendo algo de futurología, se puede pensar que estas mini fuentes switching con el paso del tiempo se volverán cada vez más populares. Tienen varios puntos a su favor, y desde ya, mi bendición ;)

PD: ya era hora que posteara algo en esta categoría, no? :D

Tags: ,
Posted in I+D | 22 Comments »