Tuesday 1 July 2014

Real Time Clock para Arduino

 Pequeño tutorial para hacer funcionar un reloj tiempo real que utilizo para mi arduino.
El modelo es Tiny RTC I2C Modules y es el de la foto.
Como pueden ver, la batería es recargable.
La conexión es la siguiente:



|     RTC       |   Arduino |
|     GND       |      GND   |
|     VCC       |        +5V   |
|     SDA       |        A4     |
|     SCL       |         A5     |
|     BAT       |      +3.3v   |



Código:

Poner la hora

  1. /* Downloaded from http://projectsfromtech.blogspot.com/
  2. *Connect SCL, SDA, Vcc, and GND
  3. *Set date in function below.
  4. *Upload and enjoy!
  5. */
  6.  
  7.  
  8. //Arduino 1.0+ Only
  9.  
  10. #include "Wire.h"
  11.  
  12. #define DS1307_ADDRESS 0x68
  13. byte zero = 0x00; //workaround for issue #527
  14.  
  15. void setup(){
  16.   Wire.begin();
  17.  
  18.  
  19.  
  20.   Serial.begin(9600);
  21.   setDateTime(); //MUST CONFIGURE IN FUNCTION
  22. }
  23.  
  24. void loop(){
  25.   printDate();
  26.   delay(1000);
  27. }
  28.  
  29. void setDateTime(){
  30.  
  31.   byte second =     00; //0-59
  32.   byte minute =      37; //0-59
  33.   byte hour =        23; //0-23
  34.   byte weekDay =    1; //1-7
  35.   byte monthDay =    30; //1-31
  36.   byte month =       7; //1-12
  37.   byte year  =       14; //0-99
  38.  
  39.   Wire.beginTransmission(DS1307_ADDRESS);
  40.   Wire.write(zero); //stop Oscillator
  41.  
  42.   Wire.write(decToBcd(second));
  43.   Wire.write(decToBcd(minute));
  44.   Wire.write(decToBcd(hour));
  45.   Wire.write(decToBcd(weekDay));
  46.   Wire.write(decToBcd(monthDay));
  47.   Wire.write(decToBcd(month));
  48.   Wire.write(decToBcd(year));
  49.  
  50.   Wire.write(zero); //start
  51.  
  52.   Wire.endTransmission();
  53.  
  54. }
  55.  
  56. byte decToBcd(byte val){
  57. // Convert normal decimal numbers to binary coded decimal
  58.   return ( (val/10*16) + (val%10) );
  59. }
  60.  
  61. byte bcdToDec(byte val)  {
  62. // Convert binary coded decimal to normal decimal numbers
  63.   return ( (val/16*10) + (val%16) );
  64. }
  65.  
  66. void printDate(){
  67.  
  68.   // Reset the register pointer
  69.   Wire.beginTransmission(DS1307_ADDRESS);
  70.   Wire.write(zero);
  71.   Wire.endTransmission();
  72.  
  73.   Wire.requestFrom(DS1307_ADDRESS, 7);
  74.  
  75.   int second = bcdToDec(Wire.read());
  76.   int minute = bcdToDec(Wire.read());
  77.   int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  78.   int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  79.   int monthDay = bcdToDec(Wire.read());
  80.   int month = bcdToDec(Wire.read());
  81.   int year = bcdToDec(Wire.read());
  82.  
  83.   //print the date EG   3/1/11 23:59:59
  84.   Serial.print(month);
  85.   Serial.print("/");
  86.   Serial.print(monthDay);
  87.   Serial.print("/");
  88.   Serial.print(year);
  89.   Serial.print(" ");
  90.   Serial.print(hour);
  91.   Serial.print(":");
  92.   Serial.print(minute);
  93.   Serial.print(":");
  94.   Serial.println(second);
  95.  
  96. }

Obtener la hora

  1. /* Downloaded from http://projectsfromtech.blogspot.com/
  2. *Connect SCL, SDA, Vcc, and GND
  3. *Open Serial Monitor and enjoy!
  4. */
  5.  
  6. //Arduino 1.0+ Only
  7.  
  8. #include "Wire.h"
  9. #define DS1307_ADDRESS 0x68
  10.  
  11. void setup(){
  12.   Wire.begin();
  13.   Serial.begin(9600);
  14. }
  15.  
  16. void loop(){
  17.   printDate();
  18.   delay(1000);
  19. }
  20.  
  21. byte bcdToDec(byte val)  {
  22. // Convert binary coded decimal to normal decimal numbers
  23.   return ( (val/16*10) + (val%16) );
  24. }
  25.  
  26. void printDate(){
  27.  
  28.   // Reset the register pointer
  29.   Wire.beginTransmission(DS1307_ADDRESS);
  30.  
  31.   byte zero = 0x00;
  32.   Wire.write(zero);
  33.   Wire.endTransmission();
  34.  
  35.   Wire.requestFrom(DS1307_ADDRESS, 7);
  36.  
  37.   int second = bcdToDec(Wire.read());
  38.   int minute = bcdToDec(Wire.read());
  39.   int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  40.   int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  41.   int monthDay = bcdToDec(Wire.read());
  42.   int month = bcdToDec(Wire.read());
  43.   int year = bcdToDec(Wire.read());
  44.  
  45.   //print the date EG   3/1/11 23:59:59
  46.   Serial.print(month);
  47.   Serial.print("/");
  48.   Serial.print(monthDay);
  49.   Serial.print("/");
  50.   Serial.print(year);
  51.   Serial.print(" ");
  52.   Serial.print(hour);
  53.   Serial.print(":");
  54.   Serial.print(minute);
  55.   Serial.print(":");
  56.   Serial.println(second);
  57.  
  58. }

