Ir ao conteúdo

Posts recomendados

Postado

Olá

 

Sou novo por aqui na participação, mas acompanho há um bom tempo o grande auxilio que é este fórum.

Estou entrando no mundo atmel e começando com o ATMEGA16 e durante as pesquisas li no datasheet a possibilidade de usar o RTC interno mas não encontrei nada que me esclarecesse de como operar o Timer/Counter2 responsável pelo RTC. E também não vi como tratar as informações para que seja útil o suficiente para não usar o DS1307.

Aguém pode me ajudar ?

 

  • Membro VIP
Postado

OK, mas acho que está confundindo as coisas.

Se pretende usar o Timer2 como Real Time Clock, esqueça. Ele é Real Time Counter.

m16.jpg.fed0b25ae76797453436f979ba2db691

Quer dizer que tem que implementar a rotina de relógio por software. Mas isto qualquer um dos contadores faz, basta gerar interrupções, digamos a cada 10mS e fazer os contadores de centésimos, décimos, segundos, ...Etc.

A Vantagem do DS1307 é que pode colocar uma bateria de 3V, tipo botão, e esquecer de atualizações de horários... a não ser o de verão.

 

Postado

Compreendo,  mas pensei numa base de tempo precisa  já que poderia colocar um cristal de 32768khz nos pinos 28 e 29 e tratar nao sei como para obter essa base de tempo precisa em segundos sem o ds1307. É  possivel? 

Postado

Sim ! isso não seria problema já que é só base de tempo com precisão! nada de data nem hora!

Sabe como posso fazer isso em C ?  Pois não faço ideia de como fazer isso no software para esse fim!

  • Membro VIP
Postado

O problema é que só trabalho com o BascomAVR. Poucas linhas resolveria.

Mas só como base de tempo de precisão pode usar o próprio cristal do sistema, que também é de precisão.

Se quiser ver as linhas em Basic, depois posso fazer.

Postado

Gostaria muito de ver essas linhas em basic,  pois conheço um pouco.  Acho q poderei  entender em basic. 

Fico muito grato e no aguardo. 

Se ajuda,  costumo trabalhar com  cristal de 12 nos projetos . 

  • Membro VIP
Postado

Sugiro cristal de 16MHz, assim usando contador com prescaler de 16 teremos incremento de 1uS, aí podemos carregar o timer co 65536-1000 = 1 interrupção por overflow a cada 1mS e fazer a contagem de tempos exatas..

É só um exemplo, porque também pode-se fazer bases de tempos de uS.

Só posso fazer um exemplo de código + tarde, Aguarde.

  • Membro VIP
Postado

Com (12) horas, minutos e segundos, idealizo algo minimalista como...

-unsigned int segundo incrementado numa interrupção de ... 1 segundo: segundo++; if (segundo>12*3600) segundo=0;

-unsigned char minuto, hora algo como hora=segundo%3600; minuto = segundo%60;

24h(tente com unsigned long segundo), dia, mes, ano, dia da semana ... o buraco é + em baixo. Aguarde ajuda de gente grande...

O atmega pode consumir pouco e menos ainda em 32768Hz. Ser for APENAS rtc, sugiro-o

 

  • Membro VIP
Postado
Em 16/01/2016 às 13:17, Ricardo_pontes disse:

Olá

 

Sou novo por aqui na participação, mas acompanho há um bom tempo o grande auxilio que é este fórum.

Estou entrando no mundo atmel e começando com o ATMEGA16 e durante as pesquisas li no datasheet a possibilidade de usar o RTC interno mas não encontrei nada que me esclarecesse de como operar o Timer/Counter2 responsável pelo RTC. ""E também não vi como tratar as informações para que seja útil o suficiente para não usar o DS1307.

Alguém pode me ajudar ?

 

ôpa... só pude retornar agora.

Pode me explicar a frase acima?

 

 

Em 16/01/2016 às 20:35, Ricardo_pontes disse:

Sim ! isso não seria problema já que é só base de tempo com precisão! nada de data nem hora!

 

Qual seria um tempo...

Um pulso?

 

 

  • Membro VIP
Postado

@Ricardo_pontes

Bom dia, Ricardo.

Não me respondeu a pergunta do meu último post.

Um pulso? Uma frequência qualquer em algum pino?

Como não deu pra formatar exatamente como é na IDE bascom, pode abrir arquivo .bas com:

http://www.mcselec.com/index.php?option=com_content&task=view&id=14&Itemid=103

Versão demo até 4KB de código. Basta copiar e color código abaixo.

$regfile = "m16def.dat"                                                         'micro usado
$crystal = 8000000                                                              'freq. do cristal

Config Timer1 = Timer , Prescale = 8                                            'com este valor e cristal de 8MHz, 1 incremento a cada 1uS
On Ovf1 Isr_t1 Nosave                                                           'habilita  int. T1 sem salvar registros
Enable Ovf1                                                                     'interrupção toda vez que houver "estouro" no timer 1=65536
Start Timer1

Dim Tempo As Word , Recarga As Word                                             'variáveis de 16bits
Config Portb.0 = Input                                                          'Configura portb.0 como entrada
Chave1 Alias Pinb.0 : Portb.0 = 1                                               'label "chave1"= portb.0 : Ativa pullup neste pino
Pulso Alias Portb.1                                                             'saída de um sinal de 500Hz. Se a int é de 1mS então freq.= 1/(2 x 0.001)
Config Pulso = Output
Recarga = 65536 - 1000                                                          'interrupção a cada 1mS (1000x1uS)
Config Portb.2 = Output                                                         'saída 500Hz

'rotina para pulso de 1 segundo na porta b.0  quando a chave for pressionada
Loop1:
Tempo = 0                                                                       'contador de 1000  x 1mS=1segundo
Timer1 = Recarga                                                                'já deixa iniciamente timer 1 com valor de recarga

   Do : Loop Until Chave1 = 0                                                   'aguarda chave1 ser pressionada, considerando que é NA e está ligada ao GND.
   Set Pulso
   Start Timer1                                                                 'inicia contador
   Do : Loop Until Tempo = 1000                                                 'agrarda 1000 interrupções de 1mS
   Reset Pulso
Goto Loop1
'----------------------------------------------------------------------------------------
Isr_t1:
Pushall                                                                         'salva apenas registros usados no momento da int.
Timer1 = Recarga
Incr Tempo
Toggle Portb.2                                                                  'inverte saída portb.2
Popall                                                                          'restaura registros
Return
'----------------------------------------------------------------------------------------

 

 

 

Postado

@_xyko_ Desculpe. 1 Segundo.

1 hora atrás, _xyko_ disse:

@Ricardo_pontes

Bom dia, Ricardo.

Não me respondeu a pergunta do meu último post.

Um pulso? Uma frequência qualquer em algum pino?

 

exemplo para os 2 casos:

 

 

 

@_xyko_  Fico Agradecido pela ajuda. Vou estudar essas linhas, porque entendendo elas posso fazer em C.

Obrigado pela ajuda.

Pode fechar o tópico

 

 

1 hora atrás, _xyko_ disse:

@Ricardo_pontes

Bom dia, Ricardo.

Não me respondeu a pergunta do meu último post.

Um pulso? Uma frequência qualquer em algum pino?

 

exemplo para os 2 casos:

 

 

 

  • Membro VIP
Postado
9 horas atrás, Ricardo_pontes disse:

@_xyko_ Desculpe. 1 Segundo.

 

@_xyko_  Fico Agradecido pela ajuda. Vou estudar essas linhas, porque entendendo elas posso fazer em C.

Obrigado pela ajuda.

Pode fechar o tópico

 

 

 

OK. Precisando só pedir pra reabrir.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!