lunes, 7 de agosto de 2017

Leyendo GPS MikroElektronika Ublox LEA 6S con BusPirate

Hoy realizare un breve tutorial de como leer datos proveniente del GPS Ublox LEA 6S con Bus Pirate.

El Hardware
Para la comunicación utilizaremos el protocolo UART.

Lo primero que realizaremos es la conexión de los pines de alimentación 3.3v y GND a nuestra placa GPS, los pines los podemos visualizar en la Fig 1.
Fig 1. Distribución de pines de placa GPS

A continuación vamos a conectar los pines del Bus Pirate MISO y MOSI a TX y RX del GPS, respectivamente ver Fig 2.
Fig 2. Distribución de pines en Bus Pirate

Software
Para usar Bus Pirate en Linux debemos tener configurado el programa minicom, si no recuerdan pueden visitar esta otra entrada, entramos y configuramos los siguientes parametros: 
  • Presionamos m  escogemos opción 3 Fig 3.
  • utilizamos 9600 bps opción 5
  • 8, NONE *default opción 1
  • Stop bits 1 *default opción 1
  • Polarity Idle 1 *default  opción 1
  • Output Type Normal (H=3.3V, L=GND) opción 2


Fig3. Configuración inicial del modo en Bus Pirate
Una vez realizado esto debemos encender las fuentes de alimentación de Bus Pirate, esto se logra poniendo una W mayúscula en consola.

Una vez realizado esto debemos poner el macro de UART en modo Monitor, esto lo hacemos escribiendo en consola (2) y a continuación comenzaremos a tener salidas de este tipo:
 

$GNGSA,A,3,87,71,,,,,,,,,,,2.20,1.18,1.86*12
$GPGSV,4,1,15,02,61,05,26,05,3,138,32,0,15,054,1,09,02,01,*7F
$GGSV,4,2,1,12,52,16,32,19,00093,,20,0,180,,21,0,232,*7C
$GPGSV,4,,15,46,28148,,48,3,193,31,1,32,159,4531,22,07,18*7B
$GLGS,2,1,05,7,07,010,1,71,30,05,29,72,25114,21,7845,300,*6
$GLGSV2,2,05,8767,017,215B
$GNGL,3725.5402,N,1220508739,W,03123.00,AD*61
$GNRMC,023123.20,A,3725.54083,N,12205.08740,W,0.064,,240516,,,D*73
$GNVTG,,T,,M,0.064,N,0.118,K,D*32
$GNGGA,023123.20,3725.54083,N,12205.08740,W,2,09,1 
 
 
Y eso es todo amigos les dejo material extra, que deben encontrar interesante para desarrollar sus aplicaciones con GPS.
Saludos

martes, 11 de julio de 2017

Manual Básico GNU/RADIO UHD USRP


Hola amigos.
El día de hoy he subido a la red, un pequeño manual que hice sobre el uso de GNU-Radio[2] para principiantes, utilizando la opción de construcción por bloques, también contiene instrucciones para instalar los drivers UHD que son necesarios para manejar equipos USRP como en la Fig1.
Fig1. USRP B210 Ettus Research [1]
Espero que lo disfruten.

Descarga

Referencias

[1] https://www.ettus.com/product/details/USRP-B200-Enclosure
[2] https://www.gnuradio.org/

jueves, 23 de marzo de 2017

Probando protocolo SPI con LCD DOGM163 y BusPirate V3.6

Saludos amigos hoy me dispuse a probar esta "navaja suiza" para electrónica llamada BusPirate un dispositivo electrónico que permite manejar distintos  protocolos con el mismo equipo.
Necesitaba utilizar el LCD Dogm163 mediante protocolo SPI para un proyecto que estoy realizando.
A continuación les dejo los pasos que seguí en caso de que sirva a alguien.

Hardware:

Primero vamos a observar como se numeran los pines del DOGM163  según el datasheet.

Numero de pines
Los pines superiores se numeran a partir del numero 21 y corresponde al pin de la esquina superior derecha visto frontalmente como la imagen a continuación.
DOGM163 visto frontalmente




 Una vez identificado el numero de pines procedemos a realizar las conexiones como se encuentra en el datasheet, en mi caso utilizo la configuración de 5V.
Configuración de pines DOGM163 (SPI)
 Ahora unas pequeñas aclaraciones sobre las conexiones de pines con el BusPirate:
