Pages: [1]   Go Down
Author Topic: Alguém com paciência, tempo e hardware para testar um RTC?  (Read 1581 times)
0 Members and 1 Guest are viewing this topic.
'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Viva,

Estou aqui a trabalhar numa biblioteca para criar um RTC com o chip dos Arduinos e um cristal de 32768 Hz. smiley 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. smiley

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

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

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

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

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

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

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


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensando um pouco mais... pode dizer-se que o millis() não será tão preciso como é actualmente porque o oscilador interno é uma malha RC e o cristal externo é bastante preciso. Mas o código está preparado para usar um clock de 8MHz. Podes ver isso no ficheiro wiring.c.

A UART... bom, toda a gente fala disso e dão a ideia que a UART é impossível de usar com o cristal interno, mas a realidade que experimentei agora com este micro durante horas agora e há uns 10 anos atrás com o atmega8 é que a UART funciona de forma idêntica. Claro que, as frequências mais altas são piores (ou impossíveis) de atingir, mas até 19200 nunca vi grandes problemas.

Referências para isto:

http://www.atmel.com/images/doc1259.pdf
http://www.atmel.com/Images/doc8161.pdf   página 155.


« Last Edit: November 27, 2012, 09:11:59 am by bubulindo » Logged

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

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok...

Notei alguns problemas na biblioteca e coisas que se podem melhorar (meti uma descricão no ficheiro .cpp) mas vai ter de esperar um pouco porque infelizmente vou ter trabalho nos pröximos tempos. smiley-sad

Quem quiser tirar os ficheiros é fazer download daqui. A documentacão é... inexistente, pelo que se tiverem dúvidas acerca de como usar o código podem perguntar aqui.
https://github.com/bubulindo/RTC

Logged

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

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estive a ver o teu codigo e assim que possa vou testar.Para ja gostei de ver o código está muito bem escrito e comentado. É bom olhar para código human readable que por vezes alguns programadores gostam de baralhar   smiley-wink
Logged

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


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Um dos bugzinhos já foi resolvido.

Falta adicionar e tirar outras cenas. Mas isso vai ter de espera um pouco agora. smiley-sad
Logged

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

Pages: [1]   Go Up
Jump to: