Autor Tema: movimiento linea LDC mediante pulsadores  (Leído 2241 veces)

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

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
movimiento linea LDC mediante pulsadores
« en: 30 de Marzo de 2010, 09:35:05 »
Hola!
estoy tratando de hacer el movimiento de una linea corta,  a través  de unos pulsadores. La idea es, de momento, que si pulso "x" pulsador la linea se desplaza.
De momento no soy nada meticuloso, simplemente quiero hacer que se desplaze como sea, si pulso el boton.
Pero..no me hace caso! Entonces he pensado...será que no está bien configurado el LCD? No es asi..todo depende de un if:

if (pin_A0==0){ suma posicion }
sin ese if, o sea, puesto " a saco" si veo ( por simuladro proteus) el movimiento. Pero a pesar que A0 si detecte ( muchas veces lo hago..asi que ..) que esta a nivel 0... por que no entra en ese IF y no me hace caso?? Pongo un esquema de lo que hago y el código:

esquema :



codigo :
Código: C
  1. #include <16f877.h>
  2. #use delay(clock=20000000)
  3. #fuses HS,NOWDT
  4. #include <HDM64GS12.C>
  5. #include <graphics.c>
  6.  
  7.  
  8. #byte  porta = 0x85
  9.  
  10.  
  11.  
  12. #USE STANDARD_IO (A)
  13.  
  14.  
  15. int16 valor;
  16. float tension;
  17.  
  18. void cuadro(void);
  19. void pixel_inicial(int a1,int b1,int a2,int b2);
  20.  
  21. void main() {
  22.     glcd_init(ON);
  23.   set_tris_A(0xFF);
  24.   set_tris_c(0x00);
  25.   cuadro();  // dibuja el cuadro
  26.  
  27. while(1){
  28. set_tris_A(0xFF);
  29. set_tris_c(0x00);
  30. pixel_inicial(28,28,40,28);
  31. delay_ms(500);
  32.  
  33. if (pin_A1==0){      // solo quiero usar el switch de arriba, que va a pin A1
  34.    delay_ms(500);
  35.    pixel_inicial(28++,28+6,40+5,28+6);   // si no pusiera esto dentro del IF, me funciona. El problema es qu eno detecta el if!??
  36.    output_high(pin_C7);
  37.    delay_ms(500);
  38.     }
  39.  
  40.   }
  41. }
  42.  
  43.  
  44. void cuadro(void){
  45. //glcd_fillscreen(0);                    //Borrado de pantalla
  46. glcd_line(1,1,1,64,1);              //líneas de x e y vertical izquierda
  47. glcd_line(190,1,190,64,1);              //líneas de x e y vertical derecha
  48.  
  49. glcd_line(1,1,128,1,1);       //horizontal sup
  50. glcd_line(1,63,128,63,1);       //horizontal inf
  51. }
  52.  
  53. void pixel_inicial(int a1,int b1,int a2,int b2){
  54. delay_ms(100);
  55. glcd_line(a1,b1,a2,b2,1);
  56. }
« Última modificación: 30 de Marzo de 2010, 09:39:58 por PICYO »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: movimiento linea LDC mediante pulsadores
« Respuesta #1 en: 30 de Marzo de 2010, 10:45:38 »
Quizá se deba a que tengas que deshabilitar el conversor AD. O a lo sumo hacer que el pin que quieras usar no esté configurado como entrada analógica. Por defecto (el encenderse el PIC) el registro ADCON1 está todo en 0 y eso hace que los puertos que se pueden usar como entradas analógicas queden configurados justamente como entradas analógicas.
Probá a hacer que el registro ADCON1 tenga el valor 7. Eso hace que las entradas sean entradas digitales.

Creo que con CCS se puede usar setup_adc_ports(NO_ANALOG);
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: movimiento linea LDC mediante pulsadores
« Respuesta #2 en: 30 de Marzo de 2010, 10:59:35 »
En CCS no puedes leer directamente el Pin de entrada, tienes que sustituir:

if (pin_A1==0)


Por:

if (input(pin_A1)==0)

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: movimiento linea LDC mediante pulsadores
« Respuesta #3 en: 30 de Marzo de 2010, 15:32:06 »
jf!!

exacto!! ohhh!! lo que pasa es que no me dejaba exactamente como decias, he puesto esto otro:
Código: C
  1. if  (!input(pin_A1)){
Pero vamos, es lo mismo que tu has dicho....gracias!!

(pareceria una tonteria..pero no caía en eso!!)


 

anything