Autor Tema: por donde empezar?  (Leído 15936 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #45 en: 29 de Agosto de 2005, 06:12:00 »
65.
Puestos a preguntar, las V1 y V2 declaradas como int, significa asignarles resultado entero 0 o 1?

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: por donde empezar?
« Respuesta #46 en: 29 de Agosto de 2005, 06:59:00 »
Con permiso de los contertulios decir que cuando se declara variables tipo int no significa 1 o 0 eso es tipo boolean(tipo binario de algebra de Boole), tipo int significa datos tipos enteros, si no se especifica nada en el int el compilador lo toma como dato tipo entero de 8bits, es decir int V1; la variable V1 sera un numero entero comprendido entre 0 y 2^8 es decir entre 0 y 256, si queremos mas bits(mas resolucion) declaramos la variable entera como sigue:
int16 V1;
int32 V1;
donde 16 o 32 es la resolucion donde se puede abarcar los datos de la variable V1. Recordar que si quieres utilizar cifras negativas enteras deberas expecificarselo al compilador, sino te dara mensaje de warning y el programa no funcionara como debiera, para expecificarlo deberas poner delante de la palabra int signed, es decir: signed int V1; entonces asi el compilador sabra que la variable V1 es significativa a los numerso negativos enteros.
Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: por donde empezar?
« Respuesta #47 en: 29 de Agosto de 2005, 11:50:00 »
A ver, dejando el codigo, lo que veo es que los pulsadores estan mal conectados. Se tienen que conectar a traves de una resistencia de pull-un de 10k.

Codigo:


  +5
    |
    |
    <
    < 10K
    <
    |
    | - ------ pic
    * pulsador
    *
    |
    |
    GND



UPS!!!! donde esta el post con la pregunta y esquema???

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #48 en: 29 de Agosto de 2005, 12:04:00 »
Lo siento piriots, la he borrado porque mas que un esquema parecia la sagrada familia.
La cuestión es que cuando pulso el boton de reset el led se apaga momentáneament y luego se enciende de nuevo y asi permanece, quizás sea debido cómo tu dices a la mala conexión de los pulsadores, lo probaré. Por si acaso inserto de nuevo el esquema:

Gracias.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: por donde empezar?
« Respuesta #49 en: 29 de Agosto de 2005, 12:11:00 »
Si el led se queda encencido puede ser debido a que no has dado valor inicial al puerto. Prueba poniendo

#byte port_a=5 // definimos los puertos a y b como una variable
#byte port_b=6

esto lo pones despues de  
#use fast io

en la funcion principal, pero fuera del bucle principal pones
port_b=0;

Prueba con esto a ver si se soluciona.

Salu2

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #50 en: 30 de Agosto de 2005, 03:57:00 »
Bueno parece que ya empieza a funcionar. El programa ha quedado asi:

#include <16f84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#byte port_a=5
#byte port_b=6

void main()
{
   int V1;
   int V2;

   set_tris_a(0b11111); //asignamos el puerto A como entrada
   set_tris_b(0b00000000); //asignamos el puerto B como salida
   port_b=0;            //ponemos el puerto B a cero

   while (true) //bucle infinito
      {
         if (input(PIN_A0)) output_high(PIN_B0); //si RA0=1, activamos relé por la salida RB0
            {
         if (input(!PIN_A0)) output_low(PIN_B0); //si RA0=0, desactivamos relé por la salida RB0
            }
         if (input(PIN_A1))
            {
               V1=1; //si RA1=1, aparece 1 en RB1
               output_high(PIN_B1);
            }
         if (input(PIN_A2))
            {
               V1=0; //si RA2=1, aparece 0 en RB1
               output_low(PIN_B1);
            }
         if (input(PIN_A3))
            {
               V2=1; //si RA3=1, aparece 1 en RB2
               output_high(PIN_B2);
            }
         if (input(PIN_A4))
            {
               V2=0; //si RA4=1, aparece 0 en RB2
               output_low(PIN_B2);
            }
         if (V1&&V2) output_high(PIN_B0); //si RB1 y RB2=1, activamos relé por RB0
            {
         if (!V1&&V2) output_low(PIN_B0); //si RB1=0 y RB2=1, desactivamos relé por RB0
            {
         if (V1&&!V2) output_low(PIN_B0); // si RB1=1 y RB2=0, desactivamos rele´por RB0
            {
         if (!V1&&!V2) output_low(PIN_B0); //si RB1 y RB2=0, desactivamos relé por RB0
            }
            }
            }
      }
}

Vereis que he añadido algunas lineas mas porqué el led no se apagaba cuando no se cumplian las condiciones.

El esquema que utilizo es el que hay mas arriba.
Sólo hay un problema, y es que al cerrar el interruptor de RA0 el led se enciende pero parpadea indiscriminadamente, es decir no con una frecuencia estable.
Que puede ser?

Saludos

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: por donde empezar?
« Respuesta #51 en: 30 de Agosto de 2005, 04:10:00 »
Viendo tu esquema opino igual que el amigo piriots, te aconsejo que lo modifiques los botones como te ha indicado piriotsGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #52 en: 30 de Agosto de 2005, 05:35:00 »
Sí, por supuesto, conecta las entradas como dice Piriots.
Tu problema de los parpadeos aleatorios suena a que las entradas quedan en un estado indeterminado cuando levantas el interruptor.
Ponles una resistencia a masa para que al abrir el interruptor quede un 0 clarito en la entrada y debe funcionar bien.

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #53 en: 30 de Agosto de 2005, 07:13:00 »
Es que el problema del parpadeo sólo se manifiesta cuando cierro el interruptor que está conectado a la entrada RA0, en éste estado el led deberia estar siempre encendido hasta abrir dicho interruptor. Ocurre lo mismo si le pongo un pulsador, y también se manifiesta el mismo fenómeno conectando los pulsadores e interruptor como indica Piriots. Actuando sobre los pulsadores según la secuencia de funcionamiento el led funciona perfectamente. desquiciado

Saludos


Pdta. Seguro que será una chorrada que no alcanzo a ver

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: por donde empezar?
« Respuesta #54 en: 30 de Agosto de 2005, 07:21:00 »
De todas formas te aconsejo que modifiques tu circuito como indica el amigo Piriots ya que es la forma correta de montaje por lo que te ha explicado nocturno66 de obligar un "0" logico...De todas formas viendo tu programa tienes declarados muchos if....podrias hacer un if else para el estado del led que indicas por el portb B0, y desactivar las interrupciones si no las vas a utilizar(por lo menos desactva la interrupcion del RB0):
Esto iria despues de los set_tris...
DISABLE_INTERRUPTS(GLOBAL); //asi desactivamos todas las interrupciones
.
.
.
if (input(PIN_A0)==1)
    output_high(PIN_B0); //si RA0=1, activamos relé por la salida RB0
else
     output_low(PIN_B0); //si RA0=0, desactivamos relé por la salida RB0
 
Haber si esta vez funciona....Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #55 en: 30 de Agosto de 2005, 07:55:00 »
Mientras tengas entradas en estado indeterminado no podrás obtener conclusiones. Cualquiera de las otras puede estar provocándote un efecto extraño.

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #56 en: 31 de Agosto de 2005, 04:50:00 »
Sigue el parpadeo cuando quiero activar el led  a traves de RA0, aunque además le he añadido otra condición que me faltaba, de acuerdo al circuito que quiero obtener. Las entradas las tengo conectadas según las indicaciones del amigo Piriots.
Lo que si he observado cuando ocurre este fenómeno (parpadeo aleatorio), es que en la parte inferior izquierda de la ventana de Proteus donde dice (CPU load....), en condiciones normales de funcionamiento (cuando no parpadea o esta apagado), el valor está sobre 10%, pero cuando parpadea éste valor sube al 100%, y el reloj de la animación (ANIMATING), va mas lento.loco

Saludos.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: por donde empezar?
« Respuesta #57 en: 31 de Agosto de 2005, 05:00:00 »
Esto que voy decir puede ser una chorrada pero cambia esta instruccion #use fast_io(B) pos esta #use standard_io(B)....a veces la fast da problemas de resultados no deseados....por lo menos en algun que otro caso me ha pasado!pruebalo aver que pasa...Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #58 en: 31 de Agosto de 2005, 05:17:00 »
Erre que erre.
Estoy pensando que haré lo que dice Nocturno y probar el circuito fisicamente, y ver si Proteus tiene razón o la tiene Nocturno.Giño

Hasta pronto

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: por donde empezar?
« Respuesta #59 en: 31 de Agosto de 2005, 06:02:00 »
Hola juan-jubilado!!!vamos haber....jeje revisando esta vez tu codigo a consiencia(vamos que me metido en MPlab y todo!!!jeje)decirte que veo cosas que no se para que las haces:
1º. Cuando cierra el switch conectado al pin A0 el led se apaga y no se ilumina como tu dices....
2º. Declaras muchos if que la verda no se para que declaras tantos ni lo que hacen, vamos haber, el if que usas para el pin A1 si este vale 1 entonces enciendes el led hasta aqui okis ya que el A1 vale 1 hasta que pulsemos el pulsador que entonces valdra 0, pero despues hay otro if el cual contempla lo que ocurre en la patita A2 que si vale 1 apaga el led...ummmm haber A2 tb vale 1 hasta que pulsemos el pulsador...y asi sucesivamente!!!estas encendiendo y apagando el led de una forma indiscriminada vamos de una forma "loka"...no se si eso es lo que tu pretendes(aunque no se bien la aplicacion que tiene.....)pero vamos revisate eso okis???
Ah!!!otra cosita al trabajar con pulsadores(botones), estos dispositivos generan los llamados "rebotes", es decir tu pulsas el boton y en milesimas de segundo por el pin donde esta conectado dicho boton aparecen multitud de 1"s y 0"s por lo tanto hace la lectura erronea en el pin correspondiente, estos rebote se pueden eliminar mediante hardware(condensador...)o mediante software(mediante un retardo de 151ms o mediante un bucle do...while) okis???Giño

PD: Te he mandado los archivos .c, .hex y .dsn por privado..haber si conseguimos que se apage el led!!!!jeje
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything