Ir ao conteúdo
  • Cadastre-se

Pic com mikroc


Posts recomendados

Boa tarde pessoal.

Estou utilizando o PIC16f628a e programando no Mikroc.

Meu objetivo é gerar nos pinos 9 e 10 uma onda quadrada com 5ms de nivel alto e 5ms de nivel baixo sendo defasadas ou seja enquanto o pino 9 ta em nivel alto o pino 10 esta em nivel baixo e vise versa.

Fiz o seguinte programa em mikro c:

void main() {

TRISB=0x00

while(1)

{ PORTB.B4=1;
Delay_ms(5);
PORTB.B4=0;
Delay_ms(5);
PORTB.B3=1;
Delay_ms(5);
PORTB.B3=0;
Delay_ms(5); }}

O programa compila normalmente e é gravado. Só que quando vejo o sinal no osciloscopio a forma de onda nao esta com os os 5ms de tempo alto e 5ms em tempo baixo, mais sim 5ms em nivel alto e 15 ms em nivel baixo.

Como posso resolver esse problema, pois acho que deve ser a programação.

Obrigado!!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Se entendi direito e é para manter RB4 em alto e RB3 em baixo por 5ms e depois inverter o estado, gerando uma onda quadrada, tente isto (estou no trampo agora e não tenho acesso a minha bancada para testar):

void main() {

[INDENT]TRISB=0x00;

while(1)

{
PORTB.B4=1;
PORTB.B3=0;
Delay_ms(5);
PORTB.B4=0;
PORTB.B3=1;
Delay_ms(5);
}[/INDENT]


}

Link para o comentário
Compartilhar em outros sites


PORTB.B4=1;
Delay_ms(5);
PORTB.B4=0;
Delay_ms(5);
PORTB.B3=1;
Delay_ms(5);
PORTB.B3=0;
Delay_ms(5);

Thiago, a tua lógica não funciona por que se você observar a mudança do B4 por exemplo.. liga.. fica 5s.. desliga.. ai ele só vai ligar de novo depois de 3 delay de 5ms o tempo desligado do B4 e o ligado e desligado do B3.. na lógica que os guri citaram ai em cima funcionará como você quer..

B4 vai liga.. esperar 5 desligar.. ai conta 5s do desligado e torna a ligar, e o B3 faz o inverso :)

Link para o comentário
Compartilhar em outros sites

Cara eu acho q se você fizer com isso com interrupção vai obter melhor precisão... segue código... teste e veja se os tempos estão certos...

void interrupt(void)
{
if(INTCON.TMR0IF)
{
PORTB.RB4 = ~PORTB.RB4;
PORTB.RB3 = ~PORTB.RB3;
INTCON.TMR0IF = 0;
TMR0 = 99;
}
}
void main() {
TRISB = 0X00; //CONFIGURA PORTB COMO SAIDA
//*******CONFIGURA PRESCALER PARA TMR0 COM 1:32 E INCREMENTO COM CLOCK INTERNO******************//
OPTION_REG.PSA = 0;
OPTION_REG.PS2 = 1;
OPTION_REG.PS1 = 0;
OPTION_REG.PS0 = 0;
OPTION_REG.T0CS = 0;
//*******************************FIM configuração TMR0*******************************************//
// OPTION_REG &= 0b11110100; //prescaler 1:32 tmr0
TMR0 = 99; //CARREGA TMR0 COM 99 PARA QUE A INTERRUPCAO SEJA A CADA 5ms
INTCON.TMR0IE = 1;//HABILITA INTERRUPCAO PARA TMR0
INTCON.PEIE = 1; //HABILITA INTERRUPÇÃO DE PERIFERICOS
INTCON.GIE = 1; //HABILITA CHAVE GERAL DE INTERRUPCAO
INTCON.TMR0IF = 0; //LIMPA FLAG DO TMR0
// CCP1CON = 0X00;
PORTB.RB4 = 1;
PORTB.RB3 = 0;
while(1){

}
}

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
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!