Autor Tema: Como hacer parpadear un led en PIC16F628A durante toda la ejecucion del programa  (Leído 2784 veces)

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

Desconectado velaale

  • PIC10
  • *
  • Mensajes: 4
Hola amigos; me inicio en esto de los PICS y necesito una grana ayuda, intento controlar un relay (rele) que encienda y apague en un determinado tiempo que ya consegui hacerlo pero aun no se como hacer para que A3 que es un led encienda y apague durante todo el tiempo que este encendido el PIC pues este quiero ponerlo en la tarjeta indicando el funsionamiento de la misma.   Por favor podrian ayudarme a que lineas debo incluir para este led todo el tiempo parpadee? Agradezco sus ayuda

#include <16F628.h>

#fuses nowdt
#fuses hs
#fuses noput
#fuses noprotect
#fuses nobrownout
#fuses nolvp
#fuses nocpd
#fuses XT
#use delay(clock=4000000)

#byte porta=0xF00
#byte portb=0xF01


void main()
{


while(true)
{

output_low(PIN_A2);
output_low(PIN_A0);   //Rele
output_high(PIN_A1);  //Led verde indicador de Relay apagado

delay_ms(10000);

output_low(PIN_A1);
output_high(PIN_A0);
output_high(PIN_A2);  //Led rojo cuando el relay enciende

delay_ms(10000);

}

return;

}

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp


Puedes usar interrupción+temporizador, o quitar esos delay y usar variables como contadores para condicionar la activación de los puertos.

Desconectado velaale

  • PIC10
  • *
  • Mensajes: 4
 :shock: Definitivamente estoy en un forum donde no deberia estar esas palabras son muy profundas para mi jejejejeje bueno gracias   :)

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Hola velaale, yo estoy peor que vos, en cuanto a conocimientos de C, pero se me ocurre esto:

Reemplazas los delay_ms(10000); por:

output_low(PIN_A3);
delay_ms(1000);
output_high(PIN_A3);
delay_ms(1000);
output_low(PIN_A3);
delay_ms(1000);
output_high(PIN_A3);
delay_ms(1000);
output_low(PIN_A3);
delay_ms(1000);
output_high(PIN_A3);
delay_ms(1000);
output_low(PIN_A3);
delay_ms(1000);
output_high(PIN_A3);
delay_ms(1000);
output_low(PIN_A3);
delay_ms(1000);
output_high(PIN_A3);
delay_ms(1000);

Por supuesto se que dista mucho de ser la manera correcta de hacerlo, pero para mis conocimientos de C, esto es espectacularmente complicado  :D

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado velaale

  • PIC10
  • *
  • Mensajes: 4
Hola amigo Carlos no ese no me sirve porque debe ser que encienda como si fuese una expresion WHILE osea siempre parpadee haga las inclusiones que haga nunca deje de parpadear, ya ese lo intente jejejejejeje gracias

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp


Prueba con este código, pero lo ideal será que uses una interrupción con un temporizador. Los valores en DELAYX1 y DELAYX2 los tendrás que ir probando hasta que salgan las temporizaciones que quieres.


void main()
{

unsigned long contador=0;
unsigned int contador2=0
#define DELAYX1 6000;
#define DELAYX2 10;

while(true)
{

if (contador2==0) output_high(PIN_A3); // Parpadea led en A3
if (contador2==DELAYX2) output_low(PIN_A3);

if (contador==0)
   {
   output_low(PIN_A2);
   output_low(PIN_A0);   //Rele
   output_high(PIN_A1);  //Led verde indicador de Relay apagado
   }

if (contador==DELAYX1)
   {
   output_low(PIN_A1);
   output_high(PIN_A0);
   output_high(PIN_A2);  //Led rojo cuando el relay enciende
   }

contador2++;
contador++;
if (contador  == DELAYX1 * 2)  contador=0;
if (contador2 == DELAYX2 * 2) contador2=0;

}

return;

}



Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Hola velaale, pero ese parpadea siempre, por lo menos si el programa que estas usando es el que posteaste anteriormente.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado velaale

  • PIC10
  • *
  • Mensajes: 4
OOOK ya pruebo amigos muchas gracias


 

anything