ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Empezar desde 0 en C, ejemplos de programación

Postea aqui toda la parte de programación del lenguaje C, C++, C#...

Moderator: Junta Directiva

User avatar
rashii
Administrador
Administrador
Posts: 533
Joined: Mon Aug 22, 2005 10:55 am
Nombre: rashii
Location: Madrid
Contact:

Empezar desde 0 en C, ejemplos de programación

Post by rashii » Mon Aug 21, 2006 1:22 pm

Hola, este post lo creamos para ayudar a todos aquellos que empiezan desde cero y se quieren adentrar en este mundo de la robótica programando en C.
¿Porque C? Hay muchos lenguajes, pero en mi opinión C es uno de los mas extendidos, que más gente conoce y bastante fácil de manejar una vez que te haces con él.

INDICE
Espero que poco a poco vayamos ampliando esta lista con los ejemplos que colgemos entre todos, ya que yo me considero novato y no os voy a poder ayudar mucho, de momento cuelgo el primer ejemplo básico que comentamos:

1-Hacer parpadear un led - Página 1
2-Encender y apagar un led con un interruptor - Pagina 2

Teoría de C
Para el que no sepa nada de C, os podeis mirar estos dos temas iniciales de teoría, en la que se describen de manera esquemática el manejo de C para los ejemplos básicos con los que empezaremos (entradas/salidas):

Fundamentos de Programación de C
Puertos de Entrada y Salida

Ambos ejemplos están sacados de la web de "El Rebujito", y su pass es "micro" . Si colgais algún tutorial/manual/codigo poned por favor la procedencia por respeto a sus autores.
Herramientas electrónicas Las herramientas que desde mi punto de vista os aconsejo son:
-Programador-> Os podeis hacer con cualquier programador para pics, aunque uno de los más usados por la gente es el TE-20 bastante conocido.
-Proto board o placa de pruebas-> Placa fundamental para todos los ejemplos que vamos a hacer, en ella se pueden insertar componentes tantas veces como se quieran. Si quieres dejarlos fijos, también puedes adquirir una "placa de topos" en la que son muy fáciles de soldar los componentes
-Multimetro (opcional pero muy recomendable)-> Aunque no es obligatorio, para comprobar conexiones, intensidades...os aconsejo tener a mano un multímetro
Microprocesador Entre todos hemos decidido que el microprocesador será el PIC 16F876 (o 16F876A), ya que es uno que ofrece bastante potencia para ejemplos futuros. Podeis ver su hoja de carácterísticas que os aconsejo que la tengais a mano en esta direccion:

Hola de características del PIC 16F876A
Software -Uno de los compiladores más usados en C es el CCS por lo que podeis usar ese compilador si quereís, aunque es de pago. Os podeis bajar una versión demo en esta dirección:
http://www.ccsinfo.com/content.php?page=compdemo" onclick="window.open(this.href);return false;
-Para simular y crear los circuitos, una de las herramientas más usadas y no muy complicadas es el programa Proteus. También os podeis bajar una versión demo en su web:
http://www.labcenter.co.uk/index_uk.htm" onclick="window.open(this.href);return false;
-Para integrar el compilador al simulador, y hacer las simulaciones en el foro de todopic pusieron dos manuales:
Integrar CSS en Proteus
Simular CCS en Proteus
De manuales, tradujeron al español el de CCS, sus autores: Andrés Canovas y Victor Dorado, lo podeis descargar de aquí:
Manual en Español de CCS
Descarga/subida de archivos Como con internet explorer a algunos os van mal los archivos (si cumpliera los estandares el explorador como mozilla..ejem) podeis subir los archivos a esta dirección en formato comprimido:
http://www.webdearde.com/upload/" onclick="window.open(this.href);return false;
y el link donde se ubicará el archivo será:
http://www.webdearde.com/upload/foro/" onclick="window.open(this.href);return false;

Modificación 28/3/09 (jariza): hace tiempo que se dejó de usar este sistema de upload.

Creo que no me olvido de nada, a continuación colgaré los ejemplos, os animo a todos a colgar vuestros ejemplos y a plantear todas las dudas que tengais, para que entre todos vayamos subiendo el nivel. Un saludo.
Attachments
fundamentosc.pdf
Fundamentos de Programación de C
(467.71 KiB) Downloaded 149 times
puertosentradasalida.pdf
Puertos de Entrada y Salida
(50.27 KiB) Downloaded 104 times
CCS_C_sp.rar
Manual en Español de CCS
(184.61 KiB) Downloaded 147 times
Last edited by rashii on Tue Aug 22, 2006 10:47 am, edited 9 times in total.

User avatar
rashii
Administrador
Administrador
Posts: 533
Joined: Mon Aug 22, 2005 10:55 am
Nombre: rashii
Location: Madrid
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by rashii » Mon Aug 21, 2006 1:33 pm

Y ahora el primer ejemplo:

1-Hacer parpadear un led

http://foro.webdearde.com/download/file.php?id=608" onclick="window.open(this.href);return false;

Code: Select all

#include <16f876>				    //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT		//instrucciones
#use delay (clock=20000000)		//Frecuencia del reloj=20Mhz
#use fast_io(b)

//inicio del programa
void main(void)
{
	set_tris_b(0xFE);		//congiguro portb como salida(RB0,las demas desactivadas)
                        //0xFE equivale a 11111110, 0 indica que es una salida,1 una entrada
   disable_interrupts(GLOBAL);  //interrupciones desactivadas

	do{
		output_low(PIN_B0);		//led apagado
		delay_ms(500);
		output_high(PIN_B0);		//led encendido
		delay_ms(500);
	}while(TRUE);					//bucle infinito
}
Estan juntos el codigo del CCS y el del proteus, si podeis poner en vuestros ejemplos los 2 mejor, ya que asi podremos ver la simulacion y el esquema que usais. Un saludo.

PD: Para postear codigo hacedlo con las etiquetas code que teneis arriba en los iconos
Attachments
led-parpadea.rar
(14.08 KiB) Downloaded 74 times
Last edited by rashii on Mon Aug 21, 2006 7:45 pm, edited 1 time in total.

User avatar
gizer20
Usuario Desarrollador
Usuario Desarrollador
Posts: 1565
Joined: Sun Sep 25, 2005 9:29 pm
Location: Sabadell
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by gizer20 » Mon Aug 21, 2006 7:31 pm

Una pregunta en la linia en ke konfiguras el puerto RB0, el pin 21, komo salida si keremos por ejemplo configurar la salida RB5 , el pin 26 komo salida tendira ke kedar asi

set_tris_b(5xFE)

User avatar
rashii
Administrador
Administrador
Posts: 533
Joined: Mon Aug 22, 2005 10:55 am
Nombre: rashii
Location: Madrid
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by rashii » Mon Aug 21, 2006 7:42 pm

