Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
http://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br
.
Menu de navegação


Clique nas imagens abaixo para acessar os fóruns desejados.

Fóruns:





---------------------------

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

================

Clique nos banners:




================

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» Módulo Booster BA4610D só fica em proteçao
Hoje à(s) 01:50 por LEONARDO MACHADO

» Mini system LG cm4320 não liga
Ontem à(s) 23:45 por Raimundo José santos

» tv toshiba ccp 3400 chassi u9
Ontem à(s) 23:24 por saitam

» Mini system Sony hcd ex8br dando protect(proteção)
Ontem à(s) 20:24 por Eduardo Toda

» tv de tubo 29cc9rl, chassi cw62a
Ontem à(s) 19:00 por Mauricio0

» Fonte automotiva Usina Spark
Ontem à(s) 12:01 por Leandrotgcrew

» [Resolvido] TV CCE HPS 2171 FS - NÃO LIGA
Ontem à(s) 09:07 por Nill

» Dvd automotivo PIONNER-avh 1480-Apenas emitindo bips.
Ontem à(s) 09:06 por Nill

» RECEPTOR TELSAT TS 2000 SEM IMAGEM E SOM
Sab 16 Dez 2017, 16:07 por Nill

» mini system sony gtr888 liga e entra em protect
Sab 16 Dez 2017, 11:24 por tomate

» TV LG RP29CC26 imagem escura screen no maximo
Sab 16 Dez 2017, 09:43 por NiemeyerD

» RECEPTOR ELSYS 2.0 NÃO LIGA
Sab 16 Dez 2017, 09:21 por joaquimrosadesouza

» Receptor Elsys ETRS29 Não Liga
Sab 16 Dez 2017, 09:16 por joaquimrosadesouza

» TV Semp 2070E, cor azul predominando!
Sab 16 Dez 2017, 09:01 por MARIO Y. SEGAWA

» Multimetro SANWA N-501 Voltagem das pilhas (?)
Sex 15 Dez 2017, 17:57 por tielson

»  MICROFONE SEM FIO KARSECT kru-302 UHF com prolema no AF
Sex 15 Dez 2017, 17:43 por jondas gonçalves

» Reativar tudo de imagem preciso ajuda
Sex 15 Dez 2017, 17:05 por NiemeyerD

» TV philips 32PFL4007D o controle funciona por alguns segundo e trava
Sex 15 Dez 2017, 14:29 por aramosp

» playstation 2 scph79001 nao le apos t-roca desbloqueador
Sex 15 Dez 2017, 14:26 por Nill

»  Receptor Century supercolor JL3 aquece muito e some os canais
Sex 15 Dez 2017, 09:08 por Nill

» HT htb5570d
Sex 15 Dez 2017, 08:24 por Nill

»  MicroOndas Electrolux MTD 30 que as teclas inico e cancela nao funcionam..
Qui 14 Dez 2017, 23:46 por edson martins

» APARELHO SONY HCD GTX888 ACENDE O STANDBY NAO LIGA
Qui 14 Dez 2017, 14:42 por andonizete

» Tv gradiente 2925 nao liga
Qui 14 Dez 2017, 12:52 por Paranista

» home philips hts3365x/78
Qui 14 Dez 2017, 11:33 por nicolau.monteiro

» Som Philips FWM-663-55 Não liga
Qua 13 Dez 2017, 18:15 por alros

» tv sony 29 modelo KV-29FS140 com imagem avermelhada opaca
Qua 13 Dez 2017, 12:07 por Naldo Oliveira

» tv lg 50pa4500 não liga
Qua 13 Dez 2017, 12:01 por Naldo Oliveira

» Som sony MHC-EC55 desarmando quando aumenta o volume
Qua 13 Dez 2017, 11:56 por Naldo Oliveira

» tv cineral tc 1470 em standbay
Qua 13 Dez 2017, 11:54 por Naldo Oliveira

Quem está conectado
41 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 39 Visitantes :: 2 Motores de busca

ROBERTO CARLOS, Sweettooth

O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41

DUVIDAS com TMR0

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

DUVIDAS com TMR0

Mensagem por antgodoy em Sex 19 Maio 2017, 10:38

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
avatar
antgodoy
NOVATO
NOVATO

DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 10 anos
Sexo : Masculino
Número de Mensagens : 2
Idade : 59
Cidade/Estado: : Rio Claro SP
Data de inscrição : 28/11/2016

Voltar ao Topo Ir em baixo

Re: DUVIDAS com TMR0

Mensagem por nagkiller em Sab 20 Maio 2017, 00:14

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:

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:
[Você precisa estar registrado e conectado para ver este link.]
[Você precisa estar registrado e conectado para ver este link.]
[Você precisa estar registrado e conectado para ver este link.]

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!!!
avatar
nagkiller
Moderador do fórum
Moderador do fórum

DESCRIÇÃO: : Técnico em Eletrônica e informática
TEMPO DE EXPERIÊNCIA : Desde 1990
Sexo : Masculino
Número de Mensagens : 1684
Idade : 37
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

Re: DUVIDAS com TMR0

Mensagem por antgodoy em Sab 20 Maio 2017, 06:27

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
avatar
antgodoy
NOVATO
NOVATO

DESCRIÇÃO: : Técnico em Eletrônica
TEMPO DE EXPERIÊNCIA : 10 anos
Sexo : Masculino
Número de Mensagens : 2
Idade : 59
Cidade/Estado: : Rio Claro SP
Data de inscrição : 28/11/2016

Voltar ao Topo Ir em baixo

Re: DUVIDAS com TMR0

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum