Mostrando entradas con la etiqueta circuito. Mostrar todas las entradas
Mostrando entradas con la etiqueta circuito. Mostrar todas las entradas

domingo, 1 de septiembre de 2013

[PROYECTO] Wirelearn Robot Shield (WRS)

Tras un verano llevando a la práctica una serie de proyectos, desde Wirelearn te traemos una sucesión de entradas explicando paso a paso y desde cero, el proceso completo para crear tu propio robot seguidor de líneas (line follower) a partir de una placa Arduino UNO.

Sugerencia de presentación, como el atún en lata... XD

En las sucesivas entradas veremos cómo afrontar el planteamiento y diseño de la circuitería, la creación de la misma mediante insolado y revelado casero de PCB (printed circuit boards), algunos tips para soldar los componentes, la programación y flasheado del programa, y la construcción del chasis con materiales asequibles.

Nuestros objetivos principales serán los de la mayoría de los aficionados a la electrónica y la robótica. Los factores que más nos preocupan son entre otros el precio, la complejidad y el tiempo. Pero te adelantamos, que si bien ha sido un proyecto duro para nosotros, no lo será tanto para tí, ya que las dificultades propias de cualquier proyecto de este calibre ya han sido tratadas y resueltas.

Como requisitos previos, es recomendable haber trasteado un poco con Arduino y un poco de electrónica no vendría nada mal. Pero la idea es explicarlo todo al máximo y argumentar adecuadamente cada uno de los pasos, para evitar esa sensación que queda a veces de estar haciendo algo sin tener ni p*ta idea sin comprender al máximo todos los detalles subyacentes.

En breve comenzamos con el diseño del circuito, pero para ir adelantando conocimientos, échale un ojete a nuestra entrada sobre Motores paso a paso (steppers) porque incidiremos en ello más adelante.

Un saludo!

MRGZ.

miércoles, 18 de enero de 2012

HolaMundo en Hitech-C || Parpadeo de un led



El primer programa que se suele afrontar a la hora de entrar en el mundo de los PIC es hacer parpadear un led. En primer lugar debemos ser conscientes del funcionamiento del Led. En éste caso, partimos de un led que funciona a un voltaje de 1,7V y una intensidad de 10mA.

Habitualmente, la salida del PIC es de unos 5V. Eso es casi 3 veces mas de lo que soporta nuestro LED, y de conectarlo directamente, se quemaría enseguida. Para evitar esta catástrofe, haremos uso de la ley de Ohm para calcular la resistencia que debemos utilizar. De ésta manera, nuestra resistencia sera el cociente de V / I, donde V es la tensión óptima en el ánodo del LED, e I la intensidad de la rama en cuestión.

Dejándonos de tecnicismos, 3,3V / 10 mA = 330Ω, que pasado a código de colores estándar de las resistencias es Naranja – Naranja – Marrón – tolerancia.


Recordad que los LED (Light Emmiting Diode) como su propio nombre indica, son diodos, lo cual denota polaridad. Para que conduzcan, el ánodo ha de ser más positivo que el cátodo.

ATENCIÓN: Tanto para éste tutorial como para los demás, se parte de un PIC modelo 16F887 salvo que se especifique lo contrario. Los programas y las conexiones pueden variar entre modelos, por lo que, en caso de utilizar un dispositivo diferente al mencionado, deberéis comprobar que todo esté correcto antes de alimentar el circuito. 

Conectaremos a la pata 2 (RA0) de nuestro PIC el LED en serie con la resistencia de 330Ω y finalmente a GND.

Ya tenemos los conocimientos necesarios sobre el circuito. Ahora vamos con el programa:
#include <htc.h>
#define _XTAL_FREQ 8000000

void main(){

    ANSELH = 0;
    ANSEL = 0;
    TRISA = 0;
    PORTA = 0;

    while(1){
        RA0 = 1;
        __delay_ms(500);
        RA0 = 0;
        __delay_ms(500);
    }
}


Breve explicación del código:


  • Si no se establecen los valores de ANSELH y ANSEL, el programa no funciona, ya que si un PIN está seleccionado como analógico, automáticamente pasa a estar configurado como entrada. Por tanto, una modificación por software sobre PORTA en este caso, no tendría ningún efecto. Ésto pasa en éste modelo de PIC, al menos. He trabajado con su antecesor, el 16F877 y carece de éstos dos registros. No obstante, éstas configuraciones pueden comprobarse en el Datasheet, en el apartado de "I/O Ports".
  • Acerca de la librería <htc.h>, es la que define los nombres de registros, los nombres de los pines y algunas de las funciones estándar de hitech-c que se utilizan comúnmente como __delay_ms(). Por eso es necesario incluirla SIEMPRE.
  • La directiva #define _XTAL_FREQ hertzs es necesaria para la utilización de los delays, ya que lo que éstos hacen es generar instrucciones en función de la frecuencia a la que funciona el PIC. Tendréis que convivir con ella.
  • La función __delay_ms() lleva dos barras bajas al principio. Aún no me he molestado en indagar por que utilizan nombres tan feos para algunas cosas. Simplemente realiza una espera activa de los milisegundos pasados por parámetro.

Y dicho todo esto, ahora podemos simular nuestro proyecto con MPLAB SIM observando el valor del registro PORTA con un punto de debug en las instrucciones RA0 = 1 y RA0 = 0. Si todo está correcto, el bit menos significativo del puerto A debería alternar entre 0 y 1.

Probablemente algunos habréis pensado en simular con animación. Cuando utilicéis en vuestros programas la función __delay_ms o __delay_us, descartad inmediatamente ésta opción. La explicación es sencilla:

Cada paso del simulador es una instrucción. Cada instrucción dura medio microsegundo real (recordad: 8Mhz y 4 ciclos por instrucción). Si echamos cuentas, un delay de 500 milisegundos equivaldría a ¡un millón de instrucciones! Si ahora suponemos que vuestro simulador avanza una instrucción cada medio segundo, tendríamos que esperar la bonita cifra de 5,78 días para ver que nuestro LED cambia de apagado a encendido, y otro tanto para volver a apagarse.

Es por eso, que  vale mas prevenir, y poner un STOP en esas dos líneas, y darle al play normal.

En caso de duda, comentad.

Saludos – MarcosR. @IAmRutiger