domingo, 23 de junio de 2013

Receptor ADS-B con linux

Receptor ADS-B con linux 

Las siglas ADS-B significan Vigilancia dependiente automática.

Navegando por la red encontré este interesante artículo sobre como recibir las balizas de los aviones mediante el receptor un TDT que emplea el chip RTL2832U+R820T.
http://rjfc.blogspot.com.es/2013/04/receptor-ads-b-con-linux.html
Está muy bien explicado, y a mi me a funcionado perfectamente en Debia7.
Después de seguir el tutorial estos son los resultados.

Ejecutando la orden:

./dump1090 --interactive --net --metric

 Podemos ver en la consola los diferentes aviones que en esos momentos surcan los cielos. Yo he utilizado la pequeña antena que viene con el receptor, colocado en la ventana, cierto es que vivo en un piso 12.
Para ver los aviones en un mapa, abrimos la dirección:
http://localhost:8080/


Un saludo.

Juan Galaz

jueves, 13 de junio de 2013


Configurar Canon LBP2900 para Linux -Debian7 “Wheezy en escritorio MATE”
Cansado de ver el escritorio Gnome3 y queriendo volver al viejo modelo de Gnome2, encontré a Mate que era la continuación de Gnome2.
El funcionamiento de la impresora LBP2900  bajo Gnome3 era perfecto, pero cuando intento utilizar el la misma impresora bajo Mate deja de funcionar.
El tema de las impresoras Canon modelo LBPxxxx bajo Linux siempre a sido un tanto lioso, pero siempre me funcionaron después de cierto trabajo.
El caso de que bajo un escritorio funcione y bajo otro no funcione, es un poco particular, y después de bastante trabajo he conseguido hacerla funcionar.

Lo primero es ir a la casa y bajar el driver:
    Linux_CAPT_PrinterDriver_V250_uk_EN.tar.gz
(existe a  fecha de hoy otro driver mas actualizado)
Descomprime el fichero y sigue las instrucciones que vienen, en mi caso son las siguientes:

 dpkg -i *.deb

A continuación para que no nos salga el error:
    WARNING: gnome-keyring:: couldn't connect to:
debemos modificar el fichero:
        /etc/xdg/autostart/gnome-keyring-pkcs11.desktop
 modificando la linea que pone
        OnlyShowIn=
GNOME;Unity;
 por 
  
        OnlyShowIn=
GNOME;Unity;Xfce;MATE;
Ahora reiniciaremos el sistema de ventana  y con toda seguridad no nos aparecerá el error.

Debemos crear  directorios:
        mkdir /var/ccpd
        mkfifo  /var/ccpd/fifo0
        mkdir /var/captmon

Terminamos con crear la impresora y configurarla:
        /usr/sbin/lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59787 -E
        /usr/sbin/ccpdadmin -p LBP2900 -o /dev/usb/lp0
        /etc/init.d/ccpd restart

Existe una utilizad para confirma que todo ha ido bien:
        captstatusui -P LBP2900

Si nos sale el error :
   
*** captstatusui Socket Error ***
significa que  el demonio ccpd no está lanzado.
Para lanzarlo  teclear:
        /etc/init.d/ccpd start
Ahora volvemos a lanzar la aplicación
       
captstatusui -P LBP2900
y vemos que nos sale:
 


Puede que no salga un error de comunicaciones con la impresora.
Para eliminarlo solo tenemos que apagar y encender la impresora y nos aparecerá: Ready to Print , que nos indica que la impresora está lista para imprimir.


Reconozco que  que es bastante lioso, pero me ha llevado mucho tiempo hacerla funcionar.
Para colmo aparece una segunda impresora llamada 
LBP2900-2, esta impresora no funciona ni tiene utilidad.


Saludos.
JUAN GALAZ

Bibliografía:
http://www.unixmen.com/installation-canon-lbp2900-on-linux-2/
http://radu.cotescu.com/how-to-install-canon-lbp-printers-in-ubuntu/#comments
https://help.ubuntu.com/community/CanonCaptDrv190?action=show&redirect=HardwareSupportComponentsPrinters%2FCanonPrinters%2FCanon_LBP_2900
http://ubuntuforums.org/showthread.php?t=1982917


13-076-2013

sábado, 11 de mayo de 2013

Configurar Canon LBP2900 para Linux -Debian7 “Wheezy”

Configurar Canon LBP2900 para Linux -Debian7 “Wheezy”
Recien instalado Debian7 me he vuelto a encontrar la necesidad de instalar los driver de mi impresora Canon LBP2900, que como siempre no viene de serie en linux.
Lo primero es ir a la casa y bajar el driver:
    Linux_CAPT_PrinterDriver_V250_uk_EN.tar.gz
Descomprime el fichero y sigue las instrucciones que vienen, en mi caso son las siguientes:

 dpkg -i *.deb

#Desempaquetando cndrvcups-capt (de cndrvcups-capt_2.50-1_i386.deb) ...
#Seleccionando el paquete cndrvcups-common previamente no seleccionado.
#Desempaquetando cndrvcups-common (de cndrvcups-common_2.50-1_i386.deb) ...
#Configurando cndrvcups-common (2.50-1) ...
#Configurando cndrvcups-capt (2.50-1) ...

/etc/init.d/cupsys restart
/etc/init.d/cups restart
/etc/init.d/ccpd restart
lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59687 -E
ccpdadmin -p LBP2900 -o /dev/usb/lp0
/etc/init.d/ccpd restart
 


Comento que la configuración de las impresoras desde el panel de Gnome3 es lamentable, por lo cual deberemos entrar en un navegador y configurar la impresora desde el servidor cups.

http://localhost:631/
 
Un saludo
Juan Galaz
12-05-2013

miércoles, 10 de abril de 2013

Desoldar componentes para reciclar.

Desoldar componentes para reciclar.
xsetaseta@gmail.com

En este artículo voy a enseñar los métodos utilizados por mi para desoldar componentes electrónicos.
El primer método utilizado es mediante soldador. La mayoría de los soldadores tienen una punta pequeña utilizada para soldar, pero si se quiere desoldar mas de una patilla, resulta un tanto difícil soltar el componente.
Para solucionar este problema, he aplastado una barra de cobre, pudiendo de esta manera desoldar varios pin a la vez.



La segunda forma para desoldar componentes, ya sean smd o normales, es utilizando un flujo de aire caliente.
Si tenemos presupuesto se podría utilizar una unidad de soldadura de aire caliente. Pero si nuestro presupuesto es un tanto escaso, como es mi caso, utilizo un decapador de aire caliente para pinturas. Debemos tener cuidado de la cantidad de aire caliente que damos a los componentes para no estropearlos. En muchos casos la mezcla del estaño es mala y debemos dar mucho calor, con lo cual se estropea el componente.

Decapador en acción.


Componentes desoldados

El último método usado para desoldar componentes es el de utilizar una vitrocerámica.
Para no estropear la vitrocerámica, la mujer te puede matar, coloco una tapa de cazuela de vidrio pyrex, resistente al calor. Dejando durante un tiempo la placa con los componentes, sobre el vidrio pyrex, hasta que el estaño comienza a derretirse. Luego mediante una pinza o utensilio al efecto, se van soltando los componentes.
He visto en otras páginas web, que utilizan estufas infrarrojas para desoldar componentes.



Placa de componentes sobre la vitrocerámica


Componentes desoldados

Un saludo
JUAN GALAZ

domingo, 17 de marzo de 2013

Arduino AD9850 DDS(Direct Digital Synthesizer) Generador señal desde 1Hz a 40MHz

Arduino
AD9850
DDS(Direct Digital Synthesizer)
Generador señal desde 1Hz a 40MHz
xsetaseta@gmail.com

Versión 2.  23/09/2014
Después de 1 año del montaje me mandaron algunos correos de que no les funcionaba el circuito.
Les pregunte que placa de arduino utilizaban, y me dijeron que era la placa leonardo, algunos me mandaron imagenes de sus montajes.
Después de que comprara la placa y montara el circuito, efectivamente no funcionaba.
Buscando el motivo por el cual funcionaba perfectamente en Arduino_Diecimila y no funcionaba en Arduino_Leonardo encontré el motivo.
Para utilizar los pin A0 y A1 como entradas digitales se hacía referencia a los pin 14 y 15, pero ahora con las nuevas versiones del compilador se deben utilizar A0 y A1.
Por lo que he cambiado lo siguiente:

//Arduino_Diecimila
//#define e1Pin 14
//#define e2Pin 15

por

//Arduino_Leonardo
#define e1Pin A0
#define e2Pin A1

 y ya funciona perfectamente.

Programa Arduino modificado.


Navegando por la red encontré un generador de señal senoidal de entre 1Hz y 40MHz.
Estaba realizado en torno al circuito integrado DDS (Direct Digital Synthesizer) AD9850, y su costo rondaba los 5€.
La tentación de poder tener un generador de señal por ese precio era simplemente irresistible.
Para controlar el AD9850 he utilizado un arduino, representando la frecuencia de señal en un LCD.
He utilizado dos pulsadores y un potenciómetro para poder modificar la frecuencia generada.
La señal de salida es de 1V pico a pico, reduciendo su amplitud a frecuencias altas.

Módulo DDS con el AD9850

El programa de arduino dispone de una serie de menús para cambiar la frecuencia.
En el primer menú, que es por defecto, se puede cambiar todos los dígitos de la frecuencia, desde 1Hz a 40MHz. Pulsando el botón1 se recorren todas las cifras, desde millones a unidades, y con el boton2 se cambia el valor de la cifra en cuestión.
A continuación existen varios menús, +500, +5K, +50K, +500K, que desplazan la frecuencia prefijada mediante un  potenciómetro.


Esquema del circuito.



Circuito generando una frecuencia de 1000Hz



Lectura de la frecuencia en mi frecuencímetro



Onda mostrada en el osciloscopio

Para manejar el AD9850 desde arduino, existen dos posibilidades, utilizar una librería que existe específicamente para ello, o utilizar varias funciones que se pueden insertar en tu propio código. Me he decidido por insertar las funciones en mi propio código debido a que son bastante simple y no aumentan mucho el tamaño del código fuente.
Las funciones las he sacado de:
 http://webshed.org/wiki/AD9850_Arduino#Wiring_up_.26_example_code_download
son funciones muy sencillas, como se pueden ver en el siguiente código:

//AD9850 DDS test

#define DDS_CLOCK 125000000

#define  CLOCK  8  //pin connections for DDS
#define  LOAD 9
#define  DATA  10
#define  RESET 11

void setup()
{
  pinMode (DATA,  OUTPUT);
  pinMode (CLOCK, OUTPUT);
  pinMode (LOAD,  OUTPUT);
  pinMode (RESET, OUTPUT);
  AD9850_init();
  AD9850_reset();

  SetFrequency(10000000);

}

void loop()
{

}

void SetFrequency(unsigned long frequency)
{
  unsigned long tuning_word = (frequency * pow(2, 32)) / DDS_CLOCK;
  digitalWrite (LOAD, LOW);

  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word);
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 8);
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 16);
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 24);
  shiftOut(DATA, CLOCK, LSBFIRST, 0x0);
  digitalWrite (LOAD, HIGH);
}

void AD9850_init()
{

  digitalWrite(RESET, LOW);
  digitalWrite(CLOCK, LOW);
  digitalWrite(LOAD, LOW);
  digitalWrite(DATA, LOW);
}

void AD9850_reset()
{
  //reset sequence is:
  // CLOCK & LOAD = LOW
  //  Pulse RESET high for a few uS (use 5 uS here)
  //  Pulse CLOCK high for a few uS (use 5 uS here)
  //  Set DATA to ZERO and pulse LOAD for a few uS (use 5 uS here)

  // data sheet diagrams show only RESET and CLOCK being used to reset the device, but I see no output unless I also
  // toggle the LOAD line here.

  digitalWrite(CLOCK, LOW);
  digitalWrite(LOAD, LOW);

  digitalWrite(RESET, LOW);
  delay(5);
  digitalWrite(RESET, HIGH);  //pulse RESET
  delay(5);
  digitalWrite(RESET, LOW);
  delay(5);

  digitalWrite(CLOCK, LOW);
  delay(5);
  digitalWrite(CLOCK, HIGH);  //pulse CLOCK
  delay(5);
  digitalWrite(CLOCK, LOW);
  delay(5);
  digitalWrite(DATA, LOW);    //make sure DATA pin is LOW

    digitalWrite(LOAD, LOW);
  delay(5);
  digitalWrite(LOAD, HIGH);  //pulse LOAD
  delay(5);
  digitalWrite(LOAD, LOW);
  // Chip is RESET now
}

A este código he añadido los menús, y el controlador de LCD.
Programa arduino.

Saludos.
JUAN GALAZ

Bibliografía:
http://danirebollo.blogspot.com.es/2012/06/ad9850-cmos-125-mhz-complete-dds.html
http://webshed.org/wiki/AD9850_Arduino
http://alhin.de/arduino/index.php?n=70
http://www.elecfreaks.com/2110.html
http://www.analog.com/en/rfif-components/direct-digital-synthesis-dds/ad9850/products/product.html
http://www.scienceprog.com/


lunes, 11 de marzo de 2013

Arduino-Reduciendo consumo-Parte 2

Página principal

Arduino
Reduciendo consumo
Atmega328 power low
Parte 2
Reloj - DS1302
xsetaseta@gmail.com

En esta segunda parte de como reducir el consumo de mi reloj arduds ,se utilizara la técnica de hacer dormir el ATMEGA328 cuando no se necesite.Este modo se llama SLEEP_MODE_PWR_DOWN, el oscilador externo se para.

SMCR – Sleep Mode Control Register

Existen varias maneras de despertar al ATMEGA328, y una de ellas es el
Watchdog(perro guardián),  es la forma que vamos a utilizar para que despierte el ATMEGA328. El Watchdog utiliza un oscilador  de 128 kHz, separado del reloj principal.
Mediante prescaler podemos hacer que se active en diferentes tiempos, para este caso utilizaré un prescaler a 0.5 Segundos.


Table 10-2. Watchdog Timer Prescale Select

El programa funciona de la siguiente forma:
1.- Se activa el
Watchdog en el setup a 0.5 S.
2.-Empieza el bucle del programa principal.
3.-Se pone el microprocesador a dormir en modo
SLEEP_MODE_PWR_DOWN.
4.-Si se rebasa el tiempo de 0.5 S., se activa el Watchdog y se produce una interrupción.
5.-Se ejecuta el programa de la interrupción.
6.-A la vuelta de la interrupción se sigue ejecutando el programa del bucle principal.
7.-Se vuelve al punto 2 .

Para conseguir aún más consumo he desactivado el conversor A/D de la siguiente forma:
ADCSRA = ADCSRA & B01111111;
ACSR = B10000000;


También existe la posibilidad de deshabilitar las líneas de entrada para ahorrar algo de corriente, pero en mi caso las necesito.
//DIDR0 = DIDR0 | B00111111;
He comentado esta parte para que no se realice.

Programa arduino


Montaje del circuito.

Para poder medir el consumo del circuito por partes y quitar el consumo de los componentes de la placa arduino, he sacado el Atmega en un modulo board. También he añadido un conversor USM->rs232 para poder programar el microcontrolador.


Tabla de consumos

Conversor A/D activado y frecuencia a 16Mhz.

5 V
4 V
4,5 V con diodo  quedando 3,88V
Batería 3,7 V
Atmega 328 + LCD
2,3 mA
1,43 mA
1,50mA (Picos 2,4 mA)
1,42mA(Picos 2,5 mA)
Atmega 328
0,44 mA(Picos 2,2 mA)
0,35 mA(Picos 1,36 mA)
1,36 mA(Picos 1,46 mA)
0,34mA(Picos 1,46 mA)

Conversor A/D desactivado.

5 V
4,5 V con diodo  quedando 3,88V
Batería 3,7 V
Atmega 328 + LCD (0,5-16Mhz)
2 mA(Picos 2,6 mA)

1,17 mA(Picos 1,24 mA)
Atmega (0,5-16Mhz) 0,123 mA

0,08 mA(Picos 1,50 mA)
Atmega 328 + LCD (16Mhz)
1,29 mA(Picos 2,30 mA)
1,20 mA(Picos 2,20 mA)
Atmega 328 (16Mhz)
0,08 mA(Picos 1,17 mA)
0,08 mA(Picos 1,50 mA)

Los picos de corriente corresponden a una mínima porción de tiempo, al despertar del micro cada segundo.

Conclusión:
El consumo del circuito (Atmega328+LCD) en el mejor de los casos es de 1,20 mA .Como podemos observar se encuentra muy penalizado por el LCD, que solo él consume 1,1 mA.
En una situación real donde el circuito se encuentra alimentado por 3 pilas alcalinas de 1,5V (2890mAh) , en total 4,5V, con un diodo en serie que nos quedaría 3,88V. Si consume 1,29mA el circuito, el tiempo máximo de autonomía sera 2240 Horas, 93 días.
Por otro lado si solo se utiliza el Atmega328 quitando el LCD,  la autonomia sería 36125 horas, 1505 días, 4 años.
Lo que verdaderamente aumentaría la autonomía, sería encontrar un LCD de bajo consumo.
Todo esto es bastante teórico, las baterías se autodescargan con el tiempo.
Los picos de corriente aunque sean cortos, disminuyen la autonomía. Existe la posibilidad de poner el Watchdog a un tiempo máximo de 8 segundos, con lo cual el microcontrolador estará dormido mucho más tiempo y aumenta la autonomía del circuito. No he querido tocar el programa principal, para poder ver los segundos, aunque disminuya algo la autonomía.

He de destacar que la diferencia de consumo entre variar la frecuencia y tenerla fija a 16Mhz es mínima. Tiene un motivo, si el micro va despacio, tardará más en ejecutar el programa, y por lo tanto consumirá más. A la inversa pasa lo mismo, es una cuestión de preferencia.

Espero que haya ayudado a aumentar la autonomía de vuestros circuitos.
Para la realización del programa he utilizado código de distinto sitios, modificando a mi gusto ciertas partes, no soy el autor de ciertas líneas del programa.

Saludos.
Juan Galaz


Bibliografía:
http://www.gammon.com.au/forum/?id=11497
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
http://blog.dosbotones.com/2011/09/reducir-el-consumo-de-arduino.html
http://www.sparkfun.com/tutorials/309
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
http://www.engblaze.com/hush-little-microprocessor-avr-and-arduino-sleep-mode-basics/
http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
http://jeelabs.org/2009/05/16/power-consumption-more-savings/

viernes, 8 de marzo de 2013

Reduciendo consumo. Parte 1 Reloj - DS1302

Página principal

Arduino
Reduciendo consumo.
Parte 1
Reloj - DS1302
xsetaseta@gmail.com

En este montaje intentamos reducir el consumo de corriente de mi anterior montaje arduds.html.
El consumo de todo el circuito incluido placa de arduino y LCD es de 23,3 mA.
En esta primera parte he utilizado tres métodos para reducir el consumo.

Método 1.
El primero es variar dinámicamente mediante el programa la velocidad del reloj del ATMEGA328.
Esto se consigue modificando el registro CLKPR – Clock Prescale Register.


En la parte del programa que quiero que corra a 16MHZ pongo las ordenes:
            CLKPR = (1 << CLKPCE);
            CLKPR = 0; // Velocidad 16Mhz

En la parte del programa que quiero que corra a 500khz pongo las ordenes:
               CLKPR = (1 << CLKPCE);
             CLKPR = 5;  // Velocidad 500khz      

Método 2.
El segundo método para reducir el consumo es el de reducir el voltaje de alimentación del circuito.
El arduino utiliza 5V para la alimentación de todo el circuito. Si se disminuye el voltaje de 5V a 4V podemos obtener un significativo ahorro de consumo.
Podríamos disminuir el voltaje hasta 2,8 V, pero los LCD no trabajan por debajo de los 4V, con lo cual el microcontrolador funciona, pero en el LCD no se ve nada.
Tengo un LCD que en teoría funciona con 3,3V, pero en la práctica por debajo de 3,6V no se ven los caracteres.


Método 3.
El tercer método para reducir el consumo es montar solo el microcontrolador con los componentes mínimos para que funcione, cristal y dos condensadores. De esta forma eliminamos el consumo del conversor USB->RS232 y otros componentes que lleva la placa.
Si no se requiere mucha precisión de reloj, podríamos eliminar el crystal y los dos condensadores, utilizando el oscilador interno de  8 MHz. Estó requiere modificar el boot del arduino por lo que lo he descartado.

Montaje del micro con los dos condensadores y el cristal.

Programa arduino

Después de realizar todas la pruebas, estos son los resultados:

5V
4V
3,7V
16Mhz
23.3mA
14,5mA

2MHz
14,4mA
9mA

1MHz
13,4mA
8,6mA

500KHz
13,2mA
8,3mA

500KHz(Atmega328+LCD)
5,5mA
4,5mA
2,6mA

En el mejor de los casos, si alimentamos el circuito con 3 pilas alcalinas en serie (4,5V) de 2890mAH y colocamos un diodo en serie para bajar el voltaje a 3,8V la corriente medida es de 2,6mA.
Si dividimos 2890 entre 2.6 el resultado es de 1111 horas, 46 días. Siempre es algo menos debido a la autodescarga de la propia batería.
Si quitamos el LCD en consumo se reduce a 1mA, alimentando el Atmega a 3,7V.

En la segunda parte trataremos el poner el microcontrolador a dormir para disminuir el gasto de la batería.

Saludos
SETA43

Bibliografía:
http://www.gammon.com.au/forum/?id=11497
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
http://blog.dosbotones.com/2011/09/reducir-el-consumo-de-arduino.html
http://www.sparkfun.com/tutorials/309
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/