Hola gizer20, no, son valores en hexadecimal, los valores en hexadecimal siempre empiezan por 0x y despues unos numeros, esos numeros dependen de si quieres configurar el pin de la patilla como entrada (1) o como salida (0). Si por ejemplo quieres configurar el pin 5 en tu caso tendrias que pasar este codigo binario 11101111 a hexadecimal, que es 0xEF (lo puedes hacer muy facilmente con la calculadora de Windows en modo cientifico, te pones en el modo binario colocas ese codigo y dandole a hex te lo convierte solo. Un saludo.
Last edited by rashii on Mon Aug 21, 2006 8:16 pm, edited 1 time in total.

User avatar
gONzAO
Usuario Avanzado
Usuario Avanzado
Posts: 217
Joined: Wed Oct 19, 2005 11:31 pm
Location: Alcorcón

Re: Empezar desde 0 en C, ejemplos de programación

Post by gONzAO » Mon Aug 21, 2006 8:06 pm

Hola:

No es que quiera ser puntilloso, pero es que no me gusta la palabra "direcciones" en el post anterior porque puede llevar a engaño.

En realidad es "un valor", un número de 8bits. Por comodidad lo ponemos en hexadecimal y para indicarle al compilador que está en esa base, al número le precede "0x".

Si alguien tiene problemas y no sabe pasar a hexadecimal que no dude en preguntarlo. Aunque al principio parece un engorro, al acostumbrarte te das cuenta de que es rápido y eficaz.

Un saludo
gONzAO

User avatar
rashii
Administrador
Administrador
Posts: 533
Joined: Mon Aug 22, 2005 10:55 am
Nombre: rashii
Location: Madrid
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by rashii » Mon Aug 21, 2006 8:21 pm

Si cierto gonzao, es la costumbre :p , lo acabo de cambiar ya que pude llevar a engaño seguro, la calculadora de Windows es muy facil de usar y te lo da todo hecho, no dudeis en usarla.
Aprovecho tambien para dejaros el esquema anterior, gracias a robotika que lo hizo :lol: ,la linea mcr es la del reset, aunque de momento la podeis conectar directamente a los 5 v ya que para este ejemplo no se necesita.
http://foro.webdearde.com/download/file.php?id=609" onclick="window.open(this.href);return false;
¿Quien se anima a colgar el proximo ejemplo?
Attachments
diodo.rar
(34.98 KiB) Downloaded 159 times

User avatar
gizer20
Usuario Desarrollador
Usuario Desarrollador
Posts: 1565
Joined: Sun Sep 25, 2005 9:29 pm
Location: Sabadell
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by gizer20 » Tue Aug 22, 2006 1:37 am

Bueno yo acabo de crear un programa para encender y apagar un led.Me he basado en la programacion que hizo furri para programar el tarribot para ke dos bumpers actuaran de sensores alla va mirad a ver si esta bien programado

Code: Select all

// Encender/Apagar un led
// Gizer20
// Agosto 2006


#include <16F876>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay(clock=20000000)

#define led  PIN_RB4


#define encendido  PIN_RB0
#define apagado  PIN_RB1

#define ON output_high
#define OFF output_low

void main()
{


   //encendemos led
   on(led);

   while (true)
   {
      
      // Boton apagar
      if (input(apagado) == 1) {
         // apagamos led
         off(led);
    
      // Boton encendido
      if (input(encendido) == 1) {
         // encendemos led
         on(led);

   }

}
El circuito lo pondre en brebe ya ke aun no me e bajado el proteus pero si lo kereis inmediatamente lo puedo colgar hecho a mano
Ya me direis ke os parece el codigo

PD: me e basado en el codigo de tarribot ya ke me parece mas intuitivo la forma de definir las salidad y las entradas es correcta o no ( aunque si se ha utilizado para tarribot creo ke si)

User avatar
rashii
Administrador
Administrador
Posts: 533
Joined: Mon Aug 22, 2005 10:55 am
Nombre: rashii
Location: Madrid
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by rashii » Tue Aug 22, 2006 10:35 am

Lo que no comprendo es porque no usas solo una entrada que tenga un interruptor para lo que quieres hacer, ya que seria mas facil...en vez de usar 2 entradas como haces en el ejemplo.

Os recuerdo, como viene en la teoria, que otras formas para encender y apagar un led pueden ser tambien estas:
1º-> output_bit(PIN_B0,1); //Sacamos el valor 1 (5v) por RB0
2º-> bit_set(portb,5); //Encendemos un led en RB5
3º->Si hubieramos declarado antes RB2=0 por ejemplo, podriamos hacer esto:
RB2=!RB2 , ya que lo que hace ! es negar lo que hubiera, si habia un 0 lo pone a 1 y si habia un 1 lo pone a 0
Y para apagarlo lo mismo pero al contrario:
output_bit(PIN_B0,0);
bit_clear(portb,5);
RB2=!RB2

Aprovecho para colgaros el ejemplo anterior que puse gizer a mi modo (solo con una entrada y un interruptor).

http://foro.webdearde.com/download/file.php?id=611" onclick="window.open(this.href);return false;

Code: Select all

//	Notas: Parpadeo de un led cada 0.5s por el pin RB0 del puerto B

#include <16f876>				//pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT		//ordenes para el programador
#use delay (clock=20000000)			//Fosc=20Mhz
#use fast_io(b)
#use fast_io(a)

///PROGRAMA
void main(void)
{
	set_tris_b(0xFE);				//portb como salida(RB0)
   set_tris_a(1F);            //pora lo pongo todo como entradas aunque solo interesa un pin

	disable_interrupts(GLOBAL);		//todas las interrupciones desactivadas

	do{

      if(input(PIN_A0)){     //Mientras el interruptor este abierto le estara entrando voltaje

      output_high(PIN_B0);

      }else
      {
       output_low(PIN_B0);    //Si se cierra se conecta a masa y no le llega tension

      }


	}while(TRUE);					//bucle infinito
}
Y aqui la captura de pantalla:

http://bulk.webdearde.com/uploadforo/interruptor.jpg" onclick="window.open(this.href);return false;

Un saludo.
Attachments
led-interruptor.rar
(13.9 KiB) Downloaded 76 times
Last edited by rashii on Tue Aug 22, 2006 10:49 am, edited 2 times in total.

User avatar
gizer20
Usuario Desarrollador
Usuario Desarrollador
Posts: 1565
Joined: Sun Sep 25, 2005 9:29 pm
Location: Sabadell
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by gizer20 » Tue Aug 22, 2006 10:44 am

en lo que estaba pensando eran en pulsadores ke kuando le klikas solo permanecen un segundo conectados aunke ahora ke miro tu codigo me parece mejor idea

User avatar
gizer20
Usuario Desarrollador
Usuario Desarrollador
Posts: 1565
Joined: Sun Sep 25, 2005 9:29 pm
Location: Sabadell
Contact:

Re: Empezar desde 0 en C, ejemplos de programación

Post by gizer20 » Tue Aug 22, 2006 8:39 pm

Una pregunta , el use fast_io(a) i el use fast_io(b) eso te refieres al grupo de entradas que utilizas no? es decir si queremos usar las entras C tendriamos de poner use fast_io(c) no?

Y despues kuando empieza el programa para seleccionar un pin tenemos de poner set_tris_c + el valor en hexagesimal del pin no?
no se si es correcto a ver ke me dices.

Por cierto el codigo tuyo me parece mas bien escrito ke el mio , mas elegante digamos felicidades

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest