Arduino y enc28j60 en Proteus ISIS con foticos.

Otra vez ando trasteando…

Intentando hacer un test rápido de Arduino y enc28j60 en Proteus perdí un par de días. Probé las librerías de Ethernet, EtherCard, UIPEthernet, y al menos el primer día no conseguí poner a andar el cacharro. Así que comento acá lo que hice esperando que a otro le funcione. (al final funcionó con UIPEthernet)

Como siempre, hay 2 caminos: el fácil y el largo.

El Camino Facil

Abrir el ejemplo de Proteus que ya viene instalado. (Yo no vi esto hasta que tuve raaaato perdido)Proteus1

buscando la keyword ethernet aparece un demo de Arduino with ENC28j60

Proteus2

Y taran! Un demo que funciona… Casi. Es necesario tener instalado el Winpcap este paso es importante, y es el primer paso «oscuro». El demo le asigna de manera automáticamente la IP 192.168.95.6. Acá se ingresa la dirección en la barra de direcciones y taran2!

proteus4

El único inconveniente que tengo con este enfoque es que no se me da eso de programar en el IDE de Proteus. De hecho, tuve problemas para que el compilador consiguiera la carpeta de librerías del Arduino, así que no lo intenté mucho más.

El Camino Largo.

Honestamente, el camino largo es una copia defectuosa del camino corto, pero que acomoda el inconveniente de la IDE de Proteus. La solución fue hacer un proyecto en blanco (un No Firmware Project) y agregar un Arduino. El código para el Arduino me lo robo de la pestaña de source code del demo del paso.

proteus5

Y con ese hago un sketch nuevo en arduino. Se compila eso, y se exporta el binario compilado. El binario compilado se carga en el micro.

proteus6

Me robo el enc28j60, y los potenciometros del demo de ethernet, y los pego en el proyecto nuevo. ya con eso es suficiente para que el proyecto corra, y se pueda editar el código:

proteus7

En ese caso no lee los valores de los potenciometros porque no los conecté 😀

El proyecto y el código se encuentran en este link.

Buen provecho.

Soy un poco nuevo en esto del control de versiones, pero desde que comencé a usarlo, me ha agradado bastante la idea, y las herramientas que he «descubierto». Por alguna razón que desconozco, las versiones recientes de mplabx dejaron de dar soporte nativo a git, pero siguen prestandolo a SVN, Mercurial y CVS.

Mplabx está basado en Netbeans (otra IDE importante en este mundillo de la programación) y por esta razón Mplabx compatible con lo plugins de Netbeans. Googleando conseguí nbgit, un plugin de git para netbeans, y decidí probarlo a ver qué tal me va.

Lo primero es descargarse el archivo desde el enlace, así:

pluggit

 

 

Descarguen la version 0.4. para netbeans 6.9. Yo intenté con varias otras versiones, y con la version que suministra la página de netbeans. Todas esas otras instalaciones pedían dependencias que yo no tenía instaladas 😦 así que, a instalar la 0.4-nb-6.9 que no pide nada previo

Mientras se descarga, en el mplabx vamos a menú Tool->plugins y click a pestaña de downloads, y click en el boton de «Add Plugins…»

el mplabx sugiere colocar ahí los plugins, y ahí los puse por cosas de orden. Pero la verdad es que no importa donde lo coloquen.

abrir

Yo puse los plugins en el escritorio

install

Y le damos al boton instalar, lo que genera una ventana como la siguiente

Sin título

Next, Aceptar, Instalar, Continuar al aviso de «Signed but not trusted» y esperar a que se bajen las dependencias. y Finish him.

finish_him

 

Luego vamos a la pestaña de «Instaled», y confirmamos que el nbgit está instalado!!!

Sin título

 

Tip: Reiniciar mplabx, busquen en la pestaña de proyectos el proyecto que quieran iniciar, hacer click derecho en el proyecto, submenu «Versioning», «Initialize git project» yyyy…

fin

PD: Algunos servicios de repositorios que me gustaron:

Fuentes: la imagen de mortal kombat, el plugin.

Gracias a @ozplc y @albertoguerere por la idea xD

drop files here

Ajustando el «extruder multiplier»

Durante las impresiones de piezas para calibrar la MendelMax me encontré que hay veces en las que se intenta imprimir un objeto a 100% de densidad, y un parámetro «desconocido» estaba afectado el relleno de la pieza. Para ilustrar mejor el problema, acá una imagen:

¿Se fijan de ese bulto de lineas diagonales del centro? bueno, a medida que la impresión continua se va poniendo peor y va creciendo más y más. Es un error acumulativo. Lo primero que pensé fue que mi extrusor estaba mal calibrado, así que procedí a recalibrar. Pero para mi sorpresa estaba bien.

Luego, por cosas de la vida vi en un foro de reprap que alguien estaba jugando con el parametro «Extruder Multiplier» (Multiplicador de extrusión) y explicaba que este multiplicador afecta directamente la cantidad de plástico que escupe el cabezal, sin tener que recargar el firmware. Como soy bien flojo, preferí esto, a tener que reflashear el arduino 😀

Primero vamos a necesitar estos dos .STL

Ahora, vamos a imprimir el cuadrado de una sola pared. Es una pieza que se imprime muy rápido, aún a velocidad muy lenta.

Luego, con el caliper (O vernier, o tornillo micrometrico) medir el grosor de la capa superior. Anotar este valor

Es importante que sea sólo de la ultima capa. Medir dos o más puede hacer variar significativamente la medición.

Abrir el Gcode que genera el Slic3r (o lo que sea que ustedes están usando)

Ver la línea que dice «single wall width». Anotar ese valor
Luego realizar esta cuenta:

(ValorMedido^2)/(ValorReal^2)

En mi caso esto sería

corrección = (0.58^2)/(0.62^2) = 0.8751

Vayan al Slic3r, y lo que sea que esté escrito en el «Extrusion Multiplier» multipliquenlo por la corrección. (Observar que mi multiplier está en 0.983 ya que estaba experimentando con este valor antes)

Intenten imprimir la torre de 40mm que también está en el link de arriba.

Todavía me está sobrando un poquito de material, ya que la parte de arriba de la torre se ve un poquito abombada. Esto se corrije variando el multiplicador manualmente, hasta conseguir el ajuste.

Y la base quedó horrible 😀 eso todavía lo tengo que acomodar.

Si me preguntan, la calibración del extrusor mediante los pasos del motor del extrusor es una calibración gruesa, para el que luego hay que hacer una calibración fina usando un método como este o parecido. Si me equivoco y esto no es así, porfa, háganmelo saber.
Por cierto, es plástico ABS a 220 °C, a 30mm/s, en una mendelmax, con un fan de 10cm 12v conectado a una salida de pwm al 10% de 24v.

Pirate bus en ubuntu

Motivación

Una vez que tenemos el bus pirata andando en windows, quizá a algunos les sea útil conectar el dispositivo en ubuntu. Al menos yo desarrollo un poco en ambos ambientes, y estoy migrando poco a poco a linux, así que me puse a investigar cómo podía usar el Bus ahí.

¿Mi pc reconoce al bus pirata?

Lo que encontré, es que el problema reside en si el ubuntu reconoce al ft232, para eso vamos a necesitar ejecutar el comando

ls -l /dev/ttyUSB*

Que en mi terminal resulta algo como esto:

Ese /dev/ttyUSB0 significa que vamos bien, y que el ubuntu reconoció todo bien. Ya el sistema operativo trae instalado los controladores del FT232, porque es una pieza de hardware generica.

¿y que terminal necesito?

Respuesta corta: La terminal de linux! Simplemente tipea

screen /dev/ttyUSB0 11520

Y «enter». Cuando la pantalla se ponga toda en blanco (o negro, depende de cómo tengas configurado el terminal) Le das enter otra vez para que el Bus Pirata te devuelva lo siguiente

Voila!

Fuentes: El comentario de tissit en jumptuck.com

PD: cerré la terminal por accidente, y al intentar conectar al bus pirata con el último comando, se me queda la terminal en blanco y no hace nada. Un proceso tiene ocupado el USB y tengo problemas para ubicar cuál proceso es…

Bus Pirata en Español!

Intro.

Si llegaste hasta acá, probablemente ya sabes qué es el Bus Pirata! Pero en caso de no saber, es un circuito que sirve de interfaz para comunicar desde un puerto USB de la PC con  varios protocolos: Serial, I2C, SPI, 1-Wire, JTAG entre otros.

Cuenta con una sonda de medición de 0 a 6 Voltios (Para muchos sensores analogicos), medidor de frecuencia (Para un contador de revoluciones de motor, p.e.), generador de PWM (Para los servos) entre otras muchas cosas interesantes. Tambien puedes utilizarlo como datalogger.