Bug:

Muestra una fecha invalida como 7/31/14 2:27:36

Labels: , ,

Comandos, tips y programas en Linux

Hola! En este post vuelo a mis orígenes, compartiendo algunas cosas del mundo linuxero. En vez de poner el nombre de un comando y que es lo que hace, voy a poner preguntas cotidianas y con que comando pude encontrar la respuesta.
Espero que les sirva!

Mi distro:

Antes que nada, veamos que distro tengo.
Si ejecuto lsb_release -a van a ver lo siguiente:
  $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 16 Petra
Release: 16
Codename: petra

Comandos útiles:

¿Como saber que esta haciendo el sistema? ¿Que le pasa a mi maquina?Algunas veces nos pasa que "sentimos" lento el sistema, o tenemos problemas para conectarnos a Wifi, algo no nos funciona, etc, y queremos saber que es lo que pasa por abajo. 
En linux podemos ver los mensajes del kernel mediante el comando dmesg que nos muestra algo parecido a esto:
Salida de dmesg
En ese log vamos a poder ver que esta haciendo el sistema (siempre y cuando las aplicaciones escriban en el log)

¿Como leer logs en tiempo real?

Tambien nos puede pasar que necesitemos ver el log de una aplicacion que no esta relacionada con el kernel, por lo que leemos su log. (La mayoria de los logs deben estar en /var/log) A la hora de debuggear una aplicacion, vamos a necesitar ver que hace en tiempo real, por lo que podemos recurrir al comando tail -f que nos permitirá hacerlo. De esta manera, visualizaremos el contenido del archivo a medida que es escrito.
leyendo un log

¿Que aplicacion esta consumiendo mi ancho de banda?

Eso mismo. Tengo tantas cosas corriendo en mi maquina que quiero saber cual se esta comiendo mi conexion. El comando iftop nos muestra el uso de ancho de banda por procesos.
iftop

¿Que aplicacion esta tonteando usando con mi disco duro?

Idem anterior pero para ver quien esta utilizando el disco duro. Para esto tenemos el comando iotop
iotop

Explorador del sistema de archivo desde command line

Si trabajaste con computadoras en la epoca del Windows 95 y 3.1, seguramente la imagen de mc te es familiar. La interfaz es muy parecida al Norton Comander, pero en Linux es Midnight Commander. Conserva los mismos atajos de teclado que el Norton: F5 para copiar archivos, F6 para moverlos, F8 para borrarlos y F9 para acceder al menu. Ahi podemos conectarnos a un servidor por SSH o FTP. Altamente recomendado.
mc

Editor de texto en consola

Fácil: nano. Mas fácil que usar vi o vim. También esta mcedit que viene con el Midnight Commander
nano
mcedit

¿Como puedo ver el "administrador de tareas" en consola?

Si bien con ps aux podemos ver todos los procesos que esta corriendo el sistema, top permite verlos en tiempo real. Lo mismo con htop pero éste ultimo es mas bonito y muestra los micros.
top

HTOP

¿Quiero conocer en que red estoy?

Para analizar nuestra red tenemos varios comandos. Los que mas utilizo son:
ifconfig para saber que ip tengo asignada
route para conocer mi puerta de enlace
cat /etc/resolv.conf para conocer los dns que tengo configurados
nmap para ver que puertos tiene abiertos el gateway
Conociendo la red

¿Como buscar un archivo? ¿Como buscar un archivo que contenga un texto determinado?

Para ambos casos usamos find
Si queremos buscar un archivo por nombre, la sintaxis es find . -name <nombre>
En el caso de que queremos buscar un archivo que contiene x texto, la sintaxis es: find . -type f | xargs grep -i <texto_a_buscar>
Find

¿Cuantas particiones tengo? ¿Como montarlas?

Como root, ejecutamos el comando fdisk -l. Ahi vamos a ver todas las particiones de nuestro disco.

fdisk

Tools gráficas:

¿Que esta pasando en mi red local?

Etherape permite ver de manera gráfica, que esta pasando en nuestra red.
etherape

¿Que dispositivos tengo en mi red local con UPNP y que puedo hacer con ellos?

Esta un poco mas explicado en el post del hacking al smart tv . Upnp-inspector es una tool escrita en python que permite ver que tenemos en nuestra red y como podemos interactuar con esos dispositivos.

upnp inspector

Pregunta para ustedes... ¿que comando utilizan y en que situaciones?

Labels: , , ,