Ir ao conteúdo
  • Cadastre-se

PIC Acionar o Timer0 no pic16f84a


Posts recomendados

Boa noite pessoal!

 

A um tempo atrás eu montei uma plaquinha com um pic 16f84a, ela está funcionado porém estou usando ela para desenvolver minha logica de programação com o MPLAB e XC8.

Sou iniciante, só vi programação em pic em ASM e faz muito tempo, porém em C tenho uma maior facilidade em desenvolver algo.

 

Estou a tentando utilizar o timer0 dele como contador para varredura de botões e outros afins, porém não funciona nada que eu faço, como não tenho experienciaria, e já reli varias vezes o

datasheet do mesmo nos bits que devo setar e não consigo sair do lugar, gostaria da ajuda dos mais experientes.

 

codigo:

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <pic16f84a.h>
#include <xc.h>
#define _XTAL_FREQ 4000000
// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

unsigned cont = 3000;


void main(void)
{
    TRISA  = 0x1f;
    TRISB  = 0x00;
    PORTB  = 0xf0;
    INTCONbits.GIE   = 1;     // habilita interrupção global
    INTCONbits.T0IE  = 1;     // habilita interrupção do timer
    INTCONbits.T0IF  = 0;    // seta flag
    OPTION_REG    = 0x01;     //  prescaler 1:256 -
    TMR0 = 0;                 // inicia o contador em 0
    
while(1)
{    
 if (cont == 0)  
    {
            cont = 3000;      // inicia a variavel em 3000  
            PORTB = ~PORTB;   // inverte os valores do PORTB
    }
}
}
void interrupt()
{
    if(INTCONbits.T0IF)  // testa se houve estouro do timer0
    {    
    cont--;                   // Decrementa a cada interrupção
    INTCONbits.T0IF = 0;      // seta a flag de interrupçao
    TMR0            = 0;      // inicia o timer0 em 0
    }   
}

</CODE>

nesse caso acima só estou tentando inverter o estado do portB para enxergar a ação do timer0 funcionando porém não acontece, independente do tempo! Se alguem puder apontar algum erro an minha logica pois compilando está perfeitamente.

 

desde já grato.

WhatsApp Image 2021-02-28 at 22.03.59.jpeg

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Por enquanto coloque a interrupt acima do main()

void interrupt()
{
    if(INTCONbits.T0IF)  // testa se houve estouro do timer0
    {    
    cont--;                   // Decrementa a cada interrupção
    INTCONbits.T0IF = 0;      // seta a flag de interrupçao
    TMR0            = 0;      // inicia o timer0 em 0
    }   
} 

void main(void)
{
    TRISA  = 0x1f;
    TRISB  = 0x00;
    PORTB  = 0xf0;
    INTCONbits.GIE   = 1;     // habilita interrupção global
    INTCONbits.T0IE  = 1;     // habilita interrupção do timer
    INTCONbits.T0IF  = 0;    // seta flag
    OPTION_REG    = 0x01;     //  prescaler 1:256 -
    TMR0 = 0;                 // inicia o contador em 0
    
while(1)
{    
 if (cont == 0)  
    {
            cont = 3000;      // inicia a variavel em 3000  
            PORTB = ~PORTB;   // inverte os valores do PORTB
    }
}
}

Pela foto parece que o PORTB está todo em 0xff e não 0xf0 (dica coloque 0x55). Portanto parece que nem entrou no programa. Verifique fuses, cristal, reset, se gravou correto e tal. Não descarte que seu (antigo) mc já era.

E verifique se o clock interno está setado pra entrar no timer0 se não ele não sai do lugar

Ah e coloque unsigned int na variável. Não sei se e como seu compilador entende só unsigned

Link para o comentário
Compartilhar em outros sites

2 horas atrás, .if disse:

Pela foto parece que o PORTB está todo em 0xff e não 0xf0

Os 4 bits menos significativos acendem em 0 mesmo!

Vou realizar as mudanças e depois posto o resultado, grato pela ajuda.

59 minutos atrás, vtrx disse:

Uma placa feita numa empresa especializada é outra coisa...

Pode ser até para piscar um Led,mas fica muito show.

 

Faz muita diferença para o funcionamento, fora a beleza! 

 

essas pequeninas (10x10 cm) são 5 unidades por 2 dólares, o que mata é o frete.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, kodorna disse:

Os 4 bits menos significativos acendem em 0 mesmo!

Vou realizar as mudanças e depois posto o resultado, grato pela ajuda.

 

Faz muita diferença para o funcionamento, fora a beleza! 

 

essas pequeninas (10x10 cm) são 5 unidades por 2 dólares, o que mata é o frete.

Também uso a JLCPCB,a qualidade é ótima.

Na primeira vez fiquei em dúvida de fazer a compra na China e achei que minha PCB dupla face não seria aceita ou ficaria mais caro pois utiliza uma quantidade boa de furos metalizado,mas não alterou no preço e a qualidade ficou muito boa.

Tentei empresas nacionais,mas mesmo pagando o frete da China,saiu 3x mais barato.

Link para o comentário
Compartilhar em outros sites

@vtrx

3 horas atrás, vtrx disse:

Também uso a JLCPCB,a qualidade é ótima.

Na primeira vez fiquei em dúvida de fazer a compra na China e achei que minha PCB dupla face não seria aceita ou ficaria mais caro pois utiliza uma quantidade boa de furos metalizado,mas não alterou no preço e a qualidade ficou muito boa.

Tentei empresas nacionais,mas mesmo pagando o frete da China,saiu 3x mais barato.

Oi :

Fiquei interessada ! Como faz  para trazer placas da China? Existe um site ou um lugar onde pode-se fazer a encomenda? Como é feito o pagamento? Demora muito para chegar? É seguro comprar assim?

Se você puder me responder, eu agradeço! 🙂

Link para o comentário
Compartilhar em outros sites

3 horas atrás, vtrx disse:

Tentei empresas nacionais,mas mesmo pagando o frete da China,saiu 3x mais barato.

Sim....infelizmente para nós é tudo mais caro, (junta imposto, falta de investimento que gera concorrência e outros fatores) deixa qualquer produção muito cara.

Acaba sendo uma pena porque temos muitos hobistas e profissionais que buscam soluções lá fora.

 

A Respeito do código era a sintaxe mesmo, cada compilador tem uma e acaba sendo desafiador e prazeroso buscar a solução.

void __interrupt() IRS(void)
{
    if(INTCONbits.T0IF == 1)  // testa se houve estouro do timer0
    {    
    cont = cont-1;                   // Decrementa a cada interrupção
    INTCONbits.T0IF = 0;      // seta a flag de interrupçao
    TMR0            = 0;      // inicia o timer em 0
    }   
}

no caso acrescentando aqueles dois  "__ " e um nome veio a funcionar corretamente. Agora desenvolver a logica!

 

Grato pela ajuda e as dicas e vocês, a solução achei neste link https://www.microchip.com/forums/m1058706-p2.aspx

27 minutos atrás, Maria Cristina Oliveira disse:

Fiquei interessada ! Como faz  para trazer placas da China?

Eu particularmente desenvolvo e compro na EasyEDA --> https://easyeda.com

Você cria uma conta ou loga com o google se desejar, tem uma gama de componentes para gerar seu circuito e sua placa com o arquivo GERBER,

existem alguns tutoriais no próprio youtube que você pode estar pesquisando que explicam bem o básico para desenhar e compar as PCBs.

 

Demora uns 40 dais dependendo do frete, porém a produção é rápida.

A empresa é confiável. pagamento com cartão internacional dólar.

em termos de segurança nunca tive problemas, mas é bom sempre comprar

com cartão virtual e ficar atento nos correios coma chegada do pacote.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, kodorna disse:

Demora uns 40 dais dependendo do frete, porém a produção é rápida.

A empresa é confiável. pagamento com cartão internacional dólar.

em termos de segurança nunca tive problemas, mas é bom sempre comprar

com cartão virtual e ficar atento nos correios coma chegada do pacote.

@kodorna

 

Oi:

Não teria que pagar impostos de importação? O governo deixa a gente comprar da China assim, numa boa?

Obrigada por responder.🙂

Link para o comentário
Compartilhar em outros sites

10 horas atrás, Maria Cristina Oliveira disse:

@vtrx

Oi :

