TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nuevo mundo en 04 de Marzo de 2016, 23:13:26

Título: insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 04 de Marzo de 2016, 23:13:26
tengo este programita que lee la entrada de un pin de un pic en la terminal B0 en la cual tengo un pulsador y si lo pulso  me da una salida en la terminal B1 pero negada osea que si lo pulso por primera ves se coloca un 1 en la terminal b1 y si lo pulso de nuevo se coloca en 0 la terminal b1
la pregunta es como le meto otra instruccion a este programa para que si b1=1  yo pueda leer otro pulsador por egemplo en la terminal b2 y si hay un cambio en esta terminal b2 de 0 a 1 me de un 1 en en la terminal b3 y por ultimo si b1=0 solo aga lo que esta haciendo ahora esperar algun cambio en la terminal B0 que es lo que hace aorita el programa
soy nuevo en esto la verdad y e leido y asta simule este programa en proteus si gustan les mando el archivo de la simulacion pero nesesito abansar mas de ante mano gracias  :) :mrgreen:


#include <16F877a.h>
#use delay(clock=4000000)
#fuses NOWDT,XT,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT
#use standard_io(c)


void main()
{
output_low(PIN_B1);//se da la intruccion de que al empesar el programa el pin b1 este en alto
    while(true)
 {
     if(input(PIN_B0)==0)//se coloca la pregunta si entrada b1 = a 0 o si pulsabos el suich
    {
     delay_ms(40);//da un retarddo de 40 ms para ebitar rebotes del pulsador
     if(input(PIN_B0)==1)//se verifica si el pin b0=1
       {
      output_toggle(PIN_B1);// esta intruccion es para realizar el complemento del pin que b0 osea si estaba en 0 se pone en 1 y alrebes
       }
    }
 }
}
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 04 de Marzo de 2016, 23:25:56
Ese codigo es muy complicado que funcione. Si vamos paso a paso seria:

- Pregunto si B0 es 0, si lo es hago lo siguiente:
- Espero 40ms
- Pregunto si B0 es 1

Te podes dar cuenta que tenes una "ventana" de 40ms (40ms es MUY poco tiempo) para poner B0 a 1. Lo cual es muy complicado que suceda. Algo asi te puede servir:

Código: C
  1. if(input(PIN_B0)==0)                    // Pregunto si B0 es 0
  2.         {
  3.                 delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  4.                 while(input(PIN_B0)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  5.                 output_toggle(PIN_B1);          // Cambio el valor del pin
  6.         }

Si quisieras agregar otro pin mas, simplemente copias eso , lo pegas y ya tenes otro pin funcionando. Solo decirte que mientras tengas B0 en 0. No va a salir del while ese de adentro. Es una solucion como para algo "simple".
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 05 de Marzo de 2016, 00:37:27
y te comento que ese retardo lo puse porque según lo que leí decía que el ser humano al pulsar un pulsador puede tener mas de un pulso y eso es un retardo para esperar que lo suelte según jejejeje

pero con lo que me dijiste que algo complicado que el programa aga lo que quiero por el retardo eso lo hago según porque esas dos terminales (b0 y b1) yo las usare como un on/of de hay solo quiero leer otro pin por egemplo b2 y si hay cambio que de salida en b3 pero todas la lecturas y salidas de algún otra terminal "dependen" del on/of ósea si esta en on corre el programa de preguntar es estado de b2 y dar salida en b3 pero si esta en of solo el programa este esperando algún cambia en b1 para que empiece a leer b2 y de salida en b3 si me explique no sé si lo que quiero hacer es lo que se llama interrupción o hay alguna técnica para hacerlo

Saludos desde tabasco México :mrgreen: :mrgreen:

Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: w3-sistemas en 05 de Marzo de 2016, 01:14:22
HOLA A TODOS, YO PROGRAMO EN "C", Y DONDE REALICE EL CURSO, USAMOS UNA MANERA MUYYY DIFERENTE DE LEER PULSADORES, LA RUTINA DE ANTIRREBOTE LA COLOCAMOS DENTRO DEL TIMER 0 Y PODEMOS COLOCAR LA CANTIDAD QUE QUERAMOS LIMITADA CLARO ESTA POR LA CANTIDAD DE PINES DEL MICRO, DE ESTA MANERA PODEMOS TESTEAR TODOS LOS PULSADORES LAS VECES QUE QUERAMOS Y COMO QUERAMOS, UNA FORMA QUE YO UTILIZO ESTO FUE QUE HICE UN MENÚ LEÍDO POR UNA PANTALLA LCD, Y CUANDO PASABA UN TIEMPO SIN APRETAR NINGÚN PULSADOR LAS LUZ DEL LCD SE ATENUABA Y CUANDO CUALQUIER PULSADOR SE PULSABA PARA MOVERTE EN EL MENÚ HACIA QUE LA LUZ SUBIERA, OSEA QUE A MISMO PULSADOR PUEDO HACER DOS COSAS DIFERENTES AL MISMO TIEMPO Y HASTA PULSAR TODOS A LA VEZ SIN QUE SE CUELGUE EL PROGRAMA NI NADA RARO, OSEA SOLO PREGUNTANDO EL ESTADO DEL SWITCH YA SABEMOS SISE APRETO O NO
ESPERO QUE LES SIRVA
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 05 de Marzo de 2016, 02:24:32
Citar
y te comento que ese retardo lo puse porque según lo que leí decía que el ser humano al pulsar un pulsador puede tener mas de un pulso y eso es un retardo para esperar que lo suelte según jejejeje

Exacto nuevo mundo, por eso mismo yo tambien deje el retardo ese. Si tu boton por fuera posee un "antirebote" realizado con una resistencia y un capacitor entonces no vale la pena hacerlo por software. Pero me quise asegurar.

Citar
Pero con lo que me dijiste que algo complicado que el programa aga lo que quiero por el retardo

El retardo no es el problema, el problema es que tenes un espacio de tiempo muy pequeño es decir entre que este RB0 en 0 a pasar a 1 son 40ms. Tal ves te funcione por que tu programa no tiene mas nada. Pero apenas escribas un par mas de cosas vas a notar que deja de funcionar. Actualmente para que funcione una persona deberia presionar justo en el momento anterior al if que pregunta por RB0 y soltarlo dentro de los 40ms siguientes. Lo cual es complejo que suceda.

Pero como decia, funciona por que no tenes otras instrucciones dentro, lo cual la mayor parte del tiempo se lo pasa en la demora, con una posibilidad mayor que cuando soltes este dentro de esa demora.

Citar
quiero hacer es lo que se llama interrupción o hay alguna técnica para hacerlo

La tecnica es lo que explica w3-sistemas, y si necesitas usar una interrupcion. Una interrupcion es algo que mientras esta corriendo el "main" deja de hacer eso, ejecuta la funcion de la interrupcion, y vuelve donde dejo. Supongamos que  el micro estaba en la funcion main y ejecutando un delay_ms(50), la interrupcion se produce a causa de un pin externo cuando recien van 20ms de ese delay, ejecuta la funcion de interrupcion, sale de esa funcion, y continua con los 30ms restante que le faltaban y luego con el programa del "main".

HOLA A TODOS, YO PROGRAMO EN "C"......

Exacto w3-sistemas, si la idea es tener el mejor codigo posible, entonces lo conveniente es usar un timer y cada tanto leer las entradas para ver cuales cambiaron y actuar en consecuencia. Hacer esto trae un "antirebote" de forma natural, ya que vas a estar leyendo cada 10 milisegundos por ejemplo. Especialmente en un teclado donde no se necesita gran velocidad.
El tema es que el usuario "nuevo mundo" esta recien comenzando a programar en C, y tratar de hacer eso significa que ademas de conocer el lenguaje C, deberia conocer interrupciones y el timer. Por eso no intente ir a algo tan complejo, y por eso mismo dije en mi post sobre el codigo que propuse Es una solucion como para algo "simple".

Trata para la proxima no escribir todo en mayuscula, es una "norma" impuesta por internet que significa para el lector como si estuvieras "gritando".
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 05 de Marzo de 2016, 02:56:13
hola w3-sistemas la verdad que me honrra tu apoyo con lo de la lectura de un pulsador y me pregunto si tienes alguna idea de cómo hacer lo que quiero solo quiero que 2 pines de un pic sean usados uno para leer un pulsador y el otro de la salidas (0,1) dependiendo de cada ves que pulso el pulsador si te das cuenta es como guardar un registro de corrimiento que por cada pulso, da un dato en una salida que es un 0 y 1 u otra forma de decirlo q por cada pulso del pulsador conmute en una salida entre (1 y 0) dirás para que quiero esto es porque esta acción la tomare como un of/on dependiendo de ese dato que para mí es un of/on eso se supone que hace el programa pero requiero monitorear esa salida of/on si esta en on encendida que verifique otro par de pines que solo verificare si esta en 1 dar una salida de 1 en otro pin
pero si el of/on esta en of solo realice la verificación de los dos primeros par de pines

todo esto es porque en mi colonia están robando mucho se metieron a las dos casas de alado y según esa rutina la requiero el of/on de los dos primeros pines para el encendido de la alarma ya encendida verificar otro par de pines uno que será la entrada según de algún sensor y el otro será la salida pero si esta en of por lógica no aga nada con el segundo par de pines

ya implementado pienso a serlo sencillo por ejemplo colocar un foto diodo oculto por la puerta el cual estará como el programa que muestro en el pin b0 y el trasmisor en mi mano daré un pulso esto entrara en el pin b0 encenderá la alarma la cual solo verifica el estado de otro pin (sensor) si hay cambio dar salida de 1 en otro pin  y por lógica cuando regrese doy otro pulso y se desactiva la alarma   ojala me puedas ayudar
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 05 de Marzo de 2016, 03:22:31
hola KILLERJC supongo que yo soy el que me estoy complicando las cosas por falta de conocimientos pero de verdad si estoy leyendo todos los días y viendo videos para que poco a poco pueda ir mejorando voy a retomar jejeje lo de la ayuda lo explicare calmadito

Requiero un of/on (que en este caso está en b1 que depende del pulsador en b0) que es lo que hace el programa de arriba ya lo compile y lo simule en proteus pero ese of/on es solo una parte
 a hora requiero aumentarlo anexarle otras cuantas líneas (si es que me sirviera el programa que tengo) para que dependiendo del estado de b1 que es mi (of/on) si esta en on se verifique otro pin que sería b2 si hay un cambio en este último  me dé un 1 en otro pin por ejemplo b3
Pero si esta en of solo se quede verificando b0

 
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 05 de Marzo de 2016, 04:01:20
Código: C
  1. #use fast_io(b)
  2.  
  3.  
  4. void main(void){
  5.  
  6.         set_tris_b(0b00000101);         // B0 y B2 entradas
  7.         output_low(PIN_B0);
  8.  
  9.         while(1)
  10.         {
  11.                 if(input(PIN_B0)==0)                    // Pregunto si B0 es 0
  12.                 {
  13.                         delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  14.                         while(input(PIN_B0)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  15.                         output_toggle(PIN_B1);          // Cambio el valor del pin
  16.                 }
  17.  
  18.                 if(input(PIN_B2)==0 && input(PIN_B1)==1)// Pregunto si B0 es 0 y si B1 es 1
  19.                 {
  20.                         delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  21.                         while(input(PIN_B2)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  22.                         output_toggle(PIN_B3);          // Cambio el valor del pin
  23.                 }
  24.         }
  25. }

Para saber que son las demas cosas, mira el manual de CCS ahi lo explica, si no lo tenes busca en google "CCS Manual" y es un PDF.
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 06 de Marzo de 2016, 15:12:59
hola KILLERJC muchas gracias por el apoyo de verdad fíjate que utilice el código que me diste y lo compile todo bien gracias pero cuando puse  en el proteos la simulación nada que hace nada estoy tratando de ver que pasa por que no funciona pero me hice una pregunta ?¿ si en algún compilador se puede ver  como corre el programa paso a paso  es que quiero ver si no se sale el programa en algún lado o si no se queda en algún wile
gracias 

 :-/
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 06 de Marzo de 2016, 16:04:44
Yo uso el MPLAB X con XC8 ambos de Microchip, la empresa que fabrica los micros. Lo feo que la optimizacion no es gratuita, pero para comenzar se puede usar el free que funciona igual.

En ese IDE yo puedo simular paso a paso las instrucciones y tambien puedo poner a 1 alguna entrada con un "estimulo". Para ver que pasaria si es que se presiona algo. Y todo dentro del IDE, nada de llevarlo a otro programa para simularlo.

MPLAB X IDE ( te permite usar assembler de los PIC12/16/18):
http://www.microchip.com/mplab/mplab-x-ide

Luego instalas XC8 ( C para micros de 8 bits):
http://www.microchip.com/mplab/compilers

Luego tenes XC16 para micros de 16bits (dsPIC y PIC24) y harmony para los de 32 bits ( PIC32 ). Pero eso por ahora obviarlos.
Al menos yo uso eso, algunos prefieren usar CCS, te vas a encontrar que es muy distinto que CCS y algunas cosas te van a llevar mas trabajo. Ejemplo el mismo programa que te pase en CCS en XC8 seria (aca no se nota tanto):

Código: C
  1. #include <xc.h>
  2.  
  3. void main(void)
  4. {
  5.         TRISB = 0b00000101;         // B0 y B2 entradas
  6.         PORTBbits.RB0 = 0;
  7.  
  8.         while(1)
  9.         {
  10.                 if(PORTBbits.RB0==0)                  // Pregunto si B0 es 0
  11.                 {
  12.                         __delay_ms(10);               // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  13.                         while(PORTBbits.RB0==0);      // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  14.                         PORTBbits.RB1 ^= 1;           // Cambio el valor del pin
  15.                 }
  16.  
  17.                 if(PORTBbits.RB2==0 && PORTBbits.RB1==1)// Pregunto si B0 es 0 y si B1 es 1
  18.                 {
  19.                         __delay_ms(10);               // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  20.                         while(PORTBbits.RB2 == 0);    // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  21.                         PORTBbits.RB3 ^= 1;           // Cambio el valor del pin
  22.                 }
  23.         }
  24. }

Respecto a ver como va el programa podrias cargar el .cof si lo genera el CCS en Proteus y ver donde esta quedandose. Si podes mostra una captura de pantalla del circuito que tenes realizado en Proteus, tal ves alli este el error.
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 02:04:53
ok enterado ya voy avanzando un poco más de verdad muchas gracias ojala yo también te pueda ayudar alguna ves también 
te comento que ya hice que funcionara tuve que cambiar solo el pic que tenía antes por otro por que vi que para los que quiero no es necesario uno con mas características jejejej y de ahí vi que tengo que pulsar muchas veces a beses hasta 6 beses el pulsador para que haga un cambio hoy le are algunos cambio (jejejej segun yo) a ver si puedo hacer que funcione como quiero y subiré el programa y el circuito también. Esto creo será útil para muchos otros  sería algo que se puede ir ampliando a muchos canales de entradas esto sería la base  para alarmas más complejas y hasta para entrenadores de pic por que tiene algo de control de entradas y de salidas básicas de un pic en ccs saludos un fuerte abraso desde tabasco mexico por cierto si no es indiscreción de que país eres 
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 12:36:20
HOLA compañeros fíjense que aún sigo intentando que este programa funcione adecuadamente pero nada la simulación la ise y solo funciona en el cambio del pin b1 cada bes que se pulsa el pulsado.
pero de hay tendria que monitoriar el estado de (b1 y b2) si b1=1 y b2=1 dar salida en b3=1 pero si  b1=0 y b2 =1 entonses b3=0 y por ultimo si b1=1 y b2=0 dar salida en b3=0

esto es lo que tengo y tambien dejo lo que tengo simulado en proteus
#include <16f84a.h>//<16F877a.h>
#use delay(clock=4000000)
#fuses xt//,PWRT,CP //NOWDT,XT,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT




    #use fast_io(b)


    void main(void){

            set_tris_b(0b00000101);         // B0 y B2 entradas
            output_low(PIN_B0);

            while(1)
            {
                    if(input(PIN_B0)==0)                    // Pregunto si B0 es 0
                    {
                            delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
                            while(input(PIN_B0)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
                            output_toggle(PIN_B1);          // Cambio el valor del pin
                    }

                    if(input(PIN_B1)==1 && input(PIN_B2)==1)// Pregunto si B1 es 0 y si B1 es 1
                    {
                            delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
                            while(input(PIN_B2)==1);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
                            output_toggle(PIN_B3);          // Cambio el valor del pin
                            delay_ms(50);
                    }
            }
    }
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 09 de Marzo de 2016, 12:45:42
Lo que tenes es el programa que te pase yo, es hora que te pongas a modificarlo, es tan absurda la modificacion que tenes que hacer para que funcione como queres que seria agregar 2 lineas y modificar 1.

La idea es que aprendas asi que vas a tener que comenzar a leer el programa
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 13:40:25
si modifique una línea aun en estos momentos voy a borrar unas líneas y colocar otras para ver si funciona no me voy a dar por vencido
 y si e leido el programa que mandastes vi que faltaba cambiar un pin pero estoy en la lucha aun en cuanto lo logre completamente lo subo para compartirlo claro que lo tengo que lograr  :laugh: de verdad aprecio el apoyo por que ni idea de el if ni que se podia && (compueta nand) la verdad que me as ayudado mucho  :mrgreen:
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: xocas en 09 de Marzo de 2016, 13:57:14
Eliminados un par de mensajes por atentar contra las Normas del Foro:

5º No hagas consultas sobre piratería de software, por favor. Es ilegal y compromete al foro. Nada de cracks, serials, plug-in's pagos y/o cualquier software y/o hardware sujeto a Copyrights y/o Derechos de Autor;

6º Si citas o incluyes material sujeto a Copyrights y/o Derechos de Autor en tu mensaje, asegúrate de cumplir con todas las pautas que exige su Autor;

un saludo
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 14:02:35
ok KILLERJC si lo leí según yo investigue (&&) que significa compuesta nand y si vi que hay que cambiar el valor de un pin aún sigo en la lucha si se que un servidor le falta mucho pero se que con un poco de ayuda iré superando esto gracias  por el apoyo y claro la paciencia jejejeje  si lo ves de la siguiente maner lo  simple puede servir para mucho.
es programa se combertira poco a poco en un prollecto de una alarma con esendido y apagado
b0=entrada de un foto diodo
b1= es un on/of de la alarma
b2= entrada de un sensor (laser(para el patio si el ratero corta el as dara salida en b3) o magnetico (si el rata abre la puerta dara salida en b3)
b3=1 entonses algun sensor se acciono
puede ir creciendo poco a poco la verda por que cuando quede se puede copiar la ultima parte del codigo y aunmentar mas sensores en los otros pines que faltan
y te soy sinsero lo digo de nuevo yo voy aun en carreta y ustedes en banes espaciales jejejeje pero si te comento que tengo exelentes ideas te comparto una de ingenieria electrica es mas compleja que esto pero tengo la idea de com aserlo (solo que aun estoy aprendiendo el lenguaje c para pic) hay ba piensa en lo siguiente un generador y en sus pricipios de funcionamiento de hay un servidor explicara la teoria y la idea en el siguiente comentaria
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 14:40:59
Continuo con compartir una idea mayor y que de verdad puede hacer un ( nuevo mundo) asi  me puse para que un generado eléctrico funcione se requiere de 3 componentes (1 campo magnético, 2 movimiento, 3 conductor ) entonces al si nosotros alimentamos la bobina creamos un campo magnético que asu ves lo asemos girar tendremos por lógica tendremos polo norte y polo sur que asu bes se acerca a una bobina que es el estator en la cual por inducción magnética nos da una salida de voltaje

bueno por ultimo aquí viene lo mejor o la idea que se que funcionaria es realizar un generador eléctrico pero prado si parado si lo ves de la forma que lo e visto es la siguiente la bobina lo que reamente ase es acercarse y alejarse del campo magnético entonces por que girar la bobina si con electrónica podemos conmutar la polaridad de la alimentación de la bobina y con esto tendremos un electro iman que cambia de polaridad y si le ponemos una bobina (estator) me aprese que se crea un generador eléctrico parado disculpa que telo comente aun hay mas porque en donde trabajo (bueno ahora sin empleo jejejeje) está un generador pero lógico giratorio y una de las ´partes se tiene que usar para mi idea
te sigo comentando este generado tiene un pwm modulador de ancho de pulso) el cual embia la excitación a una bobina primaria de hay esa bobina primaria excita el campo más grande.

yo e pensado que con solo unos cuantos amperes que manda el pwm a la excitación primaria el generador nos da unos 2200 kw asu mecha mucha electricidad pero el generarla es super cara por la parte mecánica que es un motor que consumen para que des una idea madamas unos 1500 litros de dissel cada 24 horas en presios mexicanos son unos 25,500 el caso es súper deficiente te imaginas esa idea jejeje perdón per salirme del tema pero con un pic se que se puede hacer un pwm y por logia conmutar un par de pines como la instrucción toogle pero en este caso se tendría que acelerar la conmutación con un potenciómetro (eso se que los que saben mucho la hacen con un convertidor A/D) veo que la forma de probar mi teoría es programar un pic jejje hacer las bobinas y medir la salidas aaaaaaaassssssuuuuuu mecha un sueño creo que no tan duro si aprendo a programar pic en c o si alguien me ayuda yo tengo la idea saludos y gracias por la ayuda  ((:-)) a el programa que intento hacer si me esfuerzos de verdad me quedo a deshoras de la noche el  caso es que quede jejeeje
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 15:36:24
ya realise los cambios segun yo pero nada que me funciona pongo el programa a continuacion


#include <16f84a.h>//<16F877a.h>
#use delay(clock=4000000)
#fuses xt//,PWRT,CP //NOWDT,XT,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT




    #use fast_io(b)


    void main(void){

            set_tris_b(0b00000101);         // Se asigna B0 y B2 entradas
            output_low(PIN_B0);             // garantiso que el pin b0 esta en bajo
            output_low(pin_b3);             // pongo b3 en bajo

            while(1)
            {
                    if(input(PIN_B0)==0)                    // Pregunto si la entrada B0 es=0
                    {
                            delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
                            while(input(PIN_B0)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
                            output_toggle(PIN_B1);          // Cambio el valor del pin
                    }
                       
                    if(input(PIN_B1)==1 && input(PIN_B2)==1)// Pregunto si pin B1 es =1 y si B1 es= 1
                    {
                            delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
                            output_high(pin_b3);             //Si se cumple el if anterior dale un 1 en b3
                            if(input(pin_b1==1 && input(PIN_B2==0)));//pregunto de nuevo si se cumple el if dare un 0 ala terminal b3
                            output_low(pin_b3);
                    }
            }
   
    }
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 09 de Marzo de 2016, 17:28:28
Código: C
  1. void main(void){
  2.  
  3.         set_tris_b(0b00000101);         // B0 y B2 entradas
  4.         output_low(PIN_B0);
  5.  
  6.         while(1)
  7.         {
  8.                 if(input(PIN_B0)==0)                    // Pregunto si B0 es 0
  9.                 {
  10.                         delay_ms(10);                   // Espero 10ms por si la llave esta rebotando (variando entre 1 y 0 )
  11.                         while(input(PIN_B0)==0);        // Espero que suelte el boton, observa el ; al final, es decir un while(){}
  12.                         output_toggle(PIN_B1);          // Cambio el valor del pin
  13.                 }
  14.  
  15.                 if(input(PIN_B1)==1)
  16.                 {
  17.                         if(input(PIN_B2)==1)
  18.                         {
  19.                                 output_high(PIN_B3);          // Cambio el valor del pin
  20.                         }
  21.                         else
  22.                         {
  23.                                 output_low(PIN_B3);
  24.                         }
  25.                 }
  26.                 else
  27.                 {
  28.                         output_low(PIN_B3);
  29.                 }
  30.         }
  31. }
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 09 de Marzo de 2016, 22:22:25
hola KILLERJC deverdad me as enseñado mucho en el primer programa realmente abri los ojos con todo lo bueno que es el lenguage c pic
en el programa de solo 4 pines usaste las siguientes sentencias (if, else, outp_togle, y asta vi la conpúerta nan (&&) y los basicos output_low, output_high. asummecha exelente me quito el sonbrero y doy gracias al creador del universo por que me da la oportunidad de conoser un ser con tanto talento como tu y que de manera jobial y desinteresara ayude a los que pueda gracias el progrma hase lo que debe de hacer ya lo simule  (((:-))) un plauso para ti y me queda fabricar o comprar el programador de pic (tengo uno pero es paralelo y veo que eso ya no se usa y ni tengo la pc de antes nesesit el serial jejejej y por logica conectar un sensor en b2

esta funcion tienes algun egemplo donde la pueda verla funcionar 
switch
y si es correctro en esta parte del programa     if(input(PIN_B1)==1)      meter los demas pines ya que se cambie en  set_tris_b(0b11110101); a entradas la entrada b4,b5,b6,b7 del pic 16f84a 
  if(input(PIN_B2)==1)
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 09 de Marzo de 2016, 23:11:14
Gracias nuevo mundo, aca en el foro hay muchas personas que tiene mucho mas "talento" que yo y que ayudan a los demas, termino contestando yo por que estoy mas desocupado. ( Rogando que me llamen de algunos lugares donde presente el CV )

Es cierto que use varias cosas, pero lo importante es que entiendas paso a paso el programa, tratar de entenderle para que en el momento que necesites realizar algo no dependas de otras personas, sigas intentando y viendo que esta mal, se te ocurran cosas para probar si el programa llega a donde vos queres o no, o donde esta el problema y tratar de solucionarlo por uno mismo, si luego de tratar hasta el cansancio no encontras una respuesta ( y me refiero a dias tratando ) podes buscar nuevas ideas en el foro, normalmente de alguien con mas experiencia y que paso por el mismo problema que vos antes.

El programa que te pase era muy simple, por eso buscaba que lo hicieras vos mismo.

Respecto al programador es cierto que ayuda un poco a meterse con la electronica o en realidad "emociona" crearse el programador uno mismo, pero si vas a programar varios micros por ahi deberias pensar en comprarte un programador que admita todos los tipos de PIC como un Pickit 3, que es el Oficial de Microchip.

Ahora si tu idea es grabar solo un par de micros y de los mas "viejitos", un Pickit 2 ( o un clon del mismo ) te podria servir, pero pensa que podrias gastar 1 sola ves y tenerlo para todos los micros ( el pickit 3 ), Creo que los precios son parecidos.

Construirlo uno mismo , lo maximo que podrias acercarte es un Pickit 2, en el cual vas a tener que grabar el micro del programador, necesitando de otro programador, Y deberias analizar los costos sobre que es mas barato, la durabilidad, lo que se te ocurra.

----------------

Citar
bueno por ultimo aquí viene lo mejor o la idea que se que funcionaria es realizar un generador eléctrico pero prado si parado si lo ves de la forma que lo e visto es la siguiente la bobina lo que reamente ase es acercarse y alejarse del campo magnético entonces por que girar la bobina si con electrónica podemos conmutar la polaridad de la alimentación de la bobina y con esto tendremos un electro iman que cambia de polaridad y si le ponemos una bobina (estator) me aprese que se crea un generador eléctrico parado disculpa que telo comente aun hay mas porque en donde trabajo (bueno ahora sin empleo jejejeje) está un generador pero lógico giratorio y una de las ´partes se tiene que usar para mi idea

Estudio Ingeniera Electronica por lo cual tengo el deber de estudiar la fisica/matematica de los trnasformadores/generadores. Eso no quiere decir que no me pueda equivocar obviamente.
Yo no creo que estes en lo correcto con lo que planetas, para mi lo que estas intentando hacer es un transformador con un nucleo de aire.

Muy distinto a un generador. Para hacerte una idea te doy esta sentencia: la energia no se crea se transforma.

Es decir en un generador normal: La energia proviene del combustible, que hace girar al motor, del movimiento giratorio mecanico del motor se transforma en energia electrica. Apartir de aca el consumo hace que el generador quiera "frenarse" pero que el motor provee la energia para que no suceda.
En cambio lo que vos planteas es darle energia electrica a una bobina para sacar energia electrica por la otra. Basicamente un transformador. Como te decia la energia no se crea, entonces la energia que vas a sacar, tambien la tenes que tener en el "rotor". Y creo que no ves el problema principal, es que necesitas energia electrica donde NO LO HAY! y por eso es que usas otro tipo de energia como el combustible, Gas, Vapor, Carbon, Agua(hidraulicas), Viento (eolicas), etc.

Pensaras que podrias almacenar energia en baterias, por supuesto podes hacerlo, pero recuerdo haber visto 1 sala llena de UPS + 1 sala llena de baterias una conectada con otras para poder proveer a una estacion terrena ( de satelites ) de energia, para esperar a 2 generadores se pongan en marcha que no me parecieron gigantes (con lo vistos en algunas fabricas ). Basicamente usaban esos UPS para darle tiempo a los generadores a arrancar y no tener que hacerlos arrancar por 1 minuto ( a pesar que se los mantenia calientes, etc etc ) , pero su duracion era muy limitada ( Creo que 2 horas maximo era ). Luego tenes que pensar en el costo de reemplazo de baterias, el tiempo de "funcionamiento" etc. No lo veo como una solucion rapida hasta que no exista una mejora significativa en baterias.

Por como lo decis creo que te falta interiorizarte mucho mas en Fisica, deberias ver transformadores y generadores desde la parte matematica/fisica mucho mejor.

Citar
ok KILLERJC si lo leí según yo investigue (&&) que significa compuesta nand

Se comporta como una AND , es una AND logica, no confundir con una & ( AND bit-wise , o bit a bit )

Cuando vos usas un if, o tenes alguna condicion, ejemplo:

input(PIN_B0) == 0

Lo que hace eso es preguntar si el PIN_B0 es 0, si es asi el resultado de eso es TRUE (verdadero) , en caso contrario seria FALSE (falso). Con la && es para ese tipo de valores. Suponete esto:

if ( 123 && 12 && 0 && -10)

Eso primero se evalua cada uno de los datos, cualquier numero distinto de 0 es TRUE, y el 0 es FALSE. Esntonce eso se transforma en:

if ( TRUE && TRUE && FALSE && TRUE )

Como toda AND, si alguno es 0 ( false ) va a tener 0 en la salida ese if nunca va a entrar.
Distinto es el & bit a bit como te decia.

variable = 0b10101001 & 0b00001111;

Lo que hace eso es realizar una AND bit a bit, es decir,  bit0 del primer valor AND bit0 del segundo valor.
Como se puede ver rapidamente, solo van a quedar los 4 ultimos bits, es decir que variable va a tener el valor : 0b00001001

Eliminados un par de mensajes por atentar contra las Normas del Foro:

5º No hagas consultas sobre piratería de software, por favor. Es ilegal y compromete al foro. Nada de cracks, serials, plug-in's pagos y/o cualquier software y/o hardware sujeto a Copyrights y/o Derechos de Autor;

6º Si citas o incluyes material sujeto a Copyrights y/o Derechos de Autor en tu mensaje, asegúrate de cumplir con todas las pautas que exige su Autor;

un saludo

Gracias Xocas
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 10 de Marzo de 2016, 23:16:12
ok KILLERJC a su mecha compadrito eres bueno en esto de programar la verdad me explicaste muy bien lo de las compuesta nan gracias oyes  KILLERJC una pregunta me podrías seguir ayudando con el programa que tengo para acensarle mas entradas en el puerto b rb4,rb5,rb6,rb7 es que la condición ese es el problema ósea si ves el diagrama que subí tengo un DWS1 pero a un me gustaría aumentarle más entradas pero como meterle más condiciones al if quiero meterle rb4 , rb5,rb6 al if ósea lo que hace está bien ahora anexarle rb4, rb5,rb6 por ultimo  rb7 este últimos la diferencia es que al detectar un 1 en cualquiera de las entradas (rb3,rb4,rb5,rb6) de salida en este último pero con intervalo de tiempo de 1 min encendido y otro pagado are mi intento para que veas si ya me empiezo a aprender algo del análisis de leer programas.

y por otro lado si me gustaría seguir platicando más sobre la idea del generador estático la verdad que creo que si es factible desarrollar la idea no se en tu escuela como se titulan pero en México uno se puede titular por proyecto tu presenta un proyecto pero claro uno en donde desarrolles nuevos campos y si demuestras que desarrollaste algo nuevo pos te dan el titilo
si te molesto con esto del generador parado me dices no es mi intención pero si creo que es un excelente reto desarrollar la idea. Mira si tienes razón en primera vista es un trasformador pero en realidad una de las cosas que primero es desarrollar un electroimán pero este es algo especial que el sentido de la corriente tiene que cambiar para que la polaridad magnética cambie también en esta parte entran dos cosas pic programado para la conmutación y luego que ya se haga eso realizar una fuente conmutada o un modulador de ancho de pulso para alimentar el electroimán claro que se tiene que ir realizando por parte por que alimentar la bobina del electro iman tiene su chiste (tendría que ser al principio con electrónica de potencia  baja) para los primeros  experimentos de hay aumentar la corriente para que sea mas fuete el magnetismo y por lógica más campo magnético y mayor salida en el estator (nota e buscado como hacer electroimanes y no e encontrado mucho solo en you tuve encontré un video donde hacen los imanes mas poderosos del mundo

aaaaaaaa me da pena la verdad tienes razón en depender de otras personas pero en el proceso uno aprende como dices voy a intentar meter los otros pin a la condición que te mencione luego subiré lo que hice y si lo logre
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 11 de Marzo de 2016, 01:08:51
Citar
me da pena la verdad tienes razón en depender de otras personas pero en el proceso uno aprende

Si, uno aprende pero si ya te doy mas codigo no es ayudarte sino hacerte el trabajo, y con lo aprendido hasta el momento deberias ser capas de realizarlo por vos mismo al programa que intentas hacer. Aunque no logre entender exactamente que querias hacer por que no te explicaste demasiado bien con lo de las entradas. Ni tampoco poseo el tiempo para dedicarme a lo tuyo, ya que siempre tengo cosas para hacer.

Citar
y por otro lado si me gustaría seguir platicando más sobre la idea del generador estático la verdad que creo que si es factible desarrollar la idea no se en tu escuela como se titulan pero en México uno se puede titular por proyecto tu presenta un proyecto pero claro uno en donde desarrolles nuevos campos y si demuestras que desarrollaste algo nuevo pos te dan el titilo

No se que "escuela" estas hablando, pero estamos hablando de carreras universitarias, no conozco ninguna carrera que te den un "titulo" por lo que hayas realizado, es decir no vas a salir con un ingenieria/doctorado por solo presentar un proyecto, ya que el titulo tiene muchas mas incumbencias que lo que podes desarrollar. Si la educacion es esa entonces es la peor educacion que se me ocurre. Pero estoy mas que seguro que no es asi. Y que debes estar equivocado.

Para no extenderme demasiado, que estes hablando de como pensas armar tu "generador" (por que es energia electrica a electrica, y tal ves la palabra que buscas es "inversor", ya que NO seria un "generador" ), que me digas que estas buscando videos en youtube para hacer un electroiman y no un libro tecnico, que me digas eso de los estudios y los titulos.
Hace que no pueda tomar en serio de lo que me estas hablando. Todo es tan ilogico que me hace pensar si realmente tenes idea de lo que estas planteando.
En fin yo no soy quien para decirte nada, vos mismo probaras y luego buscaras el por que no te funciona como vos crees.
Asi que por mi adelante, podes seguir investigando, construir algo y probarlo.
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 11 de Marzo de 2016, 03:56:25
KILLERJC ok amigo estoy agradesido  con un servidor saludos un fuerte abrazo voy a macharle mas al programa asta hecharlo a andar tamos en contacto
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 11 de Marzo de 2016, 12:30:06
KILLERJC oyes compadrito por alguna manera el promama funciono pero ya que le intente copiarlo y modificarlo y simulardo de nuevo la verdad  no gase nada ni siquiera lo primero que es el cambio de salida en ra1 nada  de nada la verdad me esta frustrando esta cosa pero respirare profundo y empesare de nuevo cuando tengas un tiempesito pos me apoyas por lo pronto de nuevo lo empesare por partes aver que tal
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: Berto en 31 de Marzo de 2016, 12:22:43
Si no me e perdido en algo que halla leido yo utilizaria una AND fisica, te ahorras en pin2, escribir codigo, memoria RON y tiempo de ejecucion.
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: KILLERJC en 31 de Marzo de 2016, 18:54:47
Si no me e perdido en algo que halla leido yo utilizaria una AND fisica, te ahorras en pin2, escribir codigo, memoria RON y tiempo de ejecucion.

En lo que te ahorras la memoria ROM que le deberia sobrar, tiempo de ejecucion que le deberia sobrar por que no son entradas que necesiten alta velocidad de respuesta. Terminas agregando complejidad en la placa y mas integrados. Aunque creo que lo sigue en otro hilo, paso a un PIC16F877A que posee 40 pines, y le sobran por lo que piensa hacer.
Título: Re:insertar una condicion mientras se ejecuta un while
Publicado por: nuevo mundo en 01 de Abril de 2016, 02:43:58
hola Berto te informo que pase a otro tema hay continuare lo que quiero terminar realizando lo cual es una alarma si gustas seguir el avance o ayudar será bienvenido por lo pronto creo que este tema insertar una condición mientras se ejecuta un wile se cumple al realizar la primera condición de lectura del prime pin el cual será para una alarma pero en realidad necesito seguir avanzando para llegar a buen fin  y me esta asesorando killerjc
pase a lectura digitales y analógicas
saludos