Ir ao conteúdo

Posts recomendados

Postado

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

  • Membro VIP
Postado

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

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

Postado

@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! 🙂

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

Postado
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
  • Membro VIP
Postado
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
Postado
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.

  • Membro VIP
Postado

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
Postado

Não comprei produtos,só componentes e PCB,umas 30 compras,abaixo de u$50,e nunca paguei nada,a última tem 2 meses.

Sobre ficar parado nos correios,pode ser que voce não se cadastrou no ID Correios,por isso não fez o acompanhamento.

  • Membro VIP
Postado
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.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!