Fiquei interessada ! Como faz  para trazer placas da China? Existe um site ou um lugar onde pode-se fazer a encomenda? Como é feito o pagamento? Demora muito para chegar? É seguro comprar assim?

Se você puder me responder, eu agradeço! 🙂

Entre no site e cadastre;

https://jlcpcb.com/

Envie o arquivo da placa pelo site,automaticamente vão calcular as dimensões.

Escolha o envio padrão(o mais barato),fique atento pois esta opção não fica marcada,com isso voce terá os valores em reais.

Não se esquece de escolher no menu em cima na pagina a moeda como real.

O pagamento é com cartão de crédito,pode confiar ja fiz varias compras.

Não passando de 50 dólares,incluindo o envio,voce não paga impostos.

Média de chegada é de 20 dias pelo site.

voce deve também se cadastrar no ID Correios para poder acompanhar o envio e verificar taxas,se tiver.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
10 horas atrás, kodorna disse:

era a sintaxe mesmo, cada compilador tem uma e acaba sendo desafiador

A dica que sempre dou - e esqueci no seu caso, sorry - é de abrir um exemplo pronto que vem com o compilador ou que se acha na net.

 

off/on topic

Certa feita comprei um mini osciloscópio por U$10, demorou meses pra chegar, ficou meses no correio aguardando desembaraço fiscal, resultado: paguei +U$20 de impostos e taxas de permanência no correio e etc.. pêquêpê... Em compensação certa feita comprei uma caneta câmera por U$1,00 ... barata d+, valia o risco... E num é que chegou mesmo? Sem taxas nem impostos!

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

41 minutos atrás, .if disse:

A dica que sempre dou - e esqueci no seu caso, sorry - é de abrir um exemplo pronto que vem com o compilador ou que se acha na net.

 

Eu vi vários exemplos, mas é o diferencial de cada compilador mesmo devagarinho vamos pegando essas particularidades.

43 minutos atrás, .if disse:

E num é que chegou mesmo? Sem taxas nem impostos!

 

Aqui é como loteria ser taxado, porém menos de 50 dólares acho difícil, tem mesmo é esse roubo de "taxa dos correios"  nunca vi ter que pagar frete duas vezes!!! 

2 horas atrás, vtrx disse:

São parceiros da EasyEDA, do próprio editor online você já envia para eles o arquivo GERBER. 

 

Também recomendo muito, empresa com produtos acessíveis e bons.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ok... Apesar de eu achar que você já tinha entendido, vamos melhorar o registro... Pegue algum exemplo que já venha com o compilador ou da net do mesmo compilador que estás a usar. Apesar de ter o C como comum, de fato cada um escolhe a maneira de acessar o hw interno do mc. E o pior: o mesmo compilador de uma versão pra outra há possibilidade de mudar esta maneira.

 

36 minutos atrás, kodorna disse:

nunca vi ter que pagar frete duas vezes

Não é bem frete. O frete já estava explícito na compra. O cara do correio 1/2 que me explicou que era taxa de armazenamento dos correios ou algo do gênero. Ficou muito tempo meses a fio parado na prateleira dele. Demoraram pra desembaraçar de propósito. Além do imposto/taxa que explico a seguir... E este negócio de isenção abaixo de $50 é balela. Um advogado me explicou isso online.: o auditor da alfândega supõe que os cara põe preço menor pra não pagar impostos e cobra a taxa que quer e põe o nome "legal" que quer nela. P.ex. você pode importar um iphone de $1000 e declarar uma coisa qualquer de $49.99. Desde que não abram o pacote nem raio-x tá tudo certo. No meu caso dava pra entrar com recurso legal mas o stresse ia ser grande.

Portanto... desejemo-nos boa sorte no sorteio desta loteria😁

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, vtrx disse:

não se cadastrou no ID Correios,por isso não fez o acompanhamento

Recebia sim o status da coisa e acompanhava sim com o rastreio que me foi fornecido. Nem falava coisa com coisa tipo faltava cnpj do vendedor (da china?) e algo assim. Tinha que contata-lo pra pedir documentos e tal. Já havia desistido quando o cara do correio desembaraçou pra mim com aquele custo. Provavelmente me enrolou de propósito. De toda a forma é o assalto à mão desarmada que somos submetidos o tempo todo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...