Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

16/08/2009 #1


Duda con LEDs (principiante)
Hola a todos.
Soy estudiante de ingenería industrial y desde siempre me ha interesado mucho todo lo relacionado con los chips. Como en mi carrera de momento no hemos hecho nada y yo creo que no se puede ser ingeniero sin saber programar un chip para luego conectarlo a un circuito electrico he decidido comenzar siendo autodidacta. Espero aprender muchísimo y hacer muchos inventos caseros.
Hace como una semana que tengo el PIC y aun nose como hacer un boton de encendido o de apagado. He diseñado mi propio código y no me funciona.
Mis conocimientos de programación és casi nulo y los de los PIC's completamente nulo, pero tengo la intención de acabar siendo un "guru".
Ya me he presentado y ahora el problema real.
Tengo el Pickit1 de Microchip, contiene un PIC12f675. Utilizo un compilador de "C" para crear el archivo hex.
El programa en sí: Quiero hacer un programa tal que apreto el botón 1a vez y se enciende la luz, y que aprete el botón otra vez y que se apague la luz.
En este caso, el botón está definido por el GPIO3.

Archivo ".H" este se llama 1er_LED.h

Código:
#ifndef _1erLED
#define _1erLED
#include <pic.h>

__CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);   
#define button				GPIO3
#define TRIS_D0_D1			0b00001111 //defino las entradas y salidas
#define D0_ON				0b00010000 
#define D0_OFF				0b00000000
#define LEDON				GPIO4==1

int i,j,p;

#endif
ARCHIVO ".C"

Código:
#include "1erLED.h"

void main(void) {
	
		ANSEL = 0b00000000;
		TRISIO = TRIS_D0_D1;	
		OPTION = 0b11010000;
		GPIO = D0_ON;
		CMCON = 0b00000000;
		i = 1;
		j = 0;
		p=0;

	while(1){
		if (button == 1){            	//Si el button está presionado
			while(button == 1){             	//Mientras el boton está presionado
				i=i*1/i;                	//que haga un bucle inútil hasta que el 
			}			                         	//botón deje de estar presionado
			j=j+1;	            		//Cuando el botón deje de estar presionado,
		}			                    		//hay un sumatorio de "j"
		p = j%2;		                  	//p es el producto de dividir j entre 2
					                       		//para así obtener un residuo de 0 o 1
		if (button == 0){                       	//Si el botón está sin presionar  
		while ( button == 0){                       	//evidente a estas alturas del programa
			if(p=0){	                             	//Si el residuo es 0
				GPIO = D0_ON;                   //Se enciende el led
			}
			else{
				GPIO = D0_OFF;           //Se apaga el led
			}
		}
	}
	}

Entonces el problema es que me compila bien pero no funciona.¿Alguién me sabría explicar porquè?

PD: Alguién me explica porqué me sale tan feo en el foro el programa que he escrito.
16/08/2009 #2
Moderador

Avatar de Chico3001

De entrada bienvenido al foro, el problema con el codigo lo tienes por que necesitas poner el codigo dentro de las etiquetas code y /code

en cuanto al programa necesitamos que nos des una descripcion mas detallada de que no hace el PIC por que muchas veces el error no esta en el programa si no en el hardware

Tambien te recomiendo que te des una vuelta por los temas destacados de este foro por que alli hay muchos tutoriales que te pueden dar una ayudadota en la programacion de los PICs
18/08/2009 #3


Pues lo que pasa es que el LED está siempre encendido, pero cuando apretas el botón la intensidad del LED baja.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.