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

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

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #30 en: 05 de Agosto de 2005, 01:42:00 »
Bien pero, y en ensamblador, como podría ser el programa?. Es que "mis primeros pasos" los estoy dando en éste lenguaje.

De momento quiero usar un 16f84a, pues tengo varios (muestras de "MICROCHIP"Giño, que queria usar para otros montajes y al final no lo hice. Para esos montajes ya tenia el código en hexadecimal.

Saludos desde Badalona.

Juan (jubilado)Sonrojado

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #31 en: 05 de Agosto de 2005, 02:08:00 »
En ese caso mejor será que conteste alguien que sepa ASM, a mí ese lenguaje me da yuyu

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #32 en: 06 de Agosto de 2005, 02:27:00 »
Me pregunto si es mejor que aprenda a programar en lenguaje "C". Que opinas?
Es más fácil de aprender, o tiene mas ventajas que el ensamblador?.

Saludos desde Badalona

Juan (jubilado)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #33 en: 06 de Agosto de 2005, 09:50:00 »
Para mí esa pregunta sólo tiene una respuesta posible Rebotado, aunque aquí en el foro se ha debatido mucho sobre las ventajas e inconvenientes de uno u otro lenguaje. Puedes echar un vistazo a este hilo, donde se discutió bastante de los distintos lenguajes:
http://miarroba.com/foros/ver.php?foroid=6510&temaid=113728

Si finalmente te decidieras por C, te recomiendo leas este otro, haciendo los ejemplos que ahí vienen. No soy el único usuario que aprendió C con este hilo del foro:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=2307248&marcar=microcursillo


Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #34 en: 06 de Agosto de 2005, 11:59:00 »
Pues creo que va a ser que si. Ya que es un lenguaje al que han derivado (según entiendo en la encuesta) muchos que antes usaban assembler, por lo tanto como he de empezar con algo lo haré de lleno con el "C", aunque, y el que avisa no es traidor, os advierto que quizás os apedree a preguntas, pues soy muy duro de mollera, y a mis años es mas dificil aprender cosas nuevas aunque ganas no faltan.

Gracias por el apoyo. Saludos desde Badalona

Juan (jubilado)

Pdta. Tranquilos que antes tengo que descifrar que es esto del "C"Angelito

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #35 en: 28 de Agosto de 2005, 06:04:00 »
Hola compañeros:
Aunque he estado varios dias en silencio, no significa que me haya dormido, todo lo contrario he estado intentando digerir todo (muy poco) lo que ha caido en mis manos (o pantalla del PC) referente a "C", hasta el punto de atreverme a escribir mi primer programa con toda la ilusión del principiante, pero que desilusión no me funciona al compilarlo. Podeís darle un vistaco e indicarme dónde esta(n) el(los) herrores? Llorando

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

void main()
{
   set_tris_a(0b11111);  //asignamos el puerto A como entrada
   set_tris_b(0b00011000);  //asignamos RB0,RB1,RB2,RB5,RB6,RB7, salidas y RB3, RB4, entradas
      while (true) ;        //bucle infinito
      {
         if (RA0) RB0=1;     //si RA0=1, activamos relé por la salida RB0
         if (RA1) RB1=1;     //si RA1=1, aparece 1 en RB3
         if (RA2) RB1=0;     //si RA2=1, aparece 0 en RB3
         if (RA3) RB2=1;     //si RA3=1, aparece 1 en RB4
         if (RA4) RB2=0;     //si RA4=1, aparece 0 en RB4
         if (RB3&&RB4) RB0=1;  //si RB3 y RB4=1, activamos relé por RB0
      }
}         

Gracias anticipadas

Saludos desde Badalona

Juan (jubilado)

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: por donde empezar?
« Respuesta #36 en: 28 de Agosto de 2005, 06:12:00 »
El primer error es la h en esta palabra Avergonzado es broma ...

Pues en los if, no pones ninguna condición, por lo que nunca entrará.
Depende de lo que quieras:

 if(input(PIN_XX) == 0/1) ---> Si es 0 o uno cen el PIN XX, entrará. O bien otra forma de escribirlo:

 if(input(PIN_XX))  ---> entrara si es 1 (TRUE)
 if(!input(PIN_XX)) ---> el signo "!" niega la condición, es decir, entra si es 0 (FALSE).

Anímo juan Sonrisa GiganteRebotado
Si juegas contra el mejor, pierdes como los demás.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #37 en: 28 de Agosto de 2005, 23:28:00 »
Pues es curioso, porque esa sintaxis sí que funciona en C30, y es algo que nunca he entendido del CCS.
En C30 puedes hacer:
if (RA1) RB1=1;

y en CCS hay que hacer:
if(input(PIN_A1)) output_high (PIN_B1);

Como puedes ver arriba, es mucho más incómodo en CCS pero ambos son C.

En cualquier caso, otro error que veo en el programa es que te sobra un signo de punto y coma detrás del while (true). Tal y como está puesto, el programa quedará ahí para siempre y no pasará a la siguiente línea.
Si lo quitas, el contenido del bucle pasará a ser el grupo de líneas que has encerrado entre llaves.

Ánimo, Juan, verás como eso compila pronto Sonrisa Gigante

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #38 en: 29 de Agosto de 2005, 02:27:00 »
Cambia la última línea por:
 if (input(PIN_B1) && input(PIN_B2)) output_high(PIN_B0); //si RB1 y RB2=1, activamos relé por RB0

Además, tal y como está no puede compilar bien, seguramente es que no has pegado la última llave de cierre en el post.

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #39 en: 29 de Agosto de 2005, 02:42:00 »
Correcto, las llaves de cierre no las he pegado, pero están.

No entiendo la corrección, si los pins B1 y B2 son salidas porqué  poner "input"

Saludos.
Juan (jubilado)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #40 en: 29 de Agosto de 2005, 02:47:00 »
Ah,vale, no me había dado cuenta de que son salidas.
En cualquier caso, no puedes usar el "output_high" como lo usas, porque es un comando que  escribe sobre el puerto, no lo lee para ver su valor.

Lo que yo haría en este caso es asignar a una variable, por ejemplo V1, el valor de B1 cada vez que lo cambies en alguna parte de tu programa. Igual con B2, tendrías V2.
Una vez llegado a esta altura del programa, tu condición sería:
if (V1 && V2) ....

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #41 en: 29 de Agosto de 2005, 03:57:00 »
Que tal ahora?:

#include <16f84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#define V1 PIN_B1
#define V2 PIN_B2

void main()
{
   set_tris_a(0b11111);  //asignamos el puerto A como entrada
   set_tris_b(0b00000000);  //asignamos el puerto B como salida
      while (true)          //bucle infinito
      {
         if (input(PIN_A0)) output_high(PIN_B0);     //si RA0=1, activamos relé por la salida RB0
         if (input(PIN_A1)) V1==1;     //si RA1=1, aparece 1 en RB1
         if (input(PIN_A2)) V1==0;     //si RA2=1, aparece 0 en RB1
         if (input(PIN_A3)) V2==1;     //si RA3=1, aparece 1 en RB2
         if (input(PIN_A4)) V2==0;     //si RA4=1, aparece 0 en RB2
         if (V1&&V2) output_high(PIN_B0);  //si RB1 y RB2=1, activamos relé por RB0
      }
}

Saludos.
Juan(jubilado)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #42 en: 29 de Agosto de 2005, 04:14:00 »
No me refería exactamente a eso. Mira, mejor lo pego aquí:
Codigo:

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

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
   while (true) //bucle infinito
      {
         if (input(PIN_A0)) output_high(PIN_B0); //si RA0=1, activamos 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
      }
}


Observa que V1 y V2 son variables declaradas como int, y que cada vez que hay un comando output_xxx también asigno el valor a la variable que corresponda.
Además, observa que no es lo mismo = que ==. Mientras que el primero asigna, el segundo chequea.

Por último, te recomiendo que utilices sangrías en el programa, y lo harás más fácil de entender.

Desconectado juan-jubilado

  • PIC10
  • *
  • Mensajes: 33
RE: por donde empezar?
« Respuesta #43 en: 29 de Agosto de 2005, 05:19:00 »
Me temo que todavia me queda muuuuuucho camino por recorrer, en éste momento me siento como si andara en pañales. Tendrás que perdonar mis fallos de comprensión, pero es que mis neuronas ya no responden como antes (pienso que es por la edad).
Cuando hablas de utilizar sangrias, te refieres a poner {} en cada bloque de funciones para separarlas?.
Si no entiendo mal el hecho de asignar una variable como entero es como si le asignaramos un resultado , 0 o 1?

Saludos
Juan(jubilado)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: por donde empezar?
« Respuesta #44 en: 29 de Agosto de 2005, 05:41:00 »
Tranquilo, tú pregunta, que todos hemos pasado por lo mismo. Además, los pañales no se sueltan nunca, porque en este hobby que tenemos siempre estamos aprendiendo cosas nuevas.

Con las sangrías me refería a los tabuladores por la izquierda. No es obligatorio su uso, pero si cada bloque de programa que se ejecuta en un condicional o en un bucle, lo "sangras" a la derecha con el tabulador el programa queda mucho más legible.

Lo de las {} tras un IF o un WHILE lo necesitarás si la condición o el bucle afectan a más de un comando. Si es uno sólo no tendrás dudas ni problemas, pero si tienes que ejecutar varios, tendrán que estar encerrados entre llaves.

No sé qué edad tienes, pero tus neuronas funcionan bien, hombre...