PIN-DOGM163      PIN-BusPirate
28(SI)                    MOSI
29(CLK)                CLK
38(CSB)                0V
39(RS)                  0V para config del DOGM y 5V para Escribir Datos al DOGM

A continuación una imagen de los pines del BusPirate y sus respectivos colores y protocolos.

BusPirate ProbeKit available at Seeed Studio


Para iniciar RS lo vamos a poner en 0V
 Y listo con eso hemos terminado el hardware. :)

Software

Primero vamos a configurar nuestra comunicación con el BusPirate, para eso utilizo la herramienta Minicom en Debian (GNU/Linux)

  1. Abrimos consola y escribimos: "sudo minicom -s" nos dirigimos a "serial port setup" y configuramos los parámetros hasta que nos queden igual que en la imagen a continuación.
    Archivo configurado de minicom
    Luego de eso vamos a donde dice "Save setup as dfl" y guardamos el archivo.
  2.  ahora ya tenemos configurado minicom lo iniciamos simplemente escribiendo en consola "minicom" una vez ingresamos damos un enter para que nos aparezca la opción HiZ>
    Imagen de comunicación con BusPirate
  3. Existen muchas posibilidades que se pueden explorar con BusPirate pero nosotros solo nos vamos a centrar en los pasos para comunicarnos mediante protocolo SPI por lo tanto escribimos "m" y le damos enter nos aparecerán varias opciones y escogeremos SPI (por puesto jeje)
  4. Luego de eso nos dirá como deseamos configurar el protocolo SPI, yo lo configure de la siguiente manera: SET SPEED-->(1)30KHz, Clock Polarity --->(1)Idle low, Output clock edge ---> (2)Active to idle, Input sample phase ---->(1)Middle, CS --->(2)/CS, Select output type ---> (2)Normal
  5. Estamos casi listos para iniciar la comunicación. En lo personal para esta practica hice de fuente de energía al mismo BusPirate pero hay que activar las salidas para eso ponemos la opción "W" en mayúsculas, y luego "v" en minúsculas para observar si efectivamente tenemos energía, la salida debe ser similar a continuación.
    BusPirate como fuente de Energía
  6.  Ahora recordemos que para enviar hexadecimales en BusPirate debemos escribirlo en el siguiente formato "0x00", "0xff" una vez sabido esto vamos enviar los comandos para iniciar el LCD, estos se encuentran en el datasheet, en la columna Hex
    Comandos de Arranque para DOGM163

Comandos enviados a DOGM163 mediante BusPirate

 Finalmente podemos escribir en nuestro LCD cambiando el pin 39(RS) del DOGM163 a 5V
String en BusPirate se hace entre comillas dobles.
Resultado Final

 Muchas Gracias amigos nos vemos en otro momento!

jueves, 8 de enero de 2015

Como Iniciar el Wargame de io.smashthestack.org (Level01)

Saludos amigos, en internet encontré este servidor http://io.smashthestack.org/ es un servidor que nos permite jugar un Wargame mediante una conexión ssh. Si utilizamos Windows es pertinente descargar PUTTY para hacer la conexión ssh. Si utilizamos Linux simplemente abrimos consola y escribimos lo siguiente:

ssh level1@io.smashthestack.org
password: level1

 Una vez dentro del juego vamos a cambiarnos a la carpeta levels con el comando  

cd /levels/

Para ejecutar el software escribimos lo siguiente

./level01

Nos solicita un passcode de 3 dígitos, bueno eso es lo que debemos encontrar. :)

Lo primero que se me vino a la mente es que puede ser un script el cual debería tener el password, así que intente abrir el archivo usando el comando

vim level01

pero no fue así :( en realidad es un archivo binario. Una vez sabido esto pues entonces hay que leer el binario. Para eso podemos utilizar la herramienta GDB Cerramos el archivo que abrimos tecleando.
:q



Para ejecutar gdb escribimos en consola:

gdb level0.1

gdb nos da una consola en donde vamos a ejecutar el comando functions para saber que   funciones tiene el programa, las mismas que vamos a desensamblar mas tarde.

info functions

nos aparece una serie de funciones, la que nos interesa es la función main, la función principal.

lo siguiente que vamos a ejecutar es el comando:

disassemble main

Esta función nos da como resultado el código en ensamblador de la función main. Aquí podemos encontrar  una instrucción llamada cmp, esta instrucción se utiliza para comparar. Vemos que tiene un numero en hexadecimal $0x10f del cual solo nos interesa la ultimas 3 cifras. estas las pasamos a formato Decimal y listo tenemos la clave.


Cerramos el gdb con la tecla q y un enter.

Finalmente volvemos a ejecutar el archivo con el comando

./level01

colocamos el pass y nos abrirá un shell con privilegio para abrir el archivo que contiene el pass del nivel 2
Escribimos en consola:

vim /home/level2/.pass

de esta manera tenemos el pass para acceder al siguiente nivel.
 Espero que les guste esta entrada y que con esta breve introducción acaben los 31 retos que se encuentran en este Wargame. Saludos y abrazos a todos.


martes, 6 de enero de 2015

Reloj, Cronometro, Alarma y Contador con interrupciones PIC16F877A (MPLABX-XC8)


Saludos amigos, a continuación les presento un proyecto que hice como trabajo en la universidad. Fue una practica para aprender a usar interrupciones del microprocesador PIC16F877A.

Como Funciona?

El circuito tiene 4 funciones principales:

Reloj:
Se utiliza un oscilador 32 Khz en los pines del Timer 1 para poder generar el clock de reloj en "tiempo real".

Alarma:
Existen dos pines para igualar el reloj y así mismo colocar una alarma. Mediante el pin RD7 se puede colocar un LED o Buzzer para que funcione como alarma.

Cronometro:
El cronometro funciona mediante el Timer 2 (hay que re-calcular el valor del timer), con los mismos botones con los que se iguala el reloj podemos:
Arrancar el Cronometro, Parar el Cronometro, Detener la Visualización, Borrar el Cronometro.

Contador:
Se puede utilizar 2 botones para hacer de contador ascendente y descendente. O también se pueden utilizar dos sensores  infrarrojos. Queda a gusto del lector.

Funcionamiento General.
Mediante el Switch se elige la función que necesitamos en el circuito RCAC.
La visualización se realiza mediante 6 displays de 7 segmentos multiplexados.

Cualquier duda por favor me la comentan, les dejo el circuito para que puedan armarlo y guiarse en el funcionamiento.

Descargar Código 
Descargar Esquema



,
                                             Esquemático del circuito
                                       Gráfica del circuito en la Baseta
                                     Circuito en Funcionamiento Reloj



sábado, 3 de enero de 2015

Calculo de constantes PID de una impresora 3D Rep Rap V2 Metodo Ziegler–Nichols

Saludos amigos, antes que nada desearles un feliz año 2015 y esperando que en este tiempo logre publicar mas informacion, bueno también depende del tiempo que me quede de la Universidad y el Trabajo. :)

Hace un tiempo atrás con un compañero de la universidad hicimos como proyecto de Teoría de Control un control PID para una impresora 3D que armamos a continuación les dejo el vídeo y la explicación del funcionamiento. Espero que sea de su agrado.

 

Para aquellas personas  que como yo prefieren leer les dejo el paper que se realizo para la presentación del proyecto. En el paper se encuentra el script para Matlab u Octave que calcula PID mediante el método de Ziegler–Nichols.

Descargar el Script Aqui


lunes, 10 de noviembre de 2014

Frecuencímetro Basico en XC8 PIC18f4550

Saludos amigos, despues de un tiempo un tanto intenso regreso al blog para compartirles un pequeño proyecto que desarrolle para la U.

Como el titulo indica es una frecuencimetro muy basico pero funciona bastante bien. tiene un error maximo porcentual de 0.07%, a bajas fecuencias no tiene error pero el error aumenta conforme existe mas frecuencia de entrada.

La visualizacion se la hace mediante un LCD Dogm 163, ( en post anteriores les deje la libreria respectiva)

¿Como funciona?
Se conecta una generador de frecuencias al pic mediante el pin RA4/T0CKI y se conecta un lcd.
El frecuencimetro funciona con el contador del timer0 a 16 bits esto permite recoger valores de 2^16 hertz alrededor de 65Khz.

Como generador de frecuencias uso una tarjeta NI myDAQ de National Instuments, yo se que algunos diran que eso no se software libre y es cierto, al menos para utilizar dicho instrumento necesito de cambiarde de sistema operativo. (Aunque en el blog de vez en cuanto tocare herramientas no libres como esta)

YA ES HORA QUE NATIONAL INSTRUMENTS DE SOPORTE PARA GNU/LINUX!!!
En fin espero que les sirva

Descarga el Codigo