Autor Tema: consulta conceptual sobre output(pin,value)  (Leído 5480 veces)

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

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
consulta conceptual sobre output(pin,value)
« en: 28 de Febrero de 2009, 20:26:16 »
bueno, estoy practicando un poco con ccs y me surge la siguiente duda:

estoy escribiendo un codigo que cada vez que se pusla RA0 se dispara una secuencia que enciende leds conectados a RA1, RA2 y RA3 con un delay de un segundo entre caso y caso. una vez cumplida la secuencia se vuelve a esperar que se pulse RA0.

antes que nada el codigo:

Código: C
  1. [font=Verdana]
  2. /////////////////////////////////////////////////////
  3. // Pic 16F84A                                                                      //
  4. // por pulsar en RA0, se inicia secuencia en RA1-3 //
  5. /////////////////////////////////////////////////////
  6.  
  7. #include <16F84.h>                      //pic a utilizar
  8. #fuses XT,NOWDT,NOPROTECT       //fusibles
  9. #use delay(clock=4000000)       //velocidad del cristal
  10. #use fast_io(A)
  11.  
  12. #byte port_a=5                          //puerto A
  13.  
  14. int x=0;                                        //variable entera de 8 bits
  15.  
  16. void main (){
  17.  
  18.         set_tris_a(0b00001);            //RA0 como entrada, el resto como salidas
  19.        
  20.         do {
  21.                
  22.                 if (!input(pin_A0)) {                                           //si se da el negado de A0 entonces...
  23.                         for (x=0;x<=3;++x) {                                    //hacer hasta que x sea igual a 3, y en cada pasada incrementar x en uno
  24.                                 output_bit(pin_ax,1);                           //pone RA"x" en 1
  25.                                 delay_ms(1000);                                         //espera 1 segundo
  26.                                 output_bit(pin_ax,0);                           //pone RA"x" en 0
  27.                         }
  28.                 }              
  29.                        
  30.         } while (TRUE)
  31.         }
  32. [/font]

ahora el problema:

este codigo obviamente tiene un error: output_bit(pin_ax,1) no es valido porque pin_ax no existe, mi intencion era que en esa linea x se tome como un valor que defina el pin que quiero poner en 1 o en 0. es decir para x=1 pin_ax seria igual a pin_a1, etc. me doy cuenta que como lo escribi es una animalada y me estuve leyendo como definir tipos de variables y constantes pero no encuentro como se podria hacer lo que quiero, me pregunto si alguien me puede dar la forma correcta de hacerlo, si es que es posible.

espero no estar preguntando una animalada y desde ya muchas gracias!!!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: consulta conceptual sobre output(pin,value)
« Respuesta #1 en: 28 de Febrero de 2009, 20:53:18 »
y si colocas:

bit_set(port_a,x);
delay_ms(1000);
bit_clear(port_a,x);

será que da? pruébalo, creo que puede servir, ya tienes definida arriba la posición de port_a

un saludo
.

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
Re: consulta conceptual sobre output(pin,value)
« Respuesta #2 en: 01 de Marzo de 2009, 21:08:23 »
muchas gracias Cryn, lo probe y funciona perfecto.

Código: C
  1. /////////////////////////////////////////////////////
  2. // Pic 16F84A                                                                      //
  3. // por pulsar en RA0, se inicia secuencia en RA1-3 //
  4. /////////////////////////////////////////////////////
  5.  
  6. #include <16F84.h>                      //pic a utilizar
  7. #fuses XT,NOWDT,NOPROTECT       //fusibles
  8. #use delay(clock=4000000)       //velocidad del cristal
  9. #use fast_io(A)
  10.  
  11. #byte port_a=5                          //puerto A
  12.  
  13. int x=0;                                        //variable entera de 8 bits
  14.  
  15. void main (){
  16.  
  17.         delay_ms(333);
  18.         disable_interrupts(global);
  19.  
  20.         set_tris_a(0b00001);            //RA0 como entrada, el resto como salidas
  21.         port_a=0;                         //todo el puerto A en cero
  22.  
  23.         do {
  24.                
  25.                 if (input(pin_A0)) {                                    //si se da el negado de A0 entonces...
  26.                         for (x=1;x<=3;++x) {                                    //hacer hasta que x sea igual a 3, y en cada pasada incrementar x en uno
  27.                                 bit_set(port_a,x);                                      //pone RA"x" en 1
  28.                                 delay_ms(1000);                                         //espera 1 segundo
  29.                                 bit_clear(port_a,x);                            //pone RA"x" en 0
  30.                         }
  31.                 }              
  32.                        
  33.         } while (TRUE);
  34.         }

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: consulta conceptual sobre output(pin,value)
« Respuesta #3 en: 01 de Marzo de 2009, 21:18:27 »
 :-/ bien bien, no es nada amigo.

El retardo de 333ms, para que es? no creo que sea necesario, si es para esperar la estabilización de la fuente creo que mejor es colocar el FUSE PUT

Un saludo
.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: consulta conceptual sobre output(pin,value)
« Respuesta #4 en: 01 de Marzo de 2009, 21:41:53 »
Hola Lagruya y Cryn, les cuento que yo usaba bastante el bit_set(port,pin) y bit_clear(prot,pin), pero me paso que cuando hice programas para pics 18F no habia señal en los pines, pero con output_high(PIN) y output_low(PIN) si, con esto mi codigo funciona tanto para pics 16F y 18F solo cambiando el indicador del pic a utilizar.

Hay que indicar que uso el CCS 4.074

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: consulta conceptual sobre output(pin,value)
« Respuesta #5 en: 01 de Marzo de 2009, 21:58:41 »
cuando usas bit_set(port,pin), port debe estar definido previamente, definido en dirección, y como bien sabes las direcciones de los registros de la mayoría (o quizá de todos) de un 16f son muy distintas a las de un 18f, por tanto si usas port debe tener la dirección correcta, por ejemplo:

pic 16f portb=0x06
pic 18f portb=0xf81

esto lo aprendí al usar una librería para LCD que funcionaba muy bien con un 16f, y por el contrario cuando lo usé en un 18f no dió, y pasó mucho tiempo y logré encontrar la "clave" :D

no creo que sea un bug, o un error del compilador, más bien son detalles que debemos considerar :mrgreen:

un saludo
.

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
Re: consulta conceptual sobre output(pin,value)
« Respuesta #6 en: 01 de Marzo de 2009, 22:02:11 »
si el retardo era para eso, pero me habia olvidado de la opcion power up time, gracias de nuevo, la verdad es que estoy muy entusiasmado con esto del ccs  :mrgreen:, voy a seguir probando variantes para ejercitarme en este lenguaje.
saludos!!!


 

anything