Autor Tema: ¿Cómo hacer un interruptor?  (Leído 1358 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RIV

  • PIC10
  • *
  • Mensajes: 1
¿Cómo hacer un interruptor?
« en: 25 de Agosto de 2009, 06:50:08 »
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: [Seleccionar]

#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: [Seleccionar]

#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è?
Lo que ocurre es que el LED está siempre encendido, pero cuando apretas el botón la intensidad del LED baja a veces.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ¿Cómo hacer un interruptor?
« Respuesta #1 en: 25 de Agosto de 2009, 07:20:44 »
Hola. Bienvenido al mundillo de los uC PIC.

Primero: Acostumbrate a leer el datasheet:

en la página 19 verás que para configurar todos los pines del puerto GP como digitales, el valor correcto para el registro CMCON es el 0x07. NO EL 0x00.

Segundo: No especificaste qué compilador de C usás. Supongo que usarás alguno de Microchip.

Tercero: Puede que el error esté en el hardware. El pin debería ir conectado con una pullup a 5V. Detrás de esto deberías venir el pulsador conectado a 0V.De esta manera aseguras que siempre estén ambos estados lógicos definidos y presentes en el pin GP3.

Saludos.






"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything