Ir ao conteúdo
  • Cadastre-se

Tudo sobre PICs - Postem aqui


Posts recomendados

aí galera, andei lendo muuuiiiiiittttooooo sobre como programar o timer do PIC para ler a onda quadrada mais infelizmente consegui apreneder pouca coisa. Peguei um tutorial q fala como fazer o timer0 do PIC gerar interrupções a cada 1 segundo.

veja a parte do tutorial:


#include <16F877A.h>
#use delay(clock=4000000>
#fuses HS,NOWDT,PUT,NOLVP

#int timer0
void_trata_tmr0() {
static boolean LED;
static int contador;
set_timer0(131+get_timer0());
contador++;
if(contador==125){
contador=0;
LED=!LED;
output_bit(pin_b0,LED);
}
}

void_main(){
setup_timer_0(RTCC_INTRNAL|RTCC_DIV_64);
set_timer0(131);
enable_interrupts (global|int timer0);
while (true);
}

Ai galera poderiam me explicar esse programa? Esse programa le interrupições?La ta dizendo q depois de 125 interrupções, tera chegado a 1 segundo. Depois de 125 interrupções ele vai acender um LED na porta B0?

Se for isso mesmo teria como eu adaptar esse programa para ler 10 interrupções por segundo?


if(contador==125){
contador=0;
LED=!LED;
output_bit(pin_b0,LED);

isso poderia ser feito assim?


while(true){

if(contador==125){
output_high(LED)
}
}

Claro, depois que eu difinisse esse led.

Valeu!!!!!!

Link para o comentário
Compartilhar em outros sites

Vamos pensar, como ele faz esse um segundo?

1s = 1000ms -> 1 interrupção leva = 1000 % 125 = 8mS. ou seja cada vez que se passarem oito milissegundos 125 vezes, terao passados um segundo!

segunda pergunta:

bom pra ler 10 e so fazer o calculo, 1000 % 10 = 100mS, ou seja equivalente a voce usar o comando delay_ms(100) dez vezes. ou setar o timer para estourar a cada 100milissegundos!

terceira, não ,pois beleza contador chegou a 125 ne? então ele vai e faz a rotina, mas uma coisa, então ele a pertir de então vai executar sempre a rotina (pois ele vai estar sempre em 125, ai ja viu a maracutaia ne? então dentro do IF ele zera o contador para poder gerar o 1 segundo!

Link para o comentário
Compartilhar em outros sites

E aí pessoal!!

Tambem estou "iniciando" em pic, e gostaria de saber se é possivel gerar um sinal pwm(pic16f877a) paralelamente ao resto do programa que é um receptor de carro controle remoto(acho que todas que fazem eletronica jáh pensou em fazer um!!:D).

Então o pic receptor tem que receber o sinal e gerar dois sinais pwm , tudo ao mesmo tempo!:confused:

Ah! E se possível :dicas de transmissão/recepção.

Ah!

Comandos em C , por favor!!

Link para o comentário
Compartilhar em outros sites

Então vamos lá, quero ajuda de todos que souberem.


[I]Postado originalmente por [/I][B]Felipe_eletronic[/B]
1s = 1000ms -> 1 interrupção leva = 1000 % 125 = 8mS. ou seja cada vez que se passarem oito milissegundos 125 vezes, terao passados um segundo!

Isso quer dizer que ele tem uma onda quadrada de 8ms né?

Quanto a onda de 100ms eu teria que fazer a configuração em contador?

Ex.: if(contador==10).

Tenho mais algumas duvidas mas vou perguntando conforme vou esclarecendo as mesmas.

Obrigado!!!!

Link para o comentário
Compartilhar em outros sites

Quanto a onda de 100ms eu teria que fazer a configuração em contador?

Ex.: if(contador==10).

Sim o numero de incrementos tem que ser mudado sim!

E aí pessoal!!

também estou "iniciando" em pic, e gostaria de saber se é possivel gerar um sinal pwm(pic16f877a) paralelamente ao resto do programa que é um receptor de carro controle remoto(acho que todas que fazem eletronica jáh pensou em fazer um!!).

Então o pic receptor tem que receber o sinal e gerar dois sinais pwm , tudo ao mesmo tempo!

Ah! E se possível :dicas de transmissão/recepção.

Ah!

Comandos em C , por favor!!

Fala amigo, então posso afirma com toda a certeza que sim!

o PWM opera paralelamente ao programa, vocwe não precisa ficar setando ou limpando porta, ele faz sozinho, a unica coisa que deve ser feita por software é a configuração para modo PWM e alteração do ciclo ativo , se voce quiser aumentar ou reduzir a velocidade! veja os registradores que voce dev estudar:

CCP1CON / CCP2CON = registradores de controle do PWM, CCPR1L CCPR2L registradores com os 8 bits mais significativos do duty cycle

rotina exemplo no MIKroC


unsigned int ciclo;

void PWM_init(void)
{
PR2 = 63; //PWM com 8 bits e freq de 31.25 Khz, se FOSC = 8MHZ
TRISC = 0X00; //PORTC saida
CCP1CON = 0x0F // configura CCP para PWM
CCPR1L = 0; //ciclo ativo a 0%
T2CON.TON = 1; //TMR2 com prescaler 1:1
}

void muda_ciclo (void){
CCP1RL = ciclo // o valor do ciclo e repassado para o PWM
}

qualquer duvida perguntem!

abs.

Link para o comentário
Compartilhar em outros sites

aí Felipe valeu, mas agora vou tirar mais algumas duvidas.

aí, e quanto a isso:


static boolean LED;

1-Eu teria q ponhar, no caso, os nomes das portas de saida?

e o set_timer0:


set_timer0(131+get_timer0());

2-Qual número devo ponhar no lugar do 131? Ou devo deixar esse mesmo?


terceira, não ,pois beleza contador chegou a 125 ne? então ele vai e faz a rotina, mas uma coisa, então ele a pertir de então vai executar sempre a rotina (pois ele vai estar sempre em 125, ai ja viu a maracutaia ne? então dentro do IF ele zera o contador para poder gerar o 1 segundo!

Então poderia fazer assim?:


while(true){

if(contador==125){
contador=0;
output_high(LED)
}
}

Valeu!!

Abs.

Link para o comentário
Compartilhar em outros sites

Vamos la....

primeiro , esse Led é uma variavel, que pode ser verdadeira ou falsa, ou seja basta somente atribuir o nome a variável.

segundo, sim voce devera fazer a conta de quanto tempo voce precisa pra gerar 100mS no TImer0, ai você tera de pensar um pouco e ler o datasheet.

terceiro, não, pois voce eleiminou o problema do contador, mas e Led? quem garante que ele estava resetado hein?

abs.

Link para o comentário
Compartilhar em outros sites

aí Felipe valeu!


terceiro, não, pois voce eleiminou o problema do contador, mas e Led? quem garante que ele estava resetado hein?

Isso quer dizer que devo fazer o programa inteiro dentro de void_trata_tmr0?

e só abrir o void main para entrar com as configurações?

Se for isso mesmo acho que já estou pronto para fazer esse programa.

Obrigado!!

Link para o comentário
Compartilhar em outros sites

valeu pela indicação dos registradores!!

Vamu ver se entendi...

eu tenho que configurar os dois registradores , cada qual com a frequência desejada dentro da subrotina "pwm_init" e colocar o valor desejado de 8(tamanho do TXREG) bits(recebido do controle ) na variavel ciclo.Se for FF =velocidade máxima, 00=parado.

Link para o comentário
Compartilhar em outros sites

Amigo Andre,

é esse mesmo o principio, ao que entendi voce ira receber esse valor pela serial e passar para o controle do ciclo ativo não é? então se for isso so não esqueça de manter os bits 5 e 4 do registrador CCP1CON ssetados, ja que teu PWM so vai funcionar em 8 bits não é necessarios usar esses 2 bits!

abs.

Link para o comentário
Compartilhar em outros sites

Muito obrigado, você tem ajudado muito...

Estou tentando gravar meu primeiro programa(efeito com leds) , mas não táh dando certo!!

(jdm programmer + ic-prog + mplab ide)

não sai da tela de "programando código" sem começar a carregar!!

E quanto a transmissão:é só carregar o valor desejado no txreg que a transmissão tem inicio??

E na recepção é só ler o conteudo do rcreg??

Link para o comentário
Compartilhar em outros sites

Olá galera, olha tenho mais duvidas:


set_timer0(131+get_timer0());

1-Eu li o datasheet mas não consegui entender a função do numero 131. Qual a função dele?


setup_timer_0(RTCC_INTRNAL|RTCC_DIV_64);

2-Qual a função do RTCC_DIV_64? Como faço a conta pra saber qual valor devo usar nessa função?

olhei um video que usava o timer0, com esse programa, mas o dono do video simulou no Proteus e ele só ponhou o LED na simulação sem nenhum tipo de interrupção em porta alguma.

3-Esse programa vai ler mesmo uma onda quadrada de 100ms?

4-Em qual porta do PIC esta o Timer0?

Obrigado!!!!!

poxa ninguem sabe?

Pow galera ajuda ai!!!!

Link para o comentário
Compartilhar em outros sites

[cote]1-Eu li o datasheet mas não consegui entender a função do numero 131. Qual a função dele? [/cote]

em qual datasheet você leu isso?

você já estudou C para PIC? conhece o hardware interno do PIC e sabe como funciona o Timer0?

Por favor, não tome minhas perguntas como ofensivas, só estou tentando entender o seu problema.

Link para o comentário
Compartilhar em outros sites

Vou dizer uma coisa, a todos os programadores iniciantes com PIC ou qualquer outro microcontrolador, nao adiante simplesmente sair estudando programação sem sequer saber o que tem dentro do microcontrolador!, falo isso não pra constrager ninguem, o caso é nos aqui do forum (uns com mais e outros com menos experiencia) estamos sempre aqui pra ajudar, porém tem coisas que não podemos fazer pelo nosso amigo que esta em duvida que e perder um pouco de tempo estudando o datasheet e principalmente o basico de eletronica digital, pra saber o que é um regisstrador!

O set de instruçções não são tudo a aprender em um MCU, mas o hardware tambem, recomendo mais uma vez e fortemente a todos que estão iniciando ao mundo dos microcontroladores, um apanhado geral de eletronica digital pra poder ter uma noção do que acontece "la dentro" do microcontrrolador,

Idependente de terem 14, 15 ou 50 anos, sinceramente isso pra mim não é desculpa pois comecei a brincar com eletronica aos 10! , na época que PIC sso tinhamos aqueles programaveis uma unica vez! ou seja software errado pronto! perdia o MCU!

então peço a todos um pouco de consciencia, e esforço , pois o que depender de mim e dos amigos do forum aqui estaremos sempre dispostos a ajudar!

abraço a todos! e por favor não me interpretem mal!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Apoiado, Felipe!

Já vi uns casos aqui em que estavam programando o MC para ler um sinal analógico sem o micro tem um ADC... ou seja, estavam criando um programa sem mesmo consultar os perifericos do MCU no datasheet...

Numa boa escola, só se inicia a programação depois de estudar todo o hardware... e isso pode levar meses ou até anos. Mas não adianta ter pressa.

Link para o comentário
Compartilhar em outros sites

Já vi uns casos aqui em que estavam programando o MC para ler um sinal analógico sem o micro tem um ADC... ou seja, estavam criando um programa sem mesmo consultar os perifericos do MCU no datasheet...

Pois é soschip Ja vi muita coisa parecida também, na epoca em que estava no técnico muitas vezes eu via e ouvia, "quando esse professor vai entrar na programação", tem muito "programador" que mal sabe pra que serve o cristal externo de um MCU, a unica coisa pra ele é que "Ah não funciona sem aquilo". Apoio a iniciativa de estudar por conta propria mesmo por que o proprio curso técnico ou nivel superior vão te ensinar o básico, a otimização as boas praticas de desenvolvimento de software e hardware, voce so pega estudando e fazendo especialização, mas é isso que falta a muitos paciência.

Muitos são os casos do cara que não consegue acender um Led, mas pensa , "ah foi erro nessa linha de codigo" e ja passa pra fazer efeitos com varios leds!

poxa errou? não funciona? não sabe por que não funciona, busque a origem do teu erro, o conceito mais básico que voce ignorou ou nem saiba da existencia, depois disso ai parta pra tirar duvidas de cunho avançado!

novamente não me entendam mal!

abs.

Link para o comentário
Compartilhar em outros sites

Obrigado Felipe_eletronic e soschip vou estudar bastante e prometo que sou vou postar alguma duvida sobre codigos quando souber TUDO sobre hardware dos PICs!

Desculpe a ansiedade de querer programar sem saber nem um pouco do hardware dos PICs. Obrigado pelas dicas!

E se alguem de vocês tiverem alguma apostila ou alguma dica de onde estudar para aprender melhor postem ai também.

Obrigado!!!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Calma, Gustavo... não precisa estudar todo o hardware de uma vez.

Basta estudar as partes envolvidas em cada projeto/programa.

Se vai fazer um pisca-pisca, por exemplo, então estude as partes que estarão envolvidas neste projeto.

Procure fazer o mesmo programa de várias formas. Uma usando TIMER, outra usando DELAYs, etc... é aí que entra a sua criatividade, pois existem inúmeras formas de se obter o resultado desejado.

É claro que neste exemplo você já deve estudar sobre os leds e como alimentá-lo corretamente.

Eu demorei quase 3 meses para chegar ao resultado deste vídeo abaixo, mas estudei cada componente exaustivamente, desde os filtros digitais de espectro de áudio, até todas as temporizações necessárias para que o olho humano não percebesse as conversões AD nos LEDs.

Ligue o áudio do seu PC para entender os efeitos.

.

Link para o comentário
Compartilhar em outros sites

Caramba soschip muito legal! Mas acho que vou ter que aprender mais sobre eletronica antes de programar microcontroladores. Eu desenvolvi até hoje uns 2 projetos que funcionaram.

Acho que a ansiedade tomou conta de mim pelo fato de inumeros projetos legais que se da pra fazer com microcontroladores. Por enquanto vou montando projetos simples e estudando o hardware dos microcontroladores, vou seguir suas dicas de montar projetos simples de varias maneiras.

Obrigado!!!

ahh galera não deixem de postar programas, porque tem pessoas que podem utilizar esses programas.

Até mais.

Link para o comentário
Compartilhar em outros sites

Caramba Felipe não tinha pensado nisso.

Agora com vocês me ajudando até me animei a estudar sobre os microscontroladores.

Nossa agora me animei mais ainda achei um microcontrolador aqui em casa M3721OM3-709SP vou pesquisar e ver se ele é regravavel as vezes posso usar ele no meu primeiro projeto com micros, mas acho q ele não deve ser porque tirei ele de uma TV.

Obrigado!!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sim, ele é gravável, mas não é regravável.

http://www.datasheetcatalog.org/datasheets/1150/445087_DS.pdf

Estes MCUs da Missubishi saem gravados de fábrica (própria mitsubishi) por máscara em ROM (Read Only Memory ou Memória apenas de leitura )e nem existe um gravador comercial para os mesmos. São muito usados em aparelhos comerciais, como aparelhos de som, TVs, etc.

Geralmente só são fornecidos para as fabricas dos aparelhos que os usam, já com o respectivo programa que é identificado pelo final: Ex: M3721OM3-709SP

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!