Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Wenas a todos.
Tengo un pequeño problema,
#include "ionTraker.h"
//Registres
#byte PORTA = 0x05
#byte TRISA = 0x85
#byte PORTB = 0x06
#byte TRISB = 0x86
//LED
#bit LED = PORTB.1
//Motors
#bit MotorEsq = PORTB.4
#bit MotorDret = PORTB.2
#bit ControlEsq = PORTB.3
#bit ControlDret = PORTB.1
#define EsqEnda 1
#define DretEnda 0
#define EsqEnde 0
#define DretEnde 1
//Sensors infrarojos
#bit SensorIntEsq = PORTB.5
#bit SensorIntDret = PORTB.0
#define Negre 1
#define Blanc 0
//Bumpers
#bit BumperEsq = PORTA.1
#bit BumperDret = PORTA.2
#define Pulsat 1
#define NoPulsat 0
//Altres
#define ON 1
#define OFF 0
void SeguirLinea();
void main()
{
//Configuració
//---------------------------------------------------------------------------
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//---------------------------------------------------------------------------
TRISA = 0b00000110;
TRISB = 0b11100001;
PORTA = 0;
PORTB = 0;
SeguirLinea();
}
void SeguirLinea(){
while(TRUE){
if(BumperEsq == Pulsat){
LED = ON;
delay_ms(1000);
LED = OFF;
delay_ms(1000);
}
}
}
El programa simplemente hace parpadear el LED cuando hay el bumper izquierdo pulsado. El problema es que hace parpadear siempre el LED, es como si el bumper siempre estuviera pulsado. Aparte de eso, cuando pulso el botón de reset el relé hace ruido.
Ese problema me esta haciendo volver loco, ya que los sensores de infrarojos tambien hacen lo que quieren, etc...
Saludos.
P.D: Voy a provar de cambiar las pilas, 3.7V.....
Que entorno de programacion usas?
trisa=0x85 es decir 1000 0101 si no me confundo. Ahí el porta1 tiene un 0, es decir es una output. Si pones el bumper ahí, no debería ser un 1? una input?
edito: veo que lo cambias abajo con un trisa=, puede ser la configuración del adc, que por defecto vaya configurado la entrada en analógico y leas 1, mira si es esto, y si es así debes configurarlo como digital.
mete esto para asegurarte ADCON1 = 0b00001111;
Aunque supongo que los setups esos hacen lo mismo.
Comprueba tb con un polímetro en el pin de entrada que el bumper está funcionando.
Qué ventaja o en que se diferencia usar #bit en lugar de #define? porque ahí puedes ponerlo con un #define
Utilizo CCS.
Si en los #bit usas #define da error de compilación.
A mí me gusta mas utilizar #bit, ya que con poner el bit a 1 o 0 es suficiente, de la otra forma tienes que andar con output_high() i output_low().
Eso son dos fromas de declarar los pines, las dos hacen lo mismo:
#bit lol = PORTB.1
#define lol PIN_B1
Saludos.
suponiendo que el programa no te da ningun error o warning de compilacion...
Como queda PORTA.1 al desconectar el bumper? queda el pin al aire o conectado a masa? si queda al aire, conectalo a masa con una resistencia de unos 10k. De lo contrario, un pin al aire suele dar problemas.