Últimos assuntos
Quem está conectado?
Há 415 usuários online :: 2 registrados, 0 invisíveis e 413 visitantes :: 2 motores de busca#finofliperama, adamoa1
O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Tópicos semelhantes
Anuncios
Nenhum anúncio
DUVIDAS com TMR0
2 participantes
Página 1 de 1
DUVIDAS com TMR0
Pessoal,tenho estudado muito,mas infelizmente não consigo entender o carregamento do TMR0=39.
Gostaria muito que me ajudassem com isto.
Segue um pequeno bloco indicando isto:
if (!START && !Get_Input){
debounce();
switch (Timer_LIGA){
case 0:play_sound();
Timer_LIGA = 1;;
OPTION_REG = 0x07; //prescaler(1:256)is assigned to the timer TMR0
TMR0 =39 ; //timer to counts from 39 to 255
INTCON = 0xA0; // Enable interrupt TMR0 and GLOBAL interrupts
INTCON.T0IF = 0;
Mode_Select = 0;
Blink = 0;
Disp_Time();
break;
A duvida é :
Contara 39 vezes o 255
Sendo que estou usando cristal de 4 Mhz e esta funcionando corretamente.Só que estou alterando para trabalhar com 8 Mhz e estou apanhando para configura-los.
Agradeço muito pela explicação do TMR0 referente ao 39
Abraço a todos
Gostaria muito que me ajudassem com isto.
Segue um pequeno bloco indicando isto:
if (!START && !Get_Input){
debounce();
switch (Timer_LIGA){
case 0:play_sound();
Timer_LIGA = 1;;
OPTION_REG = 0x07; //prescaler(1:256)is assigned to the timer TMR0
TMR0 =39 ; //timer to counts from 39 to 255
INTCON = 0xA0; // Enable interrupt TMR0 and GLOBAL interrupts
INTCON.T0IF = 0;
Mode_Select = 0;
Blink = 0;
Disp_Time();
break;
A duvida é :
Contara 39 vezes o 255
Sendo que estou usando cristal de 4 Mhz e esta funcionando corretamente.Só que estou alterando para trabalhar com 8 Mhz e estou apanhando para configura-los.
Agradeço muito pela explicação do TMR0 referente ao 39
Abraço a todos
antgodoy- NOVATO
- DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 10 anos
Sexo :
Número de Mensagens : 2
Idade : 66
Cidade/Estado: : Rio Claro SP
Data de inscrição : 28/11/2016
Re: DUVIDAS com TMR0
Na verdade ele conta de 39 até 255 e não conta de 0 - 39 255 vezes ou de 0 - 255 39 vezes!!!
Ou seja, ele vai contando 40,41,42,...,254,255 (valor máximo, por ser de microcontrolador de 8bits)... neste momento há um estouro (Overflow) no TIMER0 ((T0IF) (ele fica em nível logico 1, é necessário realizar a limpeza desse registrador por software (T0IF = 0;) e atribuir novamente o valor de TMR0 (TMR0 = 39;) para continuar a contagem)). Se não fizer estes passos acima, ele continuará contando 0, 1, 2, 3, 4...
Existe um cálculo em que se utiliza dados de prescaler.
Um PIC utiliza um divisor por 4 em seu ciclo de máquina... sendo assim, ele rodando a 4MHz, estará rodando a exatos 1 / ( Frequência do XTAL / 4) = 1/4000000/4 = 0.000001 = 1us = 1 microssegundo, ou seja, cada ciclo de máquina equivale a 1us.
O prescaler divide o ciclo de maquina por um valor fixo (veja os valores do prescaler de seu PIC no datasheet), com isso há uma demora na contagem, seria um divisor de frequência. Em OPTION_REG há os bits responsáveis pelo precaler (PS2, PS1 e PS0). O valor do prescaler pode ser, de acordo com o microcontrolador, 1:1, 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, 1:128 e 1:256.
Exemplo com prescaler de 1:256 e 4MHz de frequência:
Use a conta para saber o ciclo de maquina 1/(4000000/4) = 0.000001 = 1us
Para calcular o valor do periodo de Timer0 (Overflow) = 1/(4000000/4/256) = 0,000256 = 256us
Então dividindo 1/(4000000/4)/0,000256 = 0,0039063s ou ± 4ms
Então TIMER0 recebe o valor de 256-39 = 217
0,000256*217= 0,055552s = 56ms.
Em seu exemplo A cada ±56ms há um evento de estouro do TIMER0!!!
Exemplo em XC8 PIC16F629 @ 4MHz:
Com 8MHz, já não será possível realizar o cálculo como acima, pois as frequências e tempos são diferentes, o TIMER0 máximo será de 0,032768s (0.000128*256). No caso terá que inserir uma variável que calcule a metade de 56ms e que conte duas vezes essa metade, por exemplo.
Fontes:
http://karadev.net/uroci/filespdf/pictimer0part1.pdf
http://karadev.net/uroci/filespdf/pictimer0part2.pdf
http://eng-serve.com/pic/pic_timer.html
Flw...
Ou seja, ele vai contando 40,41,42,...,254,255 (valor máximo, por ser de microcontrolador de 8bits)... neste momento há um estouro (Overflow) no TIMER0 ((T0IF) (ele fica em nível logico 1, é necessário realizar a limpeza desse registrador por software (T0IF = 0;) e atribuir novamente o valor de TMR0 (TMR0 = 39;) para continuar a contagem)). Se não fizer estes passos acima, ele continuará contando 0, 1, 2, 3, 4...
Existe um cálculo em que se utiliza dados de prescaler.
Um PIC utiliza um divisor por 4 em seu ciclo de máquina... sendo assim, ele rodando a 4MHz, estará rodando a exatos 1 / ( Frequência do XTAL / 4) = 1/4000000/4 = 0.000001 = 1us = 1 microssegundo, ou seja, cada ciclo de máquina equivale a 1us.
O prescaler divide o ciclo de maquina por um valor fixo (veja os valores do prescaler de seu PIC no datasheet), com isso há uma demora na contagem, seria um divisor de frequência. Em OPTION_REG há os bits responsáveis pelo precaler (PS2, PS1 e PS0). O valor do prescaler pode ser, de acordo com o microcontrolador, 1:1, 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, 1:128 e 1:256.
Exemplo com prescaler de 1:256 e 4MHz de frequência:
Use a conta para saber o ciclo de maquina 1/(4000000/4) = 0.000001 = 1us
Para calcular o valor do periodo de Timer0 (Overflow) = 1/(4000000/4/256) = 0,000256 = 256us
Então dividindo 1/(4000000/4)/0,000256 = 0,0039063s ou ± 4ms
Então TIMER0 recebe o valor de 256-39 = 217
0,000256*217= 0,055552s = 56ms.
Em seu exemplo A cada ±56ms há um evento de estouro do TIMER0!!!
Exemplo em XC8 PIC16F629 @ 4MHz:
- Código:
/*
* File: mainc.c
* Author: Clodoaldo Souza
*
* Created on 20 de Maio de 2017, 00:14
*/
#include <xc.h>
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
void interrupt
timer0_isr(void) // Serviço de interrupção do timer0
{
T0IF = 0; // limpando a flag de estouro...
TMR0 = 39; // TIMER0 recebe 39
GPIO0 = !GPIO0; // Inverte estado do pino
}
void main(void)
{
OPTION_REG = 0b0111; // prescaler de 256
T0CS = 0; // seleciona clock interno
T0IE = 1; // habilita as interrupções de timer0
T0SE = 0;
GIE = 1; // habilita as interrupções globais
TMR0 = 39; // Timer 0 recebe valor 39
OSCCAL = 0x3ff; // Calibracao oscilador interno
GPIO = 0x00; // Limpa os bits GPIO
CMCON = 0x07;
TRISIO = 0b00001000; // GP3 SEMPRE ENTRADA!!!
for (;;)
{
// Aqui faz-se algo em loop
}
return;
}
Com 8MHz, já não será possível realizar o cálculo como acima, pois as frequências e tempos são diferentes, o TIMER0 máximo será de 0,032768s (0.000128*256). No caso terá que inserir uma variável que calcule a metade de 56ms e que conte duas vezes essa metade, por exemplo.
Fontes:
http://karadev.net/uroci/filespdf/pictimer0part1.pdf
http://karadev.net/uroci/filespdf/pictimer0part2.pdf
http://eng-serve.com/pic/pic_timer.html
Flw...
Última edição por nagkiller em Dom 21 maio 2017, 11:49, editado 1 vez(es)
_________________
No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
nagkiller- Moderador do fórum
- DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo :
Número de Mensagens : 2997
Idade : 44
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011
Re: DUVIDAS com TMR0
Valeu nagkiller
Agora eu entendi de onde saiu este 39.
Nossa eu fiquei 2 semana pesquisando isto,encontrava mas não entendia.
Isto tudo,porque eu fabriquei uma PCB e compilei no mikroc,gravei o PIC 16F628A ,ficou perfeito,só que o projeto é de 4Mhz e na hora de finalizar eu não tinha o cristal e acabei montando com 8Mhz.
Só que 1 minuto esta executando em 0,5 minuto,claro que é devido ao dobro da frequência.
Vou alterar o programa para corrigir e você me deu a dica onde pesquisar.
O meu mais sincero OBRIGADO
Agora eu entendi de onde saiu este 39.
Nossa eu fiquei 2 semana pesquisando isto,encontrava mas não entendia.
Isto tudo,porque eu fabriquei uma PCB e compilei no mikroc,gravei o PIC 16F628A ,ficou perfeito,só que o projeto é de 4Mhz e na hora de finalizar eu não tinha o cristal e acabei montando com 8Mhz.
Só que 1 minuto esta executando em 0,5 minuto,claro que é devido ao dobro da frequência.
Vou alterar o programa para corrigir e você me deu a dica onde pesquisar.
O meu mais sincero OBRIGADO
antgodoy- NOVATO
- DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 10 anos
Sexo :
Número de Mensagens : 2
Idade : 66
Cidade/Estado: : Rio Claro SP
Data de inscrição : 28/11/2016
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Hoje à(s) 16:02 por SEBCICM
» PS2 Slim 90k testar entradas do memory card
Hoje à(s) 11:51 por gamemaniaco
» Procuro a placa lateral do sistema de som Sony MHC-GTX88 e Ci BD3451KS
Hoje à(s) 10:16 por Silas Silva Nogueira
» Caixa de Som Amplificada CSR 4000A Som Distorcido e Pouca Potência!!!
Hoje à(s) 08:18 por jailton da silva santos
» Tv lcd,marca Aoc, modelo- LE 39D0330 -defeito,só liga depois de um tempo(quando aquece)
Hoje à(s) 08:06 por jailton da silva santos
» fonte taramps tef 60 amperes ci estourado
Ontem à(s) 19:27 por antonio carlos bitti
» [Resolvido] TV PLASMA SAMSUNG PL51F4900AG Não liga , led stand by piscando ( RESOLVIDO )
Ontem à(s) 13:28 por Paranista
» TV LG MODELO 42LB5600 ACENDE O LED MAS NÃO LIGA
Qua 20 Nov 2024, 18:27 por Tales g
» TV STI DL3270 A W , sem audio
Qua 20 Nov 2024, 15:02 por valdircp
» Compro placa principal da LG 42lh45ed ou 42lh40ed
Seg 18 Nov 2024, 11:22 por Paulo Costa II
» Som Philips fw c 505 Ajuda entender o esquema
Sáb 16 Nov 2024, 10:03 por nagkiller
» (Resolvido) AIWA NSXF959 SEM SOM MÉDIOS AGUDOS
Sáb 16 Nov 2024, 00:31 por ZACREAL
» como descartar TRC
Sex 15 Nov 2024, 08:32 por jailton da silva santos
» cliente que não busca os aparelhos consertados, o que fazer
Sex 15 Nov 2024, 00:59 por MARIO Y. SEGAWA
» compro placa pricipal tv lg 50pb560
Qua 13 Nov 2024, 11:11 por Eletronica Manoel
» Modulo Taramps t800.1 com os resistores r32 e r5 torrados
Seg 11 Nov 2024, 10:41 por prisma eletronica
» Akai AA-A35 Seletor de Tensão
Seg 11 Nov 2024, 08:34 por city2010
» [RESOLVIDO] TV LCD UN50FH5303G Componentes danificados
Seg 11 Nov 2024, 00:54 por nagkiller
» TV PANASONIC TC- 32A400B Imagem travando
Dom 10 Nov 2024, 16:01 por ramon figueiredo
» ATENÇÃO de todos os usuários da 2002! (Nova regra).
Dom 10 Nov 2024, 12:00 por robsonseixas
» Microondas MEF-41 Eletrolux, não acende luz da porta quando abre, e quando fecha não liga
Sex 08 Nov 2024, 22:30 por joaquimrosadesouza
» Caixa som Ciclotron mult 500 Preciso do esquema
Sex 08 Nov 2024, 21:34 por prisma eletronica
» Pessoal tenho placa barato.
Sex 08 Nov 2024, 20:47 por francisco carlos de jesus
» PLACA PWM dos Módulos Roadstar RS-10000D Earthkaque e RS-6800D Agressive SPL
Sex 08 Nov 2024, 19:23 por NITRO
» Projetor LG BS 275 Liga e logo da mensagem de cooler bloqueado
Sex 08 Nov 2024, 13:05 por Paranista
» Cd Player Carrossel Sony - Não fecha a gaveta nem gira o carrossel
Qui 07 Nov 2024, 14:15 por Denisson Ventura
» OU O FÓRUM ACABOU OU NINGUÉM PARTICIPA DO FÓRUM MAIS.
Qui 07 Nov 2024, 12:09 por Paranista
» TV PHILCO TP1452N TELA ESCURA
Qua 06 Nov 2024, 17:36 por jailton da silva santos
» TV LED LE3256(A)w dados da flash Resolvido
Qua 06 Nov 2024, 12:12 por everardes
» Procuro esquema elétrico da fonte TV lg 42lb5800 EAX65423701(2.1)
Seg 04 Nov 2024, 12:22 por joaquimrosadesouza