domingo, 12 de abril de 2015

Sensor Ultrasónico en Arduino sin pulseIn ni Interupciones

Este post es probable que no parezca interesante, pero tiene su gracia.

Arduino cuenta con intrucciones como micros(), millis() y seconds(); las cuales incrementan un contador desde que arranca el programa y de acuerdo a su resolución, el desbordamiento va desde minutos hasta días.

Por lo leido en los foros de Arduino, la función PulseIn, usada por algunos para la lectura de sensor ultrasonico.


El siguiente es un código que hice solo como prueba para no usar PulseIn, pero con la ayuda de la intrucción micros()


int trig = 7;
int echo = 6;
int led = 13;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (led, OUTPUT);
  

}
int count1=0, count2=0;
int valor;
void loop() {
  // put your main code here, to run repeatedly:
  count1 =count2 = 0;
  digitalWrite(trig,LOW);
  delay(1);
  digitalWrite(trig,HIGH);
  delayMicroseconds(10);
  digitalWrite(trig,LOW);
  
  
  while(!digitalRead(echo)){}
    count1 = micros();
  while(digitalRead(echo))
  {
  }
  count2 = micros();
  valor = count2-count1; 
  int cm = (valor/2)/29.1;
  Serial.print(valor);
  Serial.println(" ticks");
  Serial.print(cm);
  Serial.println(" cm");
  
  delay(250);
  digitalWrite(led,LOW);
}
Se realizo un comprativo entre este código y el que usa pulseIn, tal comparativo se utilizó un vaso con agua y en sensor como medido de distancia hacia el agua, la cantidad de muestras para ambos casos fue de 113 y se debe tomar en cuenta que la colocacion del sensor no fue la mas adecuada.

miércoles, 1 de abril de 2015

Manjaro Linux, casi sin problemas por el momento Intel graphics en Gateway Mx6947

Esta laptop viejita, desde la cual estoy escribiendo, aun funciona muy bien y tiene Manjaro Linux desde el 2013 y casi no ha dado problemas, solo uno con la tarjeta de video Intel que trae
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03) ,

ya que marcaba un error con ciertas aplicaciones, entre ellas
  •  scilab 
  • vlc con algunos videos 
  • captura de mi escritorio con gtkRecordMyDesktop 
Pero como hay de todo en el foro de ArchLinux (de donde viene Manjaro) encontre esto
https://wiki.archlinux.org/index.php/Intel_graphics#InstallationSNA issues 

 From man 4 intel: There are a couple of backends available for accelerating the DDX. "UXA" (Unified Acceleration Architecture) is the mature backend that was introduced to support the GEM driver model. It is in the process of being superseded by "SNA" (Sandybridge's New Acceleration). Until that process is complete, the ability to choose which backend to use remains for backwards compatibility. SNA is the default acceleration method in xf86-video-intel. If you are experience issues with SNA, try using UXA instead, which can be done by creating an X configuration file containing the following:
 /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
 Identifier "Intel Graphics"
Driver "intel"
 Option "AccelMethod" "uxa"
EndSection 

El problema es que mi distro, no tiene en esa dirección el archivo :S

[miguel@casita ~]$ cd /etc/X11/xorg.conf.d/
[miguel@casita xorg.conf.d]$ ls 20-keyboard.conf 90-mhwd.conf@ 

Note que hay un link simbolico en la carpeta referida en el foro, por ello decidí echarme a la mar y navegar entre los directorios del etc

[miguel@casita xorg.conf.d]$ cd /etc/X11/
 [miguel@casita X11]$ ls mhwd.d/ xinit/ xorg.conf.d/
 [miguel@casita X11]$ cd mhwd.d/
[miguel@casita mhwd.d]$ ls intel.conf
[miguel@casita mhwd.d]$ less intel.conf 

 Aquí fue donde encontre el dichoso Option "AceelMethod" "sna" y lo cambie por uxa tal y como lo recomiendan y listo!!!!

incluso ya puedo correr el glxgear de open gl

Finalmente una imagen de mi lap viejita

jueves, 12 de marzo de 2015

Documentando con Doxygen Cabeceras

/** @file clk.h

@code #include  @endcode

@brief Macros para definir la frecuencia de oscilacion del reloj
principal
*/
#ifndef CLK_H
#define CLK_H




/**
 *  @name  Definitions for MCU Clock Frequency
 *  Adapt the MCU clock frequency in Hz to your target.
 *  Revisa las paginas 37-39
 */

#define F_CPU 16000000L ///< Frecuencia de 16MHz
#if F_CPU == 16000000L
#define ADC_PRESCALER 0x07  ///

Patebin link

Documentando con Doxygen programa Principal

Archivo Principal

/**@mainpage TecladoDriver.c
 * @brief Imprimir en un display de siete segmentos la tecla presionada por un teclado matricial
   @section intro
   Este programa imprime un numero desde un teclado matricial y lo pone en un display de siete segmentos de catodo comun
   es posible el uso de un display de anodo comun, a traves de una interfaz con un ULN2803
   @section Uso
   Solo se presiona una tecla del matricial y el numero aparece en el display
 * @author: Miguel Montiel
 
 */ 


#include 
#include "clk.h"
#include "keyb.h"
#include "sevseg.h"

/**
@file TecladoDriver.c
@brief Programa que escribe un numero a un display de 7 segmentos
@author Miguel Montiel
*/
int main(void)
{
	
	unsigned char tecla;
	
	_init_Teensyduino_internal_();
	vInitKeyPad();
	InitSegSeg();
	
	
    while(1)
    {
        //TODO:: Please write your application code 
		tecla = ui8_TestKeyPad();
		delay_ms(5);
		Print(tecla);
    }
}

domingo, 1 de marzo de 2015

Desde casa!!! Hace casi un año que no he escrito nada, y no por falta de quehacer, sino mas bien por exceso, espero retomar pronto mis notas del blog. Saludos

viernes, 28 de marzo de 2014

Vector Linux 7.0 en Celeron 600MHz con 64MB en RAM

;) si fue posible instalar Vector Linux y compilar GCompris 12.05 en este equipo, el problema es que la velocidad en que corre gcompris es muuuy lenta, pero si corre, el audio funciona muy bien.

Creo se usará este equipo para hacer otras cosas como aun automatizacion pequeña