Ir ao conteúdo
  • Cadastre-se

Gerador de Pusos com Pic Utilizando Timer1


Posts recomendados

Olá a todos...

Primeiramente gostaria de agradecer a todos pela atensão dispensada.

Pois é , preciso montar um gerador de onda quadrada para sincronizar um certo dispositivo de gatilho de disparo

Gostaria de saber se alguém pode me ajudar...

Preciso fazer um gerador de onda quadrada com 58 pulsos e dois de nivel zero 60-2...

Gerador de Pusos com Pic Utilizando Timer1

onda10.jpg

Acredito que deva de ser feito com if e else com condiçao de valor <58 ou coisa assim...

Muito Obrigado a todos

Link para o comentário
Compartilhar em outros sites

Estou usando o Microc pro for pic

No caso do ocilador é isto mesmo,58 subidas e no fina 60 no nivel 0

A foto foi tirada em meu laboratório Fiz melhor...

Veja a figura abaixo

quadra10.jpg

a frequencia gostaria de ajustar entre 55 hz -5khz com trim-pot pela entrada analógica

Periodo de 200us -15ms

O pic pode ser com o 12f675

No caso da onda da primeira figura, refere-se a saida final, já tratada com resistores,capacitores

Por isso , na figura 2 mostra um exemplo medido sem os filtros...

Link para o comentário
Compartilhar em outros sites

MicroProg.

Sempre que precisarem...

Vamos lá

 //AGORA VAMOS INICIAR OS TIMERS ASSIM COMO A CONFIGURAÇÃO DAS PORTAS


TRISC = 0x00;
PORTC = 0x00;
TRISD = 0x00;
PORTD = 0x00;
/*

while (1) {
RD0_BIT = 0Xff;
Delay_Ms(50);
RD0_BIT = 0x00;
Delay_Ms(50);
RD1_BIT = 0Xff;
Delay_Ms(50);
RD1_BIT = 0x00;
Delay_Ms(50);
RD2_BIT = 0Xff;
Delay_Ms(50);
RD2_BIT = 0x00;
Delay_Ms(50);
RD3_BIT = 0Xff;
Delay_Ms(50);
RD3_BIT = 0x00;
Delay_Ms(50);
RD4_BIT = 0Xff;
Delay_Ms(50);
RD4_BIT = 0x00;
Delay_Ms(50);
RD5_BIT = 0Xff;
Delay_Ms(50);
RD5_BIT = 0x00;
Delay_Ms(50);
RD6_BIT = 0Xff;
Delay_Ms(50);
RD6_BIT = 0x00;
Delay_Ms(50);
RD7_BIT = 0Xff;
Delay_Ms(50);
RD7_BIT = 0x00;
Delay_Ms(50);


RD0_BIT = 0Xff;
Delay_Ms(10);
RD0_BIT = 0x00;
Delay_Ms(10);
RD1_BIT = 0Xff;
Delay_Ms(10);
RD1_BIT = 0xFF;
Delay_Ms(10);
RD2_BIT = 0X00;
Delay_Ms(10);
RD2_BIT = 0xFF;
Delay_Ms(10);
RD3_BIT = 0X00;
Delay_Ms(10);
RD3_BIT = 0xFF;
Delay_Ms(10);
RD4_BIT = 0X00;
Delay_Ms(10);
RD4_BIT = 0xFF;
Delay_Ms(10);
RD5_BIT = 0X00;
Delay_Ms(10);
RD5_BIT = 0xFF;
Delay_Ms(10);
RD6_BIT = 0X00;
Delay_Ms(10);
RD6_BIT = 0xFF;
Delay_Ms(10);
RD7_BIT = 0X00;
Delay_Ms(10);
RD7_BIT = 0xFF;
Delay_Ms(10);
}

*/


/*
while (1) {
for (counter=0; counter<8; counter++) {

PORTD |= 1 << counter;
DELAY_MS(30);
}

counter = 0;
while (counter<8) {
PORTD &= ~(1 << counter);

DELAY_MS(30);
counter++;
*/

******adcons seria legal também em an0

Estou em 18f4520/18f45k22

Tenho umas figurinhas repetidas,se interessar...pin_410.jpg

Belo Kit De Adquiri.

20120311.jpg

Ae Galera, Dá uma força ae...

Sempre Rola Uns Brothers De Fóruns Bons,Vários Tópicos Afixados...

VALEU...

Link para o comentário
Compartilhar em outros sites

Veja se é esse o resultado que espera:

circuito-2.png


/*=====================
Inicialização do PIC
=======================*/
#include <16F877A.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //Crystal osc > 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=20000000) //meu clock

/*=====================
Minhas variáveis:
=======================*/

int8 periodo=0;
int8 ciclo1=0;
int8 p1 = 1;
int16 delay = 65478; //65478 = 4960Hz e 60000 = 57Hz
int1 aux;

/*=====================
A interrupção:
=======================*/
#int_timer1
void TIMER1_isr (void)
{
p1++;
aux++;
set_timer1(delay);
}

/*==============================
Rotina Principal:
================================*/

void main()
{
output_low (PIN_B7);
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8); //Configurar timer1 para clock iterno/8
enable_interrupts (INT_TIMER1); //Habilitar Interrupções
enable_interrupts (global);
set_timer1(delay); //Preload do timer1

while (TRUE)
{
if (aux)
{
if (p1 < 118)
{
output_toggle (PIN_B7);
}
else
{
output_high (PIN_B7);
}
if (p1 == 120)
{
p1 = 0;
}
aux++;
}
}
}

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
Em 02/06/2012 at 18:20, MatheusLPS disse:

Veja se é esse o resultado que espera:

circuito-2.png

 

 

/*=====================
Inicialização do PIC
=======================*/
#include <16F877A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //Crystal osc > 4mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=20000000)                       //meu clock

/*=====================
Minhas variáveis:
=======================*/

int8 periodo=0;
int8 ciclo1=0;
int8 p1 = 1;
int16 delay = 65478;             //65478 = 4960Hz e 60000 = 57Hz
int1 aux;

/*=====================
A interrupção:
=======================*/
#int_timer1
void TIMER1_isr (void)
{ 
   p1++;
   aux++;
   set_timer1(delay); 
}

/*==============================
Rotina Principal:
================================*/

void main() 
{ 
   output_low (PIN_B7);
   SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);       //Configurar timer1 para clock iterno/8    
   enable_interrupts (INT_TIMER1);                //Habilitar Interrupções
   enable_interrupts (global);   
   set_timer1(delay);                             //Preload do timer1

   while (TRUE)
   {
      if (aux)
      {
         if (p1 < 118)
         {
            output_toggle (PIN_B7);
         }   
         else
         {
            output_high (PIN_B7);            
         }
         if (p1 == 120)
         {
            p1 = 0;
         }
         aux++;
      }
   }
}

 

amigo como seria esse mesmo código escrito em micro c já tentei mas não entendi essa logica eu sei que funciona já testei no proteus só que meu código e no micro c a parte do menu e eu queria entender para fazer uma função e inserir essa belezinha 

Veja se é esse o resultado que espera:



/*=====================
Inicialização do PIC
=======================*/
#include <16F877A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //Crystal osc > 4mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=20000000)                       //meu clock

/*=====================
Minhas variáveis:
=======================*/

int8 periodo=0;
int8 ciclo1=0;
int8 p1 = 1;
int16 delay = 65478;             //65478 = 4960Hz e 60000 = 57Hz
int1 aux;

/*=====================
A interrupção:
=======================*/
#int_timer1
void TIMER1_isr (void)
{ 
   p1++;
   aux++;
   set_timer1(delay); 
}

/*==============================
Rotina Principal:
================================*/

void main() 
{ 
   output_low (PIN_B7);
   SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);       //Configurar timer1 para clock iterno/8    
   enable_interrupts (INT_TIMER1);                //Habilitar Interrupções
   enable_interrupts (global);   
   set_timer1(delay);                             //Preload do timer1

   while (TRUE)
   {
      if (aux)
      {
         if (p1 < 118)
         {
            output_toggle (PIN_B7);
         }   
         else
         {
            output_high (PIN_B7);            
         }
         if (p1 == 120)
         {
            p1 = 0;
         }
         aux++;
      }
   }
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!