Go Down

Topic: Alguém com paciência, tempo e hardware para testar um RTC? (Read 1 time) previous topic - next topic

bubulindo

Viva,

Estou aqui a trabalhar numa biblioteca para criar um RTC com o chip dos Arduinos e um cristal de 32768 Hz. :) Já o tenho a funcionar, mas para testar o código preciso de mais tempo... que é coisa que me escapa ultimamente. :\

Para usar a biblioteca será preciso um ATmega328, 168 ou ATmega16, 32, 644, 1284. Também compila para o mega2560, mas os "idiotas" do Arduino não deixaram os pinos disponíveis para ligar o cristal na placa oficial, logo placas baseadas no Arduino Mega não podem usar isto. Quem tiver placas como as da SeeedStudio, pode usar a biblioteca. :)

Até agora o máximo que consegui "testar" foram umas 6 horas e não obtive diferenças que se notassem a olho nú, provando então que o código que conta as horas não está completamente errado. Para usar isto nos ATmega168 ou 328, temos de desactivar o cristal externo de 16MHz e usar o cristal interno, ainda não vi exactamente como fazer isso com a IDE do Arduino, mas é possível de fazer. Depois liga-se o cristal de 32kHz nos pinos do cristal de 16MHz e isto funciona.

Quem quiser testar isto durante alguns dias ou mais, que diga e eu tento colocar isto de forma a poder ser usado no chip que tiverem. Devido ao que disse anteriormente, usar isto nas placas do Arduino não é muito aconselhável pois vão ter de dessoldar cristais e soldar outros e as placas além do Duemilanove não usam cristal tornando isto impossível. :(

Aqui está uma foto dum ATmega168 a rolar o RTC.




Até agora isto conta horas e data e dá a possibilidade de gerar um pulso de segundo a segundo em dois dos pinos do ATmega (puramente por hardware).
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Antes de mais parabéns pelo desenvolvimento.
Quote
Para usar isto nos ATmega168 ou 328, temos de desactivar o cristal externo de 16MHz e usar o cristal interno, ainda não vi exactamente como fazer isso com a IDE do Arduino, mas é possível de fazer

Para fazer isto tens de mexer nos bit fuses podes usar este online calculator para isso.http://www.engbedded.com/fusecalc
No forum do Nick Gammon tambem tem um bom tuturial para isso.
Pelo que percebi o que tu concebeste foi ligar o oscilador interno do microcontrolador para o seu proprio clock e usar a entrada desactivada por consequência para la ligar o cristal de 32768 Hz  fazendo um contador interno de 16 bits para dar 1 Segundo e assim o RTC?
Hoje chegou o meu Saleae Logic, nao tenho nenhum cristal de 32768 mas certamente poderei arranjar um e teria todo o gosto em testar isso no logic.
Posta a biblioteca que faço uns prints assim que arranjar o cristal

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

viva, os fuses eu troquei com um avrfuses para mac. isso é simples.
Existe um ficheiro com isso no site do arduino para ser possível de testart com a IDE.

o relogio é feito  com o timer 2 em modo assincrono. Ou seja, um timer de 8 bits, com um prescaler de 128, sempre que existe um overflow passaram-se 32768 pulsos... exactamente o que esse cristal dá.

Se usar um modo que permita usar o output compare, posso ter os pinos OC2A e B, a trocar de estado de segundo a segundo. Que é o que tenho aqui.

Vou meter as funções numa classe e meto por aqui um link. Eu vou ver se ligo um DS1307 para sincronizar e testar entre ambos, mas quanto mais gente experimentar, melhor.

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Estou aqui a pensar nos efeitos colaterais que tem em usar  o oscilador interno.Iremos perder a funçao milli()(deixa de contar corretamente) e provavelmente a Uart tambem necessitará de ser ajustada em termos de baud rate correcto?
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

Isso é feito com as definições da MakeFile (ou neste caso, com as definições da placa a usar). Se escolheres a placa que usa os 8MHz, duvido que isso parta o millis() e a UART porque esses valores são calculados com base no relógio.

Como isto usa o Timer2, também não é por isso que estraga o millis. :)

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up