Autor Tema: ADC para pic 12f683  (Leído 3535 veces)

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

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
ADC para pic 12f683
« en: 10 de Enero de 2011, 05:04:10 »
hola, necesito un poco de ayuda para un programa, necesito hacer funcionar un joystick por medio de un pic 12f683.
alguien q me pueda ayudar??

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
Re: ADC para pic 12f683
« Respuesta #1 en: 10 de Enero de 2011, 05:05:18 »
el joystick es de una imitacion al mando de la playstation.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: ADC para pic 12f683
« Respuesta #2 en: 10 de Enero de 2011, 07:17:12 »
hola, necesito un poco de ayuda para un programa, necesito hacer funcionar un joystick por medio de un pic 12f683.
alguien q me pueda ayudar??
Pero que deseas hacer? Donde va conectado el mando? Que funcion quieres que haga el pic? Tienes algo de proyecto hecho?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
Re: ADC para pic 12f683
« Respuesta #3 en: 10 de Enero de 2011, 09:36:27 »
lo que yo quiero que aga el joystick es accionar 2 reles. y tengo todo el programa hecho lo unico que me falta es el adc para e joystick, que nunca lo e hecho y no se exactamente.
este es el programa:

#include <12f683.h>
#device ADC=8
#fuses NOWDT // SIN WATCH DOG TIMER
#fuses INTRC_IO // OSCILADOR INTERNO SIN CLKOUT
#fuses NOCPD // NO EE PROTECTION
#fuses NOPROTECT // NO SE PUEDE LEER EL CODIGO DEL PIC
#fuses NOMCLR // PIN_A3 USADA PARA ENTRADA Y NO PARA RESET
#fuses NOPUT // SIN POWER UP TIMER
#fuses NOBROWNOUT // SIN BROWNOUT RESET
#use delay (clock=8000000) //CONFIGURACION DEL RELOJ

void main()
{
   int estado=0, esta_activo1=0,esta_activo2=0;
   int16 tiempo=0, t1=0, t2=0;
   
setup_oscillator(OSC_8MHZ); //CONFIGURA EL OSCILADOR A 8 MHZ
setup_adc_ports(sAN0|VSS_VDD); //ADC 0 ACTIVADO - REF 5V
setup_adc(ADC_CLOCK_INTERNAL); //ADC POR EL PIN 0
setup_comparator(NC_NC_NC_NC); //COMPARADOR DESACTIVADO
setup_vref(FALSE); //SIN TENSION DE REFERENCIA
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); //CONFIRACION TIMER0
setup_timer_1(T1_DISABLED); //TIMER1 DESACTIVADO
setup_timer_2(T2_DISABLED,0X3F,1); //TIMER2 DESACTIVADO

//**********CONFIGURACIONES DE LAS ENTRADAS Y SALIDAS
//**********GP0 ENTRADA ADC
//**********GP1 ENTRADA 1
//**********GP2 ENTRADA 2
//**********GP3 ENTRADA SELECTOR MODO AUTO.
set_tris_a(0b00001111);

//**********INICIALIZAMOS LA PUERTA A. APAGAMOS TODO***
output_low(PIN_A4);

output_low(PIN_A5);


//**********ACTIVAMOS EL CANAL 0 ADC*******************
set_adc_channel(0);
delay_ms(10);
while(true){
   estado=INPUT(PIN_A3);

//************ACTIVAMOS EL ESTADO AUTO.****************
if(estado==1){
   output_low(PIN_A4);
 
   output_low(PIN_A5);
 
   esta_activo1=esta_activo2=0;
   t1=t2=0;
   
while(estado==1){
   tiempo=read_adc();
   tiempo=tiempo*20;

if(input(PIN_A1)&&(esta_activo1==0)){
      output_high(PIN_A4);
      esta_activo1=1;
      t1=tiempo;
    }

if(input(PIN_A2)&&(esta_activo2==0)){
      output_high(PIN_A5);
      esta_activo2=1;
      t2=tiempo;
}

   if(t1>0){t1--;}
   if(t1<=0){
     output_low(PIN_A4);
     esta_activo1=0;
   }
 
   if(t2>0){t2--;}
   if(t2<=0){
     output_low(PIN_A5);
     esta_activo2=0;
   }

   if((t1!=0)||(t2!=0))delay_ms(1);

   estado=input(PIN_A3); 
  }
 }

//********************MANUAL****************
   else{ //Estado manual activado
      output_low(PIN_A4);
     
      output_low(PIN_A5);
     
      esta_activo1=esta_activo2=0;
     
      while(estado==0){
     
      if(input(PIN_A1)&&(t1==0))
         {
          if(esta_activo1==0){
            output_high(PIN_A4);
            esta_activo1=1;}
          else{
            output_low(PIN_A4);
            esta_activo1=0;}
          t1=500;
         
         }
      if(input(PIN_A2)&&(t2==0)){
         if(esta_activo2==0){
            output_high(PIN_A5);
            esta_activo2=1;}
          else{
            output_low(PIN_A5);
            esta_activo2=0;}
           t2=500;
      }
     
      if(t1!=0)t1--;
      if(t2!=0)t2--;
      if((t1!=0)||(t2!=0))delay_ms(1);
     
      estado=input(PIN_A3);
     
      }}}}
         

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: ADC para pic 12f683
« Respuesta #4 en: 10 de Enero de 2011, 11:22:58 »
prueba asi,
while(estado==1){
     tiempo=read_adc(ADC_START_AND_READ);
     delay_ms(10);                 //si te parece mucho retardo puedes bajarlo hasta 1ms
     tiempo=tiempo*20;
     y aqui el resto....

se me olvido decirte.. elimina esta linea.... set_adc_channel(0);
« Última modificación: 10 de Enero de 2011, 15:02:19 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
Re: ADC para pic 12f683
« Respuesta #5 en: 10 de Enero de 2011, 15:15:58 »
ok gracias probare aver que tal me va con eso, ya te digo algo.gracias.

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
Re: ADC para pic 12f683
« Respuesta #6 en: 11 de Enero de 2011, 06:54:17 »
hola e probado y no va, pero una cosa que te voy a decir que no te dije al principio, aora mismo activo los reles con 2 pulsadores, pero eso ya lo abras visto ay, y lo q kiero es sustituir los pulsadores por el joystick, esto es solo para ver si puedo mejorar este mando. me seria mas facil manejarlo.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: ADC para pic 12f683
« Respuesta #7 en: 11 de Enero de 2011, 08:16:41 »
hola e probado y no va, pero una cosa que te voy a decir que no te dije al principio, aora mismo activo los reles con 2 pulsadores, pero eso ya lo abras visto ay, y lo q kiero es sustituir los pulsadores por el joystick, esto es solo para ver si puedo mejorar este mando. me seria mas facil manejarlo.
Entonces... Quieres activar los reles con 2 pulsadores del mando? O lo que deseas es leer el valor del jostick analogico para encender los reles?
Es que no te entiendo... podrias poner un pequeñe esquema para hacernos una idea de lo que deseas hacer... asi entenderiamos mejor tu proyecto..
« Última modificación: 11 de Enero de 2011, 10:30:36 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado atomizador

  • PIC10
  • *
  • Mensajes: 6
Re: ADC para pic 12f683
« Respuesta #8 en: 11 de Enero de 2011, 15:11:01 »
claro claro lo que kiero es el valor analogico del joystick de izquierda-derecha, para cuando el joystick vaya a izquierda se active el relé izquierdo, y a la derecha igual.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: ADC para pic 12f683
« Respuesta #9 en: 11 de Enero de 2011, 15:49:23 »
que valores de tension tienes poniendo el analogico a  tope a la derecha  y a la izquierda?
mira que valores sacas...
lo mejor para hacerlo es como te dije...

int valor=0;
while(true){
     valor=read_adc(ADC_START_AND_READ);
     delay_ms(10);                 //si te parece mucho retardo puedes bajarlo hasta 1ms
     if(valor>130) una instruccion para habilitar salida
     if(valor<124) una instruccion para habilitar salida
     if((valor>=124)&&(valor<=130)) una instruccion para deshabilitar salidas...
}

rapido y facil
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything