Archivo

Archive for the ‘Programacion’ Category

Programación II

Buenas, Ayer publique un circuitillo que trabajaba en parte en analógico, sin embargo no hemos hablado aún de lo analógico. Sabemos que los microcontroladores solo entienden digital es decir 0 ó 1, o lo que es lo mismo, tensión alta, tensión baja. Además también sabemos que todo en general es analógico. Así pues necesitamos digitalizar estas señales para poder trabajar con ellas, por suerte, disponemos de 8 pines de entrada analógicas. Es decir el propio PIC nos traducirá un valor analógico en un numero entre 0 y 1023 (por ello lo dividíamos entre 4 para establecer la posición del servo (0-250)). Para leer este dato debemos usar los pines del 13 al 20 ambos incluidos mediante la función analogRead(pin) . Además también necesitaríamos de una salida analógica para comunicarnos con el mundo exterior, ya que por ejemplo de esta forma se podría controlar la velocidad de un motor RC, la luminosidad de led, incluso la emisión de una señal analógica de baja frecuencia. Sin embargo para esto utilizaremos el módulo PWM, de los cuales solo disponemos de dos, y peor aún, solo podremos usar uno a la vez. Así pues tan solo podremos usar los pines  11 y 12. Ademas solo podremos darle valores entre 0 y 1023 mediante la función analogWrite(pin,valor). Leí por ahí la posibilidad de incluir mas módulos PWM mediante interrupciones, pero antes quisiera enseñaros de que se trata y como hacer una.

Un saludo!!

PD. aun no puse el esquematico del circuito de ayer ya que aún no explique lo que es un potenciometro, pero ya mañana sin faltas lo pongo.

Manejo del servo mediante un Potenciometro

14/02/2011 2 comentarios

Buenas, aqui os dejo un pequeño ejemplo del manejo de un servo mediante un potenciometro, con esto podemos simular una articulación a tiempo real, entro otras cosas.

Os dejo un pequeño video para que vean lo que hace:

Enlace

A continuación os deo el código:

——————————————————-

// Controla la posicion del servo mediante un potenciometro.
//   +—–+
//   |servo|——— PWM Servo control —> to pinguino pin 0.
//   |          |——— +5V
//   |    o    |——— GND
//   |          |
//   +—–+

#define PIC18F4550

uchar position=125;

void setup(void){
servo.attach(0);
pinMode(13,INPUT);
}

void loop(void){
position = analogRead(13)/4;
servo.write(0,position);
}

—————————–

UN SALUDO!

PD. Siento haber tardado tanto en volver a publicar, pero tras la semana de examenes necesitaba poner al día otras cuestiones, espero recuperar el ritmo de una actulización al dia.

PPD. devido a que ya se vendio el primer pinguino, os dejo AQUÍ la dirección del siguiente por si están interesados.

Programación I

Buenas, como dije, hoy voy a empezar un tutorial sobre programación para el Pinguino. Bueno, por lo pronto comentar que en Pinguino existen tres tipos de funciones esenciales. La de incialización donde se inicializan y declaran todos los parametros de nuestro programa: void setup() . La de programa, donde se ejecutará el programa, es decir la principal: void loop(void) . Y la de interrupción, la cual se ejecutara cuando se produzca un evento de interrupción (se explicara en breve, no os preocupeis): void UserInterrupt() . Para hacer otra función (que ya veremos con detenimiento que son) se han de declarar y por supuesto deben tener otro nombre. Está PROHIBIDO la RECURSIVIDAD!!!

Bueno y por que os cuento esto, si ni siquiera he explicado que es una función, pues bueno digamos por que sin esto no somos capaces de hacer un programa, y así pueden ir jugando con lo que se os explique.

Bueno ahora vamos a comentar un poquitín sobre el PIC 18F4550. Este es el microcontrolador que usa el pinguino tiny 18f4550. Tiene un procesador capaz de trabajar a una velocidad máxima de 48MHz, en nuestro caso a lo usamos a 20MHz. 35 pines que pueden ser usados como entrada o salida, en nuestro caso solo disponemos de 26 ya que las otras seis están ocupadas a otros propósitos. 13 entradas analógicas, que darán un numero analógico normalmente entre 0 y 1023. Dos comparadores analógicos, 4 contadores y otros elementos de los que hablaremos más adelante.

Lo primero que nos debe de llamar la antención es que tenemos 29 (0-28) pines que podemos usar como entrada y como salida. Esto obviamente debemos de configurarlos para que en cada ejecución el micro sepa si vamos a usar el pin como entrada o como salida, de otra forma podriamos ocacionar algun daño en los componentes o en el contrador mismo, pero no os preocupeis, si no lo declarais no os dejará compilar. El comando que vamos a utilizar es PinMode(pin,mode), donde pin podemos usar cualquiera, y donde mode INPUT de entrada y OUTPUT de salida.

Muy bien ahora ya podemos usar nuestros pines, pero, ¿y ahora que?. Ahora podemos encenderlos o apagarlos si son de salida, o leerlos si son de entrada. Para escribir sobre un pin podemos usar el comando digitalWrite(pin,mode) donde el pin selecciona el pin y el mode si es HIGH encendido o LOW apagado. Y para leerlos podemos usar digitalRead(pin), donde si vale uno, significa que esta encendido y si vale 0 apagado.

Bueno por hoy hemos terminado, mañana seguiré con la lección y nos meteremos en el mundo de las variables.

PD en sobre mi puse mi dirección de mail, si teneis alguna duda o sugerencia do dudeis en hacermelo saber. MUCHAS GRACIAS.