Si ponen en google «Bus Pirata Venezuela» quizá se sorprendan por la cantidad de resultados arrojados no relacionados con la electrónica. Lo que me hace pensar que a mas de uno le caerá bien esta información en su momento.

Documentación

Las referencias que vamos a estar citando a lo largo de esta entrada son:

Ingredientes:

Como de costumbre, nuestros amigos de electronica magnabit comercializan muchos de los componentes necesarios en Venezuela.

Elaboración:

Lo primero que noté es que los pines del conector FT232 son MUY pequeños, y como mi intención es montar todo en un protoboard primero, voy a necesitar un conector SOIC a DIP.

image

Lo mismo para el conector USB

image

Esos conectores hacen falta debido a que mi intensión es armar primero los circuitos en el proto. Es simplemente una cuestión de estilo. En otro post, lo montamos en un PCB!

El montaje de cuicuito usb debe parecer esto

image

Las líneas azules son «masas», «tierra», «0v» o cómo quieran llamarlas. De cualquier manera, guiense con el esquematico del circuito. Si todo fué bien, al conectar el cable usb, windows7 lo reconoce como un dispositivo, el led rojo parpadea y luego se apaga, y el administrador de dispositivos muestra un puerto COM nuevo, como en la imagen:

Nota: el dispositivo debe estar frio! me pasó que invertí la polaridad de la alimentación del circuito, y el FT232 se calienta… MUCHO.

Nota: el 4066 es un CD4066, no un 74XX4066. Es distinto! El cd4066 es un chip cmos, y se usa en parte como un nivelador de tensión
image

Eso es el circuito mas o menos terminado. No tengo en mi disposición los reguladores mic5205, pero voy a hacer lo posible por conseguir algunos.

Programando el Bus Pirata.

El bus pirata tiene 2 clases de programas: El bootloader, y el firmware. El bootloader es cómo un sistema operativo donde se guardan muchas configuraciones básicas del sistema. El firmware  son cómo los programas que corre nuestro sistema operativo… mas o menos.

Lo importante es que necesitamos cargar el bootloader para que algo funcione.

Desde este enlace descargar v3-PIC Bootloader-v2.hex y el v3-Firmware-v3.6.hex

Y desde acá, descargar P24QP.exe, P24QP.ini y PICBOOT.dll y guardar todo eso en una misma carpeta.

Programar el pic24 con el archivo hex a través del ICS (los 5 pines de programación) (Se programa con el pickit)

Desconectar el programador de pic

Abrir P24QP.exe, con click derecho seleccionar el puerto COM que nuestro bus pirata emula, Y luego click en el ícono «Conect to Device»

Si todo salió bien, deberían tener una imagen como esta! 

Luego, click en abrir, y seleccionar qué imagen var a pasar  (vxx-Firmware-vx.hex). Sustituir las x por el número de la versión que ustedes dispongan.

Click en erase, click en write. La operación de write se tarda bastante… BASTANTE como 2 o 3 minutos. Los leds de la comunicacion van a estar parpadeando todo el proceso.

Al final se abre una archivo .TXT llamado ERROR con unos «errores» si todos los errores están entre las direcciones 0x400 y 0xBFF, entonces no hay problema! en esa zona reside el bootloader, y es normal.

Click a la flecha verde de la derecha y decirle que sí.

Halar el cable usb, y reconectar.

En http://dangerousprototypes.com/2009/07/23/bus-pirate-101/ dicen que el terminal de windows no funciona muy bien con el bus pirata, y recomiendan otro terminal, el Tera Term. Bajen ese zip, y descomprimanlo en alguna parte que puedan localizar fácilmente después.

Una vez bajado, configurado, y conectado, dale a enter, y van a ver el prompt %HiZ> luego escribe el signo ‘?’ y enter otra vez

EUREKA!!!

Comprobación: Comando «G 50 10» debería generarles una señal cuadrada de 50 KHz y 10% de duty cicle en el pin 21 de PIC!

Estoy probando una ROM no oficial en mi android, y no tengo camara. Ergo les debo la foto del la señal del osciloscopio D:

Comentarios

Despues de hacer pruebas sobre los comandos básicos podemos concluir:

  • El comando de PWM (G) trabaja bien
  • El comando de frecuencimetro (F) no trabaja muy bien: Inyectando una señal de 1KHz reporta 768Hz. Desconozco si es un bug o qué.
  • A medida que vaya probando, voy updateando 😀 (30/03/2012)