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

Temas similares

18/07/2012 #1

Avatar de superdog13

Control de motores por medio de teclado 4x4 (PIC 18F4550)
Bueno, la pregunta es fácil, y la respuesta se que lo será también, ya que el código en si es bastante elemental, pero aunque he buscado no logro encontrar el por qué no sirve.

La idea del código es que dependiendo de qué tecla de un teclado matricial 4x4 se presione, un determinado motor (de 4) gira en un sentido específico.

Bueno, el código es el siguiente:

Código:
#include <p18f4550.h>
#include <delays.h>

void teclado(void);
void g1i(void);
void g1d(void);
void g2i(void);
void g2d(void);
void g3i(void);
void g3d(void);
void g4i(void);
void g4d(void);

int g=0;

void main(){
	TRISB=0xF0; TRISD=0;
	ADCON1=0x0f;
	PORTD=0;PORTB=0;
	while(1){
		teclado();
/*		if(g=1){g1i();}
		else if(g=2){g1d();}
		else if(g=3){g2i();}
		else if(g=4){g2d();}
		else if(g=5){g3i();}
		else if(g=6){g3d();}
		else if(g=7){g4i();}
		else if(g=8){g4d();} */
	}
}

void teclado (void){
teclado:	
	PORTD=1;
		if(PORTDbits.RD4==1){PORTB=1;Delay10KTCYx(100);return;}
		if(PORTDbits.RD5==1){g=2;return;}
		if(PORTDbits.RD6==1){g=3;return;}
		if(PORTDbits.RD7==1){g=4;return;}
	PORTD=2;
		if(PORTDbits.RD4==1){g=5;return;}
		if(PORTDbits.RD5==1){g=6;return;}
		if(PORTDbits.RD6==1){g=7;return;}
		if(PORTDbits.RD7==1){g=8;return;}
	PORTD=4;
		if(PORTDbits.RD4==1){g1i();return;}
		if(PORTDbits.RD5==1){g=2;return;}
		if(PORTDbits.RD6==1){g=3;return;}
		if(PORTDbits.RD7==1){g=4;return;}
	PORTD=8;
		if(PORTDbits.RD4==1){g=5;return;}
		if(PORTDbits.RD5==1){g=6;return;}
		if(PORTDbits.RD6==1){g=7;return;}
		if(PORTDbits.RD7==1){g=8;return;}
	goto teclado;
}

void g1i(){
	PORTB=1;
	Delay10KTCYx(100);
}

void g1d(){
	PORTB=2;
	Delay10KTCYx(100);
}

void g2i(){
	PORTB=4;
	Delay10KTCYx(100);
}

void g2d(){
	PORTB=8;
	Delay10KTCYx(100);
}

void g3i(){
	PORTB=16;
	Delay10KTCYx(100);
}

void g3d(){
	PORTB=32;
	Delay10KTCYx(100);
}

void g4i(){
	PORTB=64;
	Delay10KTCYx(100);
}

void g4d(){
	PORTB=128;
	Delay10KTCYx(100);
}
Ahora, el problema es que al haer el barrio del teclado, ningún motor funciona.
Como se puede ver en el código, lo intenté de tres formas diferentes:
  • Dependiendo de qué tecla se presione, el programa "saltará" a una función específica.
  • Dependiendo de qué tecla se presione, se mueve cada motor de forma "directa".
  • Dependiendo de qué tecla se presione, se le asigna un valor a una variable, para luego en el "main" llamar a la función correspondiente.

No se por qué ninguna de las tres formas sirve, y no logro encontrar el problema, podrían ayudarme con esto ???
19/07/2012 #2

Avatar de Scooter

Supongo que los motores ya funcionan correctamente si los mandas directamente sin lógica alguna.
19/07/2012 #3

Avatar de superdog13

El montaje no está probado de verdad. Hablo de que no sirve en la simulación en preoteus.
Adjunto el archivo para la simulación:
Archivos Adjuntos
Tipo de Archivo: rar Lab 3 - Control Brazo Robótico.rar (42,4 KB (Kilobytes), 97 visitas)
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.