jueves, 25 de mayo de 2017

Las impresoras, una lucha entre usuarios y compañías fabricantes.

Volver


Las impresoras, una lucha entre usuarios y compañías fabricantes.

Recuerdo mi primera impresora de chorro de tinta , HP500 , la compré de segunda mano. La impresora la utilizaba tanto en un viejo PC como en el buen Amiga, dando un resultado impecable.
Incluso tenía un cargador de tinta, que con cierta dificultad y manchando bastantes papeles, conseguía recargar los cartuchos. Algún día la he rescatado de su olvido, y con una limpieza de los cabezales mediante agua oxigenada y alcohol volvía a la vida con total normalidad. Para los ordenadores actuales que no disponen de puerto paralelo, utilizo un conversor de USB→Paralelo. El caso es que la vieja funciona perfectamente.
En las viejas impresoras se utilizaba los motores de paso a paso. En las nuevas en muchos casos se sustituyó por un motor de escobillas, mas rápidos y baratos. También incorporaron una banda óptica  que hacía mas preciso el movimiento del carro de impresión.
Es aquí donde quiero llegar, la fabricación de estas impresoras es perfecta, pueden durar casi  eternamente cambiando los cartuchos.
Esto lo vieron la compañía fabricante, no podían fabricar una impresora que podía durar para siempre. Para mas problemas los cartuchos se podían recargar con tintas baratas, no tan buenas como las originales, pero para la mayoría  de los usuarios servía.
Las compañías fabricantes pensaron que esto sería su ruina, no recaudarían nada o poco por los cartuchos. Creo que tuvieron una reunión (especulaciones mías  ;)  ) , y se pusieron de acuerdo en incorporar un chip que identificaba cada cartucho, suele ser una memoria EEPROM , en algún caso es una 24c02 .
Además se incorporaba un contador en la propia impresora, estos contadores llevaban el numero de páginas que llevaba impreso la impresora, y llegados a un numero de páginas la impresora deja de funcionar. En teoría se debía cambiar el cabezal en el servicio técnico, pero si alguno ha preguntado el precio se dará cuenta que vale casi  tanto como una impresora nueva.
En bastantes casos las compañías fabricaban impresoras que se las vendían a otras compañías donde cambiaban el nombre y colocaban algún tipo de dispositivo mecánico para impedir que unos consumibles se utilizaran de unas para otras. Como ejemplo HP fabricó impresoras para Olivetti, donde Olivetti cambiaba alguna parte del cartucho y solo servían sus propios consumibles. Canon también comercializo impresoras que fabricaba HP, solo cambiaba una pestaña en los toner para que no funcionara los consumibles de HP en sus impresoras. Yo cortaba la pestaña de los toner de HP  y los utilizaba en mi LBP2900, ( bricomanía de un informático) .
Cuando salió Windows 7 muchos se entrañaron de que no existieran drivers para determinadas impresoras, era muy fácil reescribir el drivers de XP para Win7, pero no se hizo. En muchos centros oficiales se llegaron a tirar cientos de impresoras que funcionaban bien, pero al actualizar a Win7 ya no servían. Un amigo aún no entiende que su impresora HP1020 no funciona en su flamante Win7.
Yo con linux no sufro estos percances, siempre hay drivers de casi cualquier impresora, y si es vieja mejor.
En muchos casos un cartucho que no imprime en una impresora por estar vacío (teóricamente) a pesar de saberse que esta lleno por su peso, en otra impresora funciona perfectamente. No es problema de los contactos, es el problema del contador de paginas.
La última que preparo HP fue controlar el numero de serie de cartucho, y a través de internet llevaba un control de los cartuchos que estaba recargados e impedir que estos funcionasen. De la noche a la mañana al actualizar los drivers a través de internet, nos podíamos encontrar que la impresora dejase de funcionar indicando que el cartucho estaba roto. Muchas oficinas les paso esto pues fueron las impresoras de oficina las primeras  en que HP  modificó los drivers. Esto obligó a pasar por caja y comprar consumibles originales. Al ver la que se montó, HP  reculó y dijo que cambiaría los drivers para que las impresoras admitiesen los consumibles reciclados, pero el mal estaba hecho. Ahora HP compra el negocio de impresión de Samsung por 935 millones de euros, cada vez hay menos opciones.

El método de engañar a algunos cartuchos HP.

No solo HP hace trampas, Epson tiene contadores internos de páginas y llegados a un numero salta un error y la impresora deja de imprimir. Muchos tiran las impresoras y compran impresoras nuevas sin saber que su impresora funciona perfectamente. Existe programas que resetean el contador de papel, el programa es wicreset, yo en principio no me lo creía pues te pedían 9€, pero te dejaban probarlo mediante una licencia trial dejando el contador al 90% . Yo lo probé y funcionó a la primera, y por arte de magia la impresora cobro vida.
También para dar vida a los cartuchos de Epson tengo un reseteador de cartuchos que compré hace años, y que aún hoy funciona perfectamente. En algunos casos compro cartuchos a 3€ y no merece la pena rellenarlos.

Reseteador de cartuchos epson.

Las impresoras Brother tienen un modo de mantenimiento que mediante una combinación de teclas pones a cero todos los contadores. De las impresoras Brother tengo una experiencia agridulce. Por una parte considero una impresora bastante buena , pero aparte del contador de paginas, les suele fallar el cabezal, se suele encharcar internamente, y su limpieza es un tanto complicada, cuando no imposible. Y como quieras cambiar el cabezal, el precio es de 54€ . No merece la pena.

Lugar donde se encharca la tinta.

Hace tiempo me dieron una impresora Samsung CLP 300 , es una impresora a color que tiene unos años. Cuando le hice un test de los cartuchos de tinta me los daba casi vacíos, pero yo los miraba y aún tenían bastante polvo de toner. Investigando por internet descubrí que se podían resetear para que indicase que estaban llenos . Mediante un antiguo grabador de EEPROM y con los ficheros correspondientes a cada color coloqué los indicadores de los cartuchos al 100%.

Reseteando toner Samsung CLP 300.

Como vemos la vida del usuario es dura, y los centros de reciclaje están llenas de impresoras que funcionan perfectamente.

Saludos.
Juan Galaz





viernes, 12 de mayo de 2017

MP3 DFPLayer Mini Arduino


MP3
DFPLayer Mini
Arduino



Reproducir un fichero de MP3 mediante arduino  es imposible, no tiene suficiente potencia de cálculo.
Reproducir ficheros WAV en arduino es posible, pero haciendo ciertas trampas, pero se puede a tasas de muestreo bajas.
Para poder reproducir ficheros mp3 usamos un módulo llamado DFPLayer Mini , cuesta menos de 3€ y tiene varias interfaces para programarlo, Serie, USB, mediante botones.
Dispone de un zócalo para lectores de tarjetas mini SD donde se colocan los ficheros mp3 a reproducir.
Tiene salida stereo, pero además se puede colocar un pequeño altavoz para oír directamente sonidos sin necesitar amplificador, genera hasta 3W de potencia.

Si queremos hacer una prueba rápida del DFPLayer Mini debemos hacer este pequeño montaje.

Recordar que el módulo en reposo consume 20mA , y reproduciendo puede superar los 100mA, debemos tener cuidado.

Para controlar el DFPLayer Mini desde el arduino existe una librería bastante buena  DFRobotDFPlayerMini-master.zip , se puede bajar desde: https://github.com/DFRobot/DFRobotDFPlayerMini .
Estuve haciendo pruebas con dicha librería y funcionaba bastante bien, pero no trabajaba en versiones antigua de arduino.
Como me gusta investigar, cree mis propias rutinas para controlar el DFPLayer Mini, y realicé un par de programas para probarlas.
La conexión del arduino al módulo DFPLayer Mini es como se ve en la imagen.

La resistencia de 22 ohmios que se coloca en serie con el altavoz para limitar el consumo.
La resistencia de 1K se coloca para adaptar los niveles, el arduino funciona a 5V y el módulo internamente a 3.3V .
La patilla 16 (Busy) del modulo la conectamos a la entrada D2 del arduino, nos indica si el módulo está reproduciendo algún fichero.





El primer programa escucha el puerto serie del arduino que se encuentra conectado al PC. Interpreta las ordenes el arduino y las manda al módulo.
Las ordenes posibles son:
NEXT , PREV , PLAYN , VOL+ , VOL- , VOLUMEN , EQA , MODE , SOURCE , STANDBY , NORMAL , RESET , PLAY , PAUSE , FOLDER , VOLUMEN , REPEAT , HELP
Si tecleamos en la consola HELP nos visualizar las posibles ordenes, da igual mayúsculas que minúsculas.

Ejemplos:
playn 3           -Nos reproduce el tercer fichero.
folder  1,2       -Nos reproduce la segunda canción del primer directorio.
pause             -Para la reprodución
play              -Continua la reproducción.
volumen 20        -Pone el volumen a 20  volumen entre 0 y 31.


Comandos del DFPLayer Mini

En las rutinas que he realizado no activo el modo respuesta, por lo que no leo las repuesta del DFPLayer Mini.


El segundo programa es un ejemplo de reproducir unas serie de ficheros mp3, espera a que termine un fichero para empezar el siguiente.

void loop()
{
  playw("folder 1,1");
  playw("folder 1,2");
  playw("folder 1,3");
  playw("playn 13");
}


Para la estrucura de ficheros y directorios se debe realizar de esta forma.

Podemos utilizar nombres en  ficheros y directorios, pero su reprodución y selección de ficheros es un tanto complicada.


PROGRAMA1

PROGRAMA2

En próximas entregas pienso realizar un reloj que toque las horas mediante el reproductor de mp3.

Saludos.
JUAN GALAZ


Bibliografía:
https://github.com/DFRobot/DFRobotDFPlayerMini .
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
https://www.luisllamas.es/arduino-mp3-dfplayer-mini/
http://stonez56.blogspot.com.es/2015/03/arduino-dfplayer-mini-mp3-module.html


lunes, 8 de mayo de 2017

Conceptronic C05-156 Usb 2.0 Cable USB 2.0 VistaTM


Conceptronic C05-156 Usb 2.0 Cable USB 2.0 VistaTM



Bus 003 Device 005: ID 067b:25a1 Prolific Technology, Inc. PL25A1 Host-Host Bridge

El Windows 7 lo detecta automáticamente, pero lo hace como sincronizador de cuentas de usuario. Si lo usamos para eso solo debemos de selecciona el emisor de ficheros y el receptor de ficheros, y aceptar las carpetas que debemos sincronizar . Automáticamente empezara a sincronizar los datos.
También podemos utilizar en los dos ordenadores el programa que bajemos de:
y podremos intercambiar los ficheros que queramos.
La velocidad bajo Windows 7 resultó en las pruebas de 22 Megas/segundo.

En Linux no existe un programa especifico, debemos crear una red mediante el cable USB.
En cada ordenador y como root.
PC1
-----
ifconfig usb0 192.168.2.1

PC2
-----
ifconfig usb0 192.168.2.2

Si tecleamos ifconfig en algun ordenador nos saldrá:

usb0 Link encap:Ethernet direcciónHW 4a:2d:cb:ff:48:93
Direc. inet:192.168.2.1 Difus.:192.168.2.255 Másc:255.255.255.0
Dirección inet6: fe80::d4dd:8c87:f13c:364/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
Paquetes RX:145 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:150 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:29505 (29.5 KB) TX bytes:27553 (27.5 KB)

Eso significa que hemos creado la red.
Ahora en uno de los ordenadores para probar la red creamos un servidor ftp. Para este ejemplo utilizaremos el ftpd , no es el mejor y en algunas distribuciones se quitó debido a que la conexión no esta codificada y mediante un lector de red se puede sacar las contraseñas, pero para este caso sirve.
Ahora solo debemos probar el servidor ftp desde el otro ordenador.
Con el programa gftp instalado o con cualquier otro tecleamos.

PC2- gftp 192.168.2.1 usuario contraseña

Aquí veremos como podemos copiar ficheros a una velocidad de 24M/s.


Saludos
Juan Galaz

miércoles, 12 de abril de 2017

Mi colección de cámaras web

Me paso los domingos visitando un rastrillo donde encuentro todo tipo de aparatos que tira la gente.
Viendo la cantidad de cámaras web que la gente retira debido a que los portátiles ya incorporan cámara, se me ocurrió hacer una pequeña colección.
Por lo general no suelo pagar mas de 2€, esto debido a que algunas veces algunas cámaras no funcionan y no me puedo arriesgar.
Existen cámaras buenas, malas y muy malas, hay de todo.
Lo normal es probarlas bajo linux, evita volverse loco en windows para encontrar los drivers.
De todas las que tengo  me quedo con:

Bus 004 Device 007: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye

Es una cámara para la playstation  , y funciona perfectamente en un PC.
Para linux no hace falta drivers y además de llegar a 120 fps en la resolución de 320x240 dispone de 4 micrófonos, es un lujo. Se puede comprar en la tienda GAME por 5€, de segunda mano

Mi colección de cámaras web

sábado, 4 de marzo de 2017

Lapiz de digitalizadora Medion MD41217

Página principal
Lapiz
de
digitalizadora Medion MD41217



Un día un amigo me comento que se le había estropeado una tableta digitalizadora Medion MD41217 . Me la trajo y después de probarla con un lápiz electrónico y funcionar, descubrimos que lo que estaba roto era su lápiz.
Mirando por internet encontramos el lápiz

https://es.aliexpress.com/store/product/Huion-P68-Wireless-Graphic-Drawing-Replacement-Tablet-Pen-for-Designer-Artist-Teacher-Architect-Student/2190168_32687820801.html?spm=2114.12010408.1000016.1.5J0JB1&isOrigTitle=true


Estaba a un precio razonable, y tenía buena pinta. Según las especificaciones era compatible con la  Medion MD41217 .
Se pidió y al poco tiempo llegó. Después de muchas prueba, resulto que no funcionaba. Algunas veces esporádicamente pulsando uno de los botones conseguíamos que se moviera el cursor, pero eso era todo.
Comunicándonos con el vendedor y después de varios vídeos, llegamos a un acuerdo de reembolso de parte del dinero. Creo que es un vendedor serio, lo recomiendo.
Después de un mes o mas, y aburrido de ver la   tableta digitalizadora  y el lápiz que no funcionaba y si ninguna utilidad, me puse a investigar sobre el lápiz estropeado.
Lo primero que hice es comprobar si emitía señal los dos lapices, el mio que funcionaba, y el que no funcionaba. Puse una bobina pequeña de las que tengo, a las pinzas del osciloscopio. Luego las acerqué a los dos lápices y comparé resultados. El resultado es el siguiente:
El lápiz que funcionaba emitía una señal alterna de 166KHz , y el lápiz que me compré por aliexpress emitía una señal  alterna de 250KHz. Estaba claro, aunque el vendedor decía que era compatible con la tableta de Medion, en las pruebas resulto que no era cierto.
La solución era desarmar el lápiz e intentar bajar la frecuencia de emisión.

Vemos en la imagen  del lápiz desarmado, existe una bobina que es la que emite la señal a la tableta.
Como todo el que entienda de electrónica sabe, que si aumentamos  el numero de vueltas de una bobina que se encuentra en estado de oscilación, reducimos la frecuencia de oscilación.

Original.


Añadida espiras

Añadí unas cuantas vueltas, mas de las necesarias, y volví a medir la frecuencia. Resultó que había reducido la frecuencia de oscilación mas de la cuenta. Empecé  a quitar vueltas hasta conseguir la frecuencia lo mas cercana posible a 166KHz. Ahora acerqué el lápiz a la tableta y comprobé que funcionaba,volví a montar el lápiz. El lápiz estaba arreglado.
He de decir que la medición de la frecuencia está realizada midiendo la onda en el osciloscopio, por lo cual no es del todo exacta, pero para este caso funciona.

Saludos.
Juan Galaz


viernes, 17 de febrero de 2017

Instalación de Debian 8 desde usb


Página principal

Instalación de Debian 8 desde usb


Voy a intentar explicar todos los pasos que he seguido para crear un usb que sea arrancable para poder instalar  Debian 8 .
Como hago bastantes pruebas de instalación de distribuciones linux, necesito que sea lo mas rápido posible, y esto se hace mediante la instalación desde un usb.
La instalación normal se realiza bajando los 3 DVD de la distribución debian, en anteriores versiones eran 5 DVD, se han rebajado el numero de paquetes de la distribución perdiendo algunos paquetes obsoletos o que no son mayoritariamente usados.
Pero puede llegar el caso de que algunos ordenadores no incorporen lector de DVD, y en estos ordenadores solo se puede instalar desde usb.
Otro de los casos que puede ocurrir es que solo tengamos el primer DVD de la distribución, y los demás paquetes los instalemos desde la red. Los que tenemos fibra óptica o una conexión rápida somos unos privilegiados, la mayoría de la gente tiene poca velocidad, y algunas personas que viven en casas aisladas solo tienen conexión vía teléfono a precios altos y con un tope de datos mensuales. En este artículo  voy a crear un usb arrancable con el instalador de la distribución de linux Debian 8. También añadiré una serie de paquetes que utilizo normalmente, juegos, desarrollo, emuladores, etc.
Para hacerlo mas bonito uso una memoria usb de 8G míni, no es la mejor ni la  memoria mas rápida  que tengo, pero es tan diminuta que la puedes llevar en cualquier lado, y no veas como se queda la gente cuando  sacas la memoria, tanto poder en poco mas de 1 cm2. ;)



Existen numerosos tutoriales en internet de como instalar Debian 8 desde un usb.

https://www.debian.org/releases/stable/i386/ch04s03.html.es
https://elbauldelprogramador.com/iniciar-debian-desde-usb/
https://diariodeunalinuxera.com/2015/10/20/crear-un-usb-booteable-de-cualquier-distribucion-gnulinux-desde-la-terminal/
https://exdebian.org/foro/instalar-debian-8-desde-usb-solucionado

La forma normal que tiene la gente de hacer un usb arrancable es:
Siendo administrador.
su
Localizar donde está la memoria usb
fdisk -l
Desmontamos la memoria usb
umount /dev/sdc
Cuando estemos seguro de donde está (cuidado si nos equivocamos formateamos el disco duro)
mkfs.vfat -F 32 /dev/sdc -I
Copiamos la ISO en nuestra memoria usb
dd if=ImagenDebian.iso of=/dev/sdc
Terminamos de copiar los datos que puedan quedar en cache por si las moscas...
sync


A la hora de copiar la iso a nuestra memoria usb existen varios métodos:
dd if=ImagenDebian.iso of=/dev/sdc
dd if=/ruta/debian.iso of=/dev/sdb bs=1M; sync
cat debian.versión.iso > /dev/sdX ; sync
dd if=/your/path/debian-7.5.0-i386-netinst.iso of=/dev/sdX bs=4M sync

Todos los métodos de copiado hacen lo mismo, aunque algunos sean mas rápidos.

Esta forma está bien, pero tiene sus inconvenientes:
La memoria de 8G solo queda grabada con 4.5G el resto se inutiliza.
La memoria se queda en modo de solo lectura.
En algunos casos ni siquiera se monta en windows, tiene formato extraño.
En muchos casos después de instalar debian, si queremos instalar mas cosas no podemos intalar desde el usb, debemos emplear la red o un DVD.


Ahora empecemos con mi método.

Lo primero es bajar el programa unetbootin-linux-625  , elegir la versión que corresponda a vuestro sistema. https://unetbootin.github.io/ 
Confieso que por motivos que no vienen al caso utilice la versión de windows (quien esté libre de pecados que tire la primera piedra).
Después de un rato (nos da tiempo a mirar el correo) tenemos nuestro usb arrancable para poder instalar debian 8.
Probemos nuestro usb  instalando en una partición de nuestro disco duro. Comprobamos que la instalación  desde el usb es mucho mas rápido que desde el DVD.
Aclaremos que para poder arrancar desde el usb debemos pulsar una tecla (F1 al F12 dependiendo de nuestro ordenador)  cuando arranca el ordenador, en mi caso es F11.
Cuando tengamos instalado y funcionando el debian 8 en nuestro ordenador, nos damos cuenta que no se puede instalar nada mas desde el usb. Esto me confundió pues yo sabia que había muchos mas paquetes en el usb.
Después  de muchas investigaciones y pruebas, descubrí un fichero donde se encuentra el listado de todos los paquetes que existen en el usb.  Este fichero se encuentra en: /dists/jessie/contrib/binary-i386/Packages.gz

Para que me reconozca los paquetes contenidos del usb debemos realizar lo siguiente:
-Crear un directorio llamado main en el USB.
-Copiar el fichero que esta en el directorio del USB 
    /dists/jessie/contrib/binary-i386/Packages.gz 
          al  directorio del USB creado
    /main

Ahora debemos editar el fichero /etc/apt/sources.list y añadir
deb file:/media/usuario/8G2/ main/
Donde 8G2 es el nombre del usb  y usuario es el nombre del usuario que ha montado el dispositivo.
Ya podemos comprobar que en el instalador de paquetes synaptic reconoce el nuevo repositorio de paquetes, si lo tenemos ya abierto debemos recargar la información de paquetes.
Desde un terminal también podemos teclear  apt update para actualizar la información de paquetes.

Crear repositorios deb en disco duro o usb.

El tener que meter una y otra vez los disco de instalación de debian, o utilizar la red donde no es muy rápida, es un tanto molesto.
Crear nuestro propio repositorio en un disco duro o usb es muy práctico,  y bastante veloz a la hora de instalar paquetes.
Puedes hacer una selección de paquetes desde synaptic , instalándolos o solo bajarlos, y los almacena en /var/cache/apt/archives/  . Ahora los copias en el directorio de la memoria usb que quieras , yo los copio a /8G2/debian8/archives/   .
Con el programa dpkg-scanpackages creas un archivo comprimido Packages.gz donde se encuentran el listado de todos los paquetes. Este debe ser colocado con los paquetes que has añadido.
Ejemplo de como se crea el paquete comprimido y su colocación junto a los paquetes:
    dpkg-scanpackages archives /dev/null | gzip >archives/Packages.gz
En este ejemplo se creó el archivo comprimido con la información de todos los paquetes *.deb que existían en el directorio archives y lo coloco en el directorio archives.
Ahora solo se tiene que colocar el nuevo repositorio en el fichero de configuración
   /etc/apt/sources.list  .
Por ejemplo si tengo la memoria usb que se monta en    /media/usuario/8G2  , y el repositorio de archivos está en    /debian8/archives   pondríamos en el archivo /etc/apt/sources.list la siguiente línea:
   deb file:/media/usuario/8G2/debian8/    archives/

Mi configuración de /etc/apt/sources.list  es la siguiente:

deb file:/media/seta/8G2/debian8/     archives/ 
deb file:/media/seta/8G2/     main/
deb http://ftp.es.debian.org/debian/ jessie main contrib non-free


Donde 8G2 es el nombre del usb  y seta es el nombre del usuario que ha montado el dispositivo.

Ahora cuando voy al pueblo donde internet solo existe en el bar y sus alrededores, puedo instalar mi distribución linux Debian 8  desde mi diminuta memoria usb. :)
He estado haciendo todas las pruebas con la versión Debian 8.7.1 funcionando a la perfección, y he visto que se han arreglado bastantes fallos.

Saludos.
Juan Galaz

Bibliografía:

https://www.debian.org/releases/stable/i386/ch04s03.html.es
https://elbauldelprogramador.com/iniciar-debian-desde-usb/
https://diariodeunalinuxera.com/2015/10/20/crear-un-usb-booteable-de-cualquier-distribucion-gnulinux-desde-la-terminal/
https://exdebian.org/foro/instalar-debian-8-desde-usb-solucionado

http://www.elmundoenbits.com/2013/02/crear-un-repositorio-local-para.html#.VWmjIBcg1B0
http://blog.desdelinux.net/no-tienes-internet-aprende-como-llevarte-tus-repositorios-a-casa/

jueves, 2 de febrero de 2017

STM32F103C8T6 vs Arduino - Test de un bucle

Página principal


STM32F103C8T6
vs
Arduino
Test en un bucle


En esta practica voy a comparar la rapidez de un bucle en las dos placas.

Programa de bucle
//  Arduino
//  22.6 Seg.  __2000

//  STM
//  5.8 Seg.  ___2000

int n1,n2;
char z;

// STM
#define pinLED1 PA0

//Arduino
//#define pinLED1 13

void setup() 
{
  pinMode(pinLED1, OUTPUT);
}

void loop() 
{
    digitalWrite(pinLED1, HIGH);
    for(n1=0;n1<30000;n1++) 
      {
        for(n2=0;n2<2000;n2++) { z=1; }
      }
    digitalWrite(pinLED1, LOW);
    for(n1=0;n1<30000;n1++) 
      {
        for(n2=0;n2<2000;n2++) { z=0; }
      }
               
}


Como podemos comprobar que  si utilizamos el mismo programa, en Arduino tarda en recorrer el bucle 22.6 Seg. , y si utilizamos el STM32  tarda 5.8 Seg.
La comparación es de  3.8 veces más rápido el STM32 .
Yo esperaba bastante más rápido el STM32 por ser un micro de 32 bits  frente al arduino que es de 8 bits.
Además el uno funciona a 72 MHz frente al otro que funciona a 16 MHz.
Debemos pensar que la optimización de código de cada compilador es diferente.


Saludos.
JUAN GALAZ

STM32F103C8T6 vs Arduino Test con los puertos

Página principal

STM32F103C8T6
vs
Arduino
Test con los puertos


En esta practica voy a comparar la rapidez de manejo de puerto en las dos placas.




 Con STM32
//   817.7 khz
//__________
#define pinLED1 PA0


void setup()
{
   pinMode(pinLED1, OUTPUT);
 }

void loop()
{
 
salto:
  digitalWrite(pinLED1, LOW);
  digitalWrite(pinLED1, HIGH);
  goto salto;

}

Con Arduino
// 94060 Hz

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);  
  digitalWrite(13, LOW);            
}
//  96920 Hz

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
salto:
  digitalWrite(13, HIGH);  
  digitalWrite(13, LOW);
  goto salto;            
}
//  2648.6 KHz

void setup()
{
   DDRB = DDRB | B00100000;
}
void loop()
{
salto:
  PORTB = PORTB | B00100000;
  PORTB = PORTB & B11011111;
  goto salto;    
}
//  3972.9 KHz

void setup()
{
   DDRB = DDRB | B00100000;
}
void loop()
{
salto:
  PORTB = 0;
  PORTB = 255;
  goto salto;          
}

Como podemos comprobar si utilizamos el mismo programa, en Arduino hacemos oscilar el puerto a 96 KHZ  ,y si utilizamos el STM32 oscila a 817KHz .
Como el arduino lo tengo bastante utilizado, sé bastantes trucos. Como vemos  podemos llegar a 2.6 Mhz , incluso a 3.9 Mhz haciendo alguna trampa.

Saludos.
JUAN GALAZ

miércoles, 25 de enero de 2017

Programar el STM32F103C8T6 con el IDE de Arduino

Página principal
STM32F103C8T6
y
Arduino

El otro día navegando por la red encontré un tutorial de como programar un ARM mediante  el entorno de arduino.
http://grauonline.de/wordpress/?page_id=1004
El procesador ARM está presente en muchos dispositivos, casi todos lo móviles android, los router , y otros muchos dispositivos.
El precio del módulo con el STM32F103C8T6 cuesta alrededor de 3€ lo cual es un precio muy competitivo.
El STM32F103C8T6  es un procesador con la siguientes características: ARM32 Cortex-M3, 72 Mhz, 64K flash, 20K SRAM, 33 I/O pins, 3.3V . El modulo además lleva un conector usb, un cristal extra de 32762Hz, y un par de puentes para programar el chip.




Los pasos seguidos para hacer funcionar el módulo STM en arduino son los siguientes:
-Tener instalado el entorno de arduino, en mi caso arduino-1.6.9 .
-Bajar de la página https://github.com/rogerclarkmelbourne/Arduino_STM32 el fichero:
      https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip
-Descomprimirlo dentro del directorio del  arduino/hardware/   creando un directorio llamado Arduino_STM32-master .
-Abrimos el arduino y cambiamos en el menú de herramientas lo siguiente:

Tecleamos el siguiente programa:
#define pinLED1 PA0

void setup()
{
   pinMode(pinLED1, OUTPUT);
}

void loop()
{
  digitalWrite(pinLED1, LOW);
  delay(500);
  digitalWrite(pinLED1, HIGH);
  delay(500);
}

Compilamos y si todo ha ido bien nos devolverá el siguiente mensaje:
El Sketch usa 7.116 bytes (10%) del espacio de almacenamiento de programa. El máximo es 65.536 bytes.
Variables globales usan 1.984 bytes de memoria dinamica.

El módulo dispone al igual que en el arduino, de un led conectado al pin C13 para probar sin tener que colocar ningún componente mas.
Para utilizar este led cambiar la línea:
#define pinLED1 PA0 
por
#define pinLED PC13

Ahora viene el paso de programar el módulo.
Para este paso necesitamos un conversor de USB a SERIE. Este conversor suele andar por los 3€ o menos, yo lo tenía de otros proyectos. Además el módulo proporciona los 3.3V para alimentar el chip.
Hemos de recordar que el Chip STM32F103C8T6 funciona a 3.3V , el módulo dispone de un reductor de tensión de 5V a 3.3V  , con lo cual podemos alimentarlo a 5V en el pin adecuado.
Según el fabricante la mayoría de los pin toleran de entrada  5V.
 (Up to 80 fast I/O ports –   26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant

Conectamos el conversor USB a SERIE  según las imagenes siguiente:




Una vez hechas las conexiones nos toca programar el chip de la siguiente manera:

-Poner el puente BOOT0 a 1.
-Pulsar el botón de RESET .
-En el IDE de arduino pulsar el botón de Subir.

En pocos segundos se pondrá a parpadear el led.
Si queremos dejar el chip programado y no programarlo mas, movemos el puente BOOT0 a 0.

Próximamente haré otras prácticas para probar este módulo que promete mucho.


Saludos.
JUAN GALAZ

Bibliografía:

http://www.st.com/en/microcontrollers/stm32f103c8.html
http://grauonline.de/wordpress/?page_id=1004
https://github.com/rogerclarkmelbourne/Arduino_STM32
http://www.stm32duino.com/