sábado, 22 de julio de 2017

OSCILOSCOPIO- Arduino - STM32F103C8T6



OSCILOSCOPIO
Arduino

STM32F103C8T6
640000 muestras segundo
Fast A/D


En mi anterior montaje había realizado un osciloscopio con un arduino. Había conseguido una tasa máxima de muestreo de 250000 muestras por segundo. El programa estaba realizado utilizando la librería SDL en la parte del PC.
Como tenía un arduino basado en un STM32F103C8T6 , un  procesador  bastante mas potente que el ATmega 328 , investigue si podía conseguir una tasa de muestreo algo mas elevada.
Según la tabla de características del  STM32F103xx  performance line devices: 1 μs at 56 MHz (1.17 μs at 72 MHz).
Se raro que indique mas rapidez de conversión a 56 MHz que a 72 MHz , pero el caso es que en teoría podría llegar a una tasa de muestreo de 854000 muestras por segundo.
Mi idea era mantener el interface SDL del anterior montaje y cambiar el programa arduino de obtención de datos en la placa STM32F103, ajustándolo al nuevo procesador.
Lo primero que intente con éxito era cambiar la orden del conversor A/D  y utilice la orden: adc_read(ADC2, 0) , donde el 0 es el pin A0 que corresponde al PA0 en el programa.
El programa funcionaba, pero no se conseguía un aumento significativo en la tasa de conversión.
Mirando por internet encontré una fórmula para cambiar el reloj del conversor A/D con la orden: adc_set_prescaler(ADC_PRE_PCLK2_DIV_4) .
Puede tener tres opciones:
  ADC_PRE_PCLK2_DIV_2
  ADC_PRE_PCLK2_DIV_4
  ADC_PRE_PCLK2_DIV_6
  ADC_PRE_PCLK2_DIV_8

Con este cambio en la frecuencia de reloj, cambiamos la tasa de muestreo.

Clock configuration register (RCC_CFGR)
Address offset: 0x04
Reset value: 0x0000 0000
Access: 0 ≤ wait state ≤ 2, word, half-word and byte access
1 or 2 wait states inserted only if the access occurs during clock source switch.

Bits 15:14 ADCPRE: ADC prescaler
Set and cleared by software to select the frequency of the clock to the ADCs.
00: PCLK2 divided by 2
01: PCLK2 divided by 4
10: PCLK2 divided by 6
11: PCLK2 divided by 8


Pero aún así no llegábamos a la tasa de muestreo que prometían las especificaciones del procesador.
Buscando por internet encontré en un foro http://www.stm32duino.com/viewtopic.php?t=847  la forma de aumentar la tasa de muestreo.
La forma era con el comando: adc_set_sample_rate(ADC2, ADC_SMPR_13_5);
Efectivamente, aumento la tasa de muestreo a mas de 600000 muestras por segundo.
Las opciones posibles son:
    ADC_SMPR_1_5,               /**< 1.5 ADC cycles */
    ADC_SMPR_7_5,               /**< 7.5 ADC cycles */
    ADC_SMPR_13_5,              /**< 13.5 ADC cycles */
    ADC_SMPR_28_5,              /**< 28.5 ADC cycles */
    ADC_SMPR_41_5,              /**< 41.5 ADC cycles */
    ADC_SMPR_55_5,              /**< 55.5 ADC cycles */
    ADC_SMPR_71_5,              /**< 71.5 ADC cycles */
    ADC_SMPR_239_5,             /**< 239.5 ADC cycles */
Aunque no entiendo muy bien lo que realmente hace, el manual del registro dice:
ADC sample time register 2 (ADC_SMPR2)
Address offset: 0x10
Reset value: 0x0000 0000

Bits 29:0 SMPx[2:0]: Channel x Sample time selection
These bits are written by software to select the sample time individually for each channel.
During sample cycles channel selection bits must remain unchanged.

De las prueba realizadas la mejor combinación para dar una tasa de muestreo de 640000 muestras/segundo  es :
adc_set_prescaler(ADC_PRE_PCLK2_DIV_2) ;
adc_set_sample_rate(ADC2, ADC_SMPR_7_5);


Visualización de una frecuencia de 16000Hz . Muestreo de 640000 muestras/seg.

Para poder visualizar y medir mejor las ondas, he incorporado botones de zoom y de desplazamiento de onda.

Visualización de la onda 16KHz con zoom x4 modo puntos.

 
Visualización de la onda 16KHz con zoom x4 modo lineas.

Podemos observar 40 muestreos en un ciclo de onda de 16KHz.
Si calculamos 16000x40=640000 muestras/segundo.



PROGRAMA

Nota:
Debemos tener en cuenta que la máxima tensión de entrada es de 3.3V , que también es la tensión de alimentación del procesador.
La impedancia de entrada es mucho mas baja que en un arduino convencional,  lo que debemos tener en cuenta.
La propia sonda del osciloscopio me producía ruido en el propio chip.



Saludos
Juan Galaz



Bibliografía:
oscisdl.html
http://www.stm32duino.com/viewtopic.php?t=847
https://github.com/leaflabs/leaflabs-docs/blob/master/source/libmaple/overview.rst
https://hackaday.io/project/425-arduino-oscilloscope-688000-samplessec


www.000webhost.com

sábado, 8 de julio de 2017

OSCILOSCOPIO con el arduino Arduino



OSCILOSCOPIO
Arduino



Hace tiempo hice un osciloscopio con arduino en el entorno  de programación Gambas. El entorno gambas es una especie de VB que solo funciona en Linux. El que solo funcione en Linux tiene el inconveniente de eliminar bastantes usuarios que solo usan Windows.
Mi idea era era volver hacer el osciloscopio mejorándolo y que además funcionase  en Windows.
Había dos opciones hacerlo con las librerías SDL o con las librerías wxWidgets. Está claro que hubiese quedado mucho mejor el aspecto con las librerías wxWidgets, pero me decidí por las SDL por un motivo un tanto personal que no viene al caso. Igual en un futuro lo realice en wxWidgets , pero eso es otro proyecto.
Lo que me satisface más, es el poder compilar para las dos plataformas, Linux o Windows, con solo cambiar la directiva YesWindows 0 por #define YesWindows 1 en el fichero define.h.

En lado del arduino la entrada la toma del pin A0 con valores de 0 a 5V.
El arduino lee continuamente el puerto serie esperando ordenes.
En el caso de recibir la cadena "VOL="  , el devuelve una cabecera de 10 bytes "VOL     " + los retornos de carro , 10 valores (0-255) digitalizados de la entrada A0, y 10 bytes con la cadena "FIN     " + los retornos de carro. Un total de 30 bytes.
En caso de recibir "GETUP=" , el devuelve una cabecera de 10 bytes "DAT     " + los retornos de carro , 800 valores (0-255) digitalizados de la entrada A0, y 10 bytes con la cadena "FIN     " + los retornos de carro. Un total de 830 bytes.
En caso de recibir "DIV16" cambia el divisor del convertidor A/D del arduino a 62500 muestras por segundo.

En el lado del PC nos encontramos un entorno en el que podemos representar y controlar los datos que nos envía  el arduino.
Podemos estar en el modo Vol  ( Voltímetro ) , captura continuamente datos digitalizados del pin A0 representándolos en una gráfica continua. Se puede cambiar la velocidad de captura de datos.
El modo de osciloscopio muestra continuamente datos mandados por el arduino, 800 datos digitalizados a una velocidad que podemos modificar a nuestro gusto.

Al iniciar el programa se busca la conexión  del arduino con el programa del osciloscopio en todos los puertos serie que existan en el PC.
Este es el motivo por el cual tarda unos 6 segundos en arrancar

Para calcular la frecuencia de la onda debemos dividir las muestras por segundo entre las muestras de cada onda.
En la imagen siguiente la onda mide alrededor de 200 muestras.
Si estamos en el modo de 125000 muestras por segundo, la frecuencia será 125000/200=625Hz
Este cálculo no es totalmente exacto, pero la mayoría de las veces funciona bien.
En un principio lo incluí en el código, pero después de muchos ensayos lo descarté por no ser totalmente exacto.


Señal de 625Hz


Montaje del circuito.

En las siguientes imágenes se puede comparar entre las de un osciloscopio normal y mi montaje.



Señal de 5000Hz



Señal de 625 Hz

Para medir señales continuas o de niveles positivos se conecta la señal directamente a A0.
Pero si queremos medir corrientes alternas, debemos realizar un adaptador para elevar la señal a mitad de la máxima señal de entrada, 2.5V.
Como no quiero complicar el montaje, utilizo un par de resistencias y un condensador.

Adaptador de AC.

Para los que no disponen de un osciloscopio, este montaje puede ser interesante además de barato.

PROGRAMAS
Librerías necesarias SDL


Nota:
He tenido serios problemas con los diferentes arduinos. Cuando funcionaba bien el programa en una placa arduino clásica, luego al probar el programa en un arduino nano, dejaba de funcionar.  A velocidades de 115200bps no todo se comporta como debería.
He tenido que colocar retardos para que sea lo mas compatible posible.
La compilación en arduino se hizo en la versión 1.0.5 .
También he visto que la velocidad del programa es más rápida en la versión Linux.


Saludos
Juan Galaz



Bibliografía:
ardu_os.html
http://real2electronics.blogspot.com/2011/09/arduino-adc-muestreo-alta-velocidad.html


miércoles, 14 de junio de 2017

Arduino - Analizadores de señal digital - analógico

Página principal

Arduino
Analizadores de señal
digital - analógico
xsetaseta@gmail.com

En un afán de ver soluciones fáciles y baratas para analizar señales tanto digitales como analógicas mediante la placa arduino, he realizado una búsqueda  en internet.
Seguro que hay muchas,  pero estas son la que yo he encontrado a primera vista.

LogicAnalyzer


Señal de 798Hz visto en el programa y en mi osciloscopio .

PROGRAMA
Este programa hecho por Raul Navarro http://raulnd.blogspot.com.es/ funciona solo en Windows bajo plataforma NET v4.
Funciona de dos modos:
-Como un analizador lógico de varios canales.
-Como analizador analógico de un solo canal.
Tiene la posibilidad de medida de tiempos, de esta forma se puede calcular la frecuencia.
Se puede medir mediante el cursor el voltaje en cada parte de la onda.
Para captar  una nueva señal hay que pulsar sobre el icono en forma de rayo.



Arduinoscope



PROGRAMA versión linux
Programa realizado por David Konsumer <david.konsumer@gmail.com> , realizado en java , funciona tanto en Linux como en Windows, y disponemos del código fuente.
Funciona como un analizador continuo de señal analógico señales A0-A5.


Para hacer publicidad propia  mostraré varios programas hechos por mi.

Arduino - Control de 12 salidas y 6 entradas analógicas mediante rs232- Librería SDL

Funciona en Linux y Windows.
Enlace


ARDUINO - OSCILOSCOPIO 66K MUESTRAS

Solo funciona en Linux bajo Gambas (VB)
Enlace


Un saludo.
Juan Galaz

jueves, 1 de junio de 2017

Primera semana con el osciloscopio Hantek6022BL

Página principal

Primera semana
con el osciloscopio
Hantek6022BL
xsetaseta@gmail.com

El otro día vi un anuncio de un osciloscopio que se conectaba al ordenador mediante el USB y tenía un precio bastante bajo, alrededor de 60€. Yo tengo un osciloscopio Hameg  HM203-5 de 20Mhz desde hace 30 años. Me ha servido muy bien para todos los montajes que he hecho hasta ahora. Pero ya llega su tiempo de renovación, y para los montajes digitales se queda ya muy corto.
Mi duda era entre el Hantek6022BE y el Hantek6022BL, el uno es solo un osciloscopio de dos canales y con una tasa de muestreo de 48Msa/S , el otro además dispone de un analizador lógico de 16 canales, pero es 11€ mas caro.
Como yo pretendía ver los buses de los distintos interfaces del arduino, he comprado el Hantek6022BL por 71€.
He de comentar que por ese precio no se puede conseguir uno mejor. Existen numerosos osciloscopios mucho mejores, pero como mínimo el precio es el doble, y como aficionado no me puedo permitir gastar mucho dinero.


Osciloscopio Hantek6022BL

Características:
Dos canales analógicos.
Analizador lógico de  16 canales.
Muestreo de 48Msa/S
Ancho de banda de 20 MHz.
Impedancia de entrada: 1 M , 25pf
Resolución vertical: 8 bits
Las características son modestas, pero para un aficionado creo que la relación Calidad/Precio es buena.

Empezamos con la instalación del software mediante un mini CD , y los drivers del propio CD. También en el directorio de instalación del programa existe un directorio donde también se encuentran los drivers.
Para que nos reconozca el osciloscopio debemos tener el boton que se encuentra al lado del conector USB metido (modo H)
Solo existen programas para el entorno Windows, por lo que los que utilizamos Linux nos tenemos que aguantar.
Se instalan dos programas, uno es un osciloscopio de doble canal y otro es el analizador lógico.

En esta imagen vemos el programa de osciloscopio analógico de doble canal funcionando.

El programa tiene un poco de todo, pero es un poco simplón y poco cuidado en los detalles.

La misma onda en mi viejo osciloscopio.

No se puede comparar uno con otro.
El osciloscopio Hantek6022BL no dispone de selección de DC/AC por lo que si queremos medir corriente alterna debemos colocar un condensador.
La máxima tensión de entrada es de 5.5V, aunque con la sonda colocada a x10 podría llegar hasta 50V , pero no me fio.
Las ventajas del Hantek6022BL son varias, la medida automática de frecuencia y voltaje, además de poder exportar todos los datos e imágenes a ficheros.


Programa de analizador lógico.

El programa de analizador lógico es demasiado simple, poco mas de lo que se ve en la imagen hace.
El desplazamiento  a través de la línea de tiempo es aún peor.

Aquí tenemos una solución un tanto curiosa. Si apretamos el boton que se encuentra al lado del conector USB y lo sacamos (modo P), transformamos el analizador lógico del Hantek6022BL en otro modelo de analizador gráfico, el logic analyzer de la compañía Saleae Logic.
De la página  https://www.saleae.com/downloads descargamos el programa y lo instalamos. Los drivers se encuentran en el directorio donde se instala el programa.

Programa de la casa Saleae Logic funcionando con el Hantek6022BL.

Tiene analizador del tipo de bus, en el caso de la imagen de un puerto serie.
Se puede ver hasta el código de los caracteres y los tiempos de cada pulso.

Analizando los 3 buses del Chip DS1302.

Y para los que usamos Linux, también dispone de una versión para este sistema operativo.

Funcionando en Linux  con la distribución Mint 18  64bits


Ahora vamos a probar distintos programas alternativos.


Programa  Open6022BE

Desde la dirección  ftp://pididu.com/OpenHantek/  podemos bajar el programa de osciloscopio que parece un clon de oficial. Posee alguna opción que no dispone el oficial, y además se dispone del código fuente.
Para que me funcionase he tenido que copiar la librería HTMarch.dll que venía en el programa original al directorio del programa open6022, sustituyendo el que viene. Según alguna información esta realizando mediante ingeniería inversa.


Programa BasicScope.

Desde la dirección http://pididu.com/wordpress/basicscope/ se baja el programa y se instala.
Es un programa simple que funciona, probarlo y que cada uno opine.
Se dispone del código fuente, por si alguno se le ocurre hacer alguna modificación.

Como curiosidad he probado el programa de osciloscopio bajo VirtualBox en linux.
En principio funciona, pero al cambiar de escala se cuelga, creo que es debido a que a tasas de muestreo altas,  el controlador USB de la máquina virtual se cuelga. A tasas de muestreo bajas he conseguido que funcione.

Conclusión:
Por el precio que cuesta no se puede pedir mas.

Hasta pronto.
JUAN GALAZ

Bibliografía:
ftp://pididu.com/OpenHantek/
http://pididu.com/wordpress/basicscope/
https://www.saleae.com/downloads
http://www.hantek.com/en/ProductDetail_2_153.html

martes, 30 de mayo de 2017

Reloj con sonido DFPLayer MP3 Mini Arduino

Página principal


Reloj con sonido
DFPLayer MP3 Mini
Arduino



En mi anterior artículo había realizado un reproductor de MP3 mediante el módulo DFPLayer y gobernado con arduino.
Una de las ideas que se me vino a la mente fue la de un reloj que produjese sonido a las horas en punto y a los cuartos, y esto es lo que realizo en este montaje.
En este montaje incorporo los sonidos en una SD , estos sonidos podrían ser los de un cuco, de péndulo , o de torre, a voluntad de cada uno.
Para la exactitud del reloj  utilizo el Chip DS1302 que incorpora una pila para el mantenimiento de la hora en caso de que falte la corriente.
Para la visualización de la hora utilizo un LCD de nokia 3310, y para el ajuste de la hora dos pulsadores, horas y minutos.
Todos estos componentes se conectan al arduino según el siguiente diagrama.

Esquema eléctrico.


Diagrama de conexión.


Circuito montado.

En el programa existen dos #define importantes:
#define DEBUG
#define DIRECTORIO  5

-El primero activado o desactivado hace que muchos datos del programa se manden a través de puerto serie al PC.
-El segundo indica el directorio donde se almacenan los sonidos. Recordad que en la SD  los directorios tienen el nombre de 01,02,03,04,05 . Y dentro de estos directorios existen los archivos de MP3 con el nombre 001.mp3 , 002.mp3 , 003.mp3 ....etc.
En fichero 001.mp3 es el sonido de la campana de la 1.
El fichero 012.mp3 es el sonido de las 12.
El fichero 013.mp3 es el sonido de y cuarto.
El fichero 014.mp3 es el sonido de y media.
El fichero 015.mp3 es el sonido de menos cuarto.

Para cambiar las horas y los minutos tenemos dos pulsadores que incrementan su valor.
Al inicio del programa  suena la campana de la 1, a modo de indicación de que todo funciona.
Todo el conjunto consume en reposo 38mA a 5V  y 32mA a 4V .
Existen muchos métodos para reducir el consumo, pero este no era el propósito de este montaje.
Los sonidos que he incorporado no son los mas bonitos, pero eso se lo dejo a la imaginación de cada uno.

PROGRAMA

SONIDOS

VIDEO


Saludos.
JUAN GALAZ


armpg.html

arnote.html

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