Autor Tema: Pulsadores siempre activos...  (Leído 2816 veces)

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

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Pulsadores siempre activos...
« en: 10 de Febrero de 2005, 07:24:00 »
Tengo este código:

Codigo:

void menu_modo(void)
{
   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("Restaurar Valores?");
   lcd_gotoxy(1,2);
   lcd_putc("0 SI");
   lcd_gotoxy(1,3);
   lcd_putc("1 NO");
   lcd_gotoxy(1,4);
   lcd_putc("OPCION :");
   for(i=0;i!=255;i++)
   {
      delay_ms(20);
      restart_wdt();
      lcd_gotoxy(10,4);
      printf(lcd_putc,"%u",opc);
      if(!t_mas){i=0; delay_ms(100); opc++; if(opc>1){opc=0;};}
      else if(!t_mns){i=0; delay_ms(100); opc--; if(opc==255){opc=1;};}
      else if(!t_ok){delay_ms(100); break;}
   };
   intf=0; intf1=0; intf2=0;
   if(opc==0){lcd_putc("f"); break;}
   else if(opc==1){menu_ajustes();}
}



Y este esquema para los pulsadores:
http://www.pablin.com.ar/electron/proyecto/turnero/
Os pongo este como ejemplo que es igual que el mio, es el de la R de 1K, NO el de 10+.

Bien, pues el resultado en el LCD es que es una cuenta ascendente continua de 0 a 1, y vuelta a 0, sin parar.... el problema es eso, q no está fijo :P ... y no se el pq :S

Gracias por adelantado! ;)

pd: en el proteus va perfecto :S, he comprobado que le llegan 5V al pic, con el pulsador en estado normal, y que efectivamente se va a 0V cuando se pulsa... he probado a cambiar la sentencia:
if(!t_mas)
por
if(t_mas==0)
q es lo mismo, y efectivamente, es lo mismo... sigue igual! jaja... alguna idea???

gracias! ;)

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Pulsadores siempre activos...
« Respuesta #1 en: 10 de Febrero de 2005, 09:15:00 »
No lo entiendo!, definitivamente no lo entiendo!, he modificado lo anterior de la siguiente forma:
Codigo:

void menu_modo(void)
{
   lcd_putc("f");
   lcd_gotoxy(1,1);
   lcd_putc("Restaurar Valores?");
   lcd_gotoxy(1,2);
   lcd_putc("0 SI");
   lcd_gotoxy(1,3);
   lcd_putc("1 NO");
   lcd_gotoxy(1,4);
   lcd_putc("OPCION :");
   for(i=0;i!=255;i++)
   {
      delay_ms(20);
      restart_wdt();
      lcd_gotoxy(10,4);
      printf(lcd_putc,"%u",opc);
      if(!t_ok){delay_ms(100); break;}
      else if(t_mas==0){i=0; delay_ms(100); opc++; if(opc>1){opc=0;};}
//      else if(!t_mns){i=0; delay_ms(100); opc--; if(opc==255){opc=1;};}
   };
   intf=0; intf1=0; intf2=0;
   if(opc==0){lcd_putc("f"); break;}
   else if(opc==1){menu_ajustes();}
}



Comentar que el bucle for es un timeout, en el caso de que no se toke ningún boton durante 5 segundos se sale del menu, bien dicho esto, he omitido el pulsador t_mns, dejando solo el t_mas ... y parece que sigue teniendo el problema, por lo que el fallo está es esta linea:
else if(t_mas==0){i=0; delay_ms(100); opc++; if(opc>1){opc=0;};}
q es lo mismo que esto:
else if(!t_mas){i=0; delay_ms(100); opc++; if(opc>1){opc=0;};}

Bien lo que pretendo hacer es:
Cuando se pulse la tecla MAS (su estado pasa de 5V a 0V) en este momento tenemos 0V en la pata RB1 del 18F2520...
Codigo:

#byte pb       =0xF81
#bit t_ok      =pb.0      // RB0, pin21
#bit t_mas       =pb.1      // RB1, pin22
#bit t_mns       =pb.2      // RB2, pin23


En ese momento, hacemos lo que está dentro del bucle, es decir, i=0,delay...etc

Lo que falla es eso, que no lo hace cuando tiene 0V a la entrada, sino los 5V ... si cambio la acción del pulsador, i hago t_mas==1, entonces no hace nada de nada, tanto si activo como si no activo el pulsador.....

q falla?? creo q no es del código, sino alguna configuración del pic, las pull ups internas?? no entiendo nada! ...
:8}

Salu2!

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Pulsadores siempre activos...
« Respuesta #2 en: 10 de Febrero de 2005, 12:02:00 »
:z):-( debe ser una tonteria pero no lo veo! no me puedo creer que lleve toda la tarde y esto sigue igual, he puesto esto dentro del bucle

Codigo:

      delay_ms(20);
      restart_wdt();
      lcd_gotoxy(10,4);
      printf(lcd_putc,"%u",opc);
      tmas = input(t_mas);
      tmns = input(t_mns);      
      tok  = input(t_ok);
      if(tmas==0){i=0; delay_ms(100); opc++; if(opc>1) opc=0;}
      if(tmns==0){i=0; delay_ms(100); opc--; if(opc==255) opc=1;}
      if(tok==0){delay_ms(100); break;}
      printf(lcd_putc,"  %u %u %u",tok,tmas,tmns);



Sigue siendo todo hacer lo mismo que ya tenía... el ultimo printf me da estos valores
1 0 0
y no entiendo esos dos ceros, ya que a la entrada tiene 5V!!!!, por eso se vuelve loco, el caso es que no veo donde puede estar el fallo... este es el inicio de mi programa principal hasta la llamada a la función.. a ver si localizais ahi algun fallo :S

Codigo:

#include <18F2520.h>
#use delay(clock=4000000)
#include <lcd20x4.h>

#fuses XT,NOPROTECT,NOLVP,NOWDT

#define  t_ok  PIN_B0
#define  t_mas PIN_B1
#define  t_mns PIN_B2


void main()
{
   lcd_init();             //inicializacion del lcd
   menu_modo();



Alguna ayudita?? GRACIAS! ;)

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Pulsadores siempre activos...
« Respuesta #3 en: 10 de Febrero de 2005, 16:07:00 »
Que onda pana J1m,
Hay algo que no entiendo en tu codigo loco (que novedad, jajajaja...) tienes un reinicio del watchdog pero lo tienes deshabilitado en los fuses...... ???
Algo que podrias probar es definiendo los pines donde van los botones como entradas con tris ..  no se si  en la libreria que agregas este defina pines como entradas y salidas... pero si no responde el pin a los cambios es muy seguro que sea por la definicion de los registros como entrada o como salidas. En hardware reviza que el mclr este a vcc. Algo que tambien no noto es que no deshabilitaste el ADCON, tambien haria falta  eso, ya que esto afecta precisamente los pines con los que trabajasEnfurruñadorb4:rb0), podrias probar añadiendo SETUP_ADC_PORTS(NO_ANALOGS) ; quizas esto tambien sea el problema.... o agregando en #fuses el  NOPBADEN   "PORTB pins are configured as digital I/O on RESET" , ya que en el DS viene:

Note: On a Power-on Reset, RB4:RB0 are
configured as analog inputs by default and
read as ‘0’; RB7:RB5 are configured as
digital inputs. -----------------------------------------------pagina 110


Salu2 pana

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Pulsadores siempre activos...
« Respuesta #4 en: 10 de Febrero de 2005, 17:45:00 »
Lo del wdt es pq he estado haciendo pruebas con el código y en el proteus si deshabilito el wdt no funciona, en fin, q solo eran pruebas :P

Por otro lado he encontrado el error, ahora que no entiendo su porque, para ello he utilizado este código:
Codigo:

#include <18F2520.h>
#use delay(clock=4000000)
#include <lcd20x4.h>

#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOPBADEN

#use fast_io(B)

void main()
{
   int tecla;
   set_tris_b(0x07);
   port_b_pullups(TRUE);
   lcd_init();
   while(1){
   tecla = input(PIN_B1);
   if(tecla==0)
   {
   lcd_putc("f"Giño;
   lcd_putc("tecla pulsada"Giño;
   }
   else
   {
   lcd_putc("f"Giño;
   lcd_putc("tecla NO pulsada"Giño;
   }
   }
}



Pues bien, el resultado esq pulse o no la tecla, siempre me aparece como tecla pulsada, por el contrario, si uso el PIN_B0, va como debería, lo mismo pasa con el B2 ... es decir, que o le sucede algo al PIC, o es problema del compilador, pq los pulsadores estan bien... a ver si saco donde está el problema... y si puedo solucionarlo.

Gracias por la ayuda! Giño

EDITO: he compilado con otra versión (anterior), y sigue el mismo problema, he probado con el 18F2550, metiendole el programa del 18F2520, y sigue igual, por lo q creo q, a menos que haya algo mal en el código, creo q no ya que en el simulador va bien, el fallo está en el software :S ... miraré el 18F2520.h a ver si veo algo raro.......... me da q no voi a ver nada! jeje... intentaré tb hacerlo con otro puerto, creo q tengo un par de patas libres en el puerto C ...

Salu2!

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Pulsadores siempre activos...
« Respuesta #5 en: 10 de Febrero de 2005, 18:07:00 »
Perfecto pana Rebotado
Prueba usando #bit  t_bot = 0xF81.1 o #define PIN_B0  t_ok  (al reves de como lo usas), una prueba mas.... direccionalo al pin:
(esto viene dentro del 18f2520)
#define PIN_B0  31752
#define PIN_B1  31753
#define PIN_B2  31754
#define PIN_B3  31755
#define PIN_B4  31756
#define PIN_B5  31757
#define PIN_B6  31758
#define PIN_B7  31759

(intenta ponerlo directo)
#define t_ok  31752
#define t_ok2  31753  .... etc..

Un abrazo pana Sonrisa

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Pulsadores siempre activos...
« Respuesta #6 en: 10 de Febrero de 2005, 18:23:00 »
hola Lager. jajaja parece esto un chat!

te refieres a esta expresión supongo no?:

tecla = input(PIN_B1);

Lo que pasa esque esa variable PIN_B1 ya está definida en el 18F2520.h de esta forma:

#define PIN_B0  31752
#define PIN_B1  31753
#define PIN_B2  31754

Y sí parece que está bien, asiq .. cada vez me quedo con menos ideas... pufff, voy a cambiarlo de puerto que es lo único q me queda por probar, y a dormir, mañana mas!

Gracias amigoGiño

pd: jeje me voy a dormir agusto sabiendo 2 cosas, 1 es que funciona en otro puerto, y dos que he encontrado un posible bug al ccs... a ver si lo pongo por su foro. :P

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Pulsadores siempre activos...
« Respuesta #7 en: 10 de Febrero de 2005, 18:35:00 »
Ni hablar pana , Encontraste un bug, Rebotado .. aunque si funciona en otro puerto.....  no deberia de tener problemas loco , es muy probable que tenga tambien que ver algo mas que trabaje en el portb aparte del adcon.......(algo tiene que ver ese PBADEN mezclado con el POR, algun fusible falta por ahi como el NOSTVREN o el NOPUT) En fin, no dudo que lo descrubras y cuando lo hagas no te olvides de postearlo para saber  Sonrisa Gigante . Y gracias a ti pana, que el que aprendio fui yo Rebotado
Editado: Algo se me pasaba, por que no pruebas quitando el lcd y sus rutinas... no vaya siendo que cuando inicializa el lcd altera algo del puerto b...... y acuerdate que con el FAST_IO se queda la ultima configuracion usada.... podrias probar tambien poniendo el  seteo del tris dentro del arutina bucle.. aunque se repita(por ahora) cada ves que cheka los botones.. solo para asegurarse de que esta como entrada el pin...(un fallo muy probable)
Un abrazo pana

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Pulsadores siempre activos...
« Respuesta #8 en: 11 de Febrero de 2005, 08:23:00 »
En el puerto b solo trabajan unos reles, y ya está configurado para que sea salida, por lo q eso lo descarto, me queda la duda de que sea algun fuse, la verdad no se que puede ser, el caso es q estoy trabajando con los pulsadores en el puerto C, y funciona como debería... es extrañ. Si me responden los de CCS ya comentaré lo que sea.

Saludossss! Giño

EDITO:

No se como, ni pq, el caso es que ya funciona, he añadido esto:

#fuses NOWDT,WDT128,XT, NOPROTECT, BROWNOUT, BORV25, NOPUT, NOCPD
#fuses NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOIESO, NOFCMEN, NOPBADEN
#fuses NOWRTC, NOWRTB, NOEBTR, NOEBTRB, NOCPB, NOLPT1OSC, MCLR, NOXINST

port_b_pullups(true);
set_tris_b(0x07);
setup_adc_ports(NO_ANALOGS);


Gracias TOni0 por la respuesta en el foro de ccs Giño

Asiq, al finnnnn proyecto fin de carrera terminado!!! y funcionandooo Sonrisa

GRACIAS a todos (en especial a Oshow Vacilando los que me han ayudado hasta hacer este caxarro posible Giño

Salu2!


 

anything