• Welcome to LusoRobótica - Robótica em Português.
 

Real Time Clock DS1307 (RTC) + Arduino

Started by tr3s, 13 de March de 2009, 01:06

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

TigPT

#45
Existe um problema a nível de servidor na gestão dos headers dos ficheiros desde a migração para smf 2.0 todos os ficheiros anteriores a esta migração, após o download do ficheiro, a extrair dá erro
"? ? ? - the file header is corrupt"

Estamos a tentar resolver mas não é trivial. Peço desculpa e agradeço a compressão.

microbyte


TigPT

Também estou em Safari no OS X e por exemplo no anexo da do primeiro post deste tópico o UnrarX dá-me erro.

microbyte

Tens razão...
Não tinha experimentado a extrair. ;) Peço desculpa pela confusão.

Baltasar

Boas, estou com um problema no meu RTC, não sei se tenho a livraria DS1307 correcta e as aqui disponíveis no fórum para descarregar estão corrompidas.

Mas o problema é simplesmente sempre que faço um set ao clock passando os valores correctos, nos segundos ele depois de fazer start() começa sempre em zero, mesmo passando outro qualquer valor, isto é normal? Alguém sabe como contornar este problema?

De qualquer forma vou testar usando somente a livraria wire.h e conectar com I2C em vez da livraria especifica.

delphi

www.saborapalco.com - Companhia de Teatro Amador
www.megavaquinha.com - Uma mega aposta no euromilhões de um grupo de mega amigos

Baltasar

#51
Posso testar também, embora o código que tenha seja este e nesse caso também tenho de eliminar o stop().

void setRTC(int sec, int mins, int hr)
{
  RTC.stop();
  RTC.set(DS1307_SEC, sec);    //set the seconds
  RTC.set(DS1307_MIN, mins);     //set the minutes
  RTC.set(DS1307_HR, hr);    //set the hours
  RTC.start();
}

EDIT: Ok de facto retirando o stop() e start(), fica a funcionar, obrigado. Quer dizer que start faz tipo um reinicializarão dos segundos (repõem a zero)?
Aproveito para perguntar onde posso fazer o download da livraria DS1307 oficial e mais recente caso exista?
Mais uma vez obrigado.

Baltasar

Fui ver o conteúdo da livraria DS1307 para a função start() e realmente agora percebo porque faz o reset dos segundos a zero, fica aqui um excerto da livraria nessa mesma função para quem não sabe ou não pode ver ficar a compreender também:

void DS1307::start(void)
{
   // unset the ClockHalt bit to start the rtc
   // TODO : preserve existing seconds
    rtc_bcd[DS1307_SEC]=0;
   save();
}

::)
Sorrryyy, de facto devia logo ter ido a procura disto que tinha logo a minha resposta em vez de perguntar aqui, mas acho que assim outros tão ou mais distraídos como eu podem ver aqui o porque e a solução hehehe.   ;)


Baltasar

#53
Ok tenho mais um problema e desta vez não consigo identificar a causa nem o porque, mas o facto é que ao incluir esta livraria "DS1307.h" que parece fazer algum tipo de conflito com a "LiquidCrystal.h" deixo de ter PWM no pin 3 do Arduino ficando assim o meu projecto pendurado :( , pois como estou a usar o shield LCD com keypad somente fico com 2 possíveis pinos PWM livres o 11 e o 3, tudo bem com o 11, mas o 3 realmente fica morto, alguém sabe da solução ou porque do sucedido?

Podem testar simplesmente mesmo quem não tenha o LCD, basta usarem o demo "Fading" que vem no IDE 017 e no inicio carregarem as libs necessárias ao RTC e LCD assim:

.........................................
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // OPÇÃO 1
#include <LiquidCrystal.h> // OPÇÃO 2

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // OPÇÃO 2
.........................................
Depois mudar o pin do LED para o 3 comentando alternadamente o indicado como opção 1 ou as 2, e o LED já faz o fade, com tudo carregado não mexe sequer.

Alguém me pode confirmar isto ou ajudar neste sentido?




Baltasar

Ok solução para já é usar somente a lib Wire.h e falar com o RTC com comandos directos I2C, como por exemplo:

Wire.begin();
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(0x00);
.................................. etc. e tal...  ;)

Mas se alguém poder realmente testar como referi no post anterior seria útil para perceber se é mesmo um erro/bug como referi ou é mesmo o meu Arduino que está completamente "crazy" ?!?!?   ::)

metRo_

Em relação ao teu problema o que pode estar acontecer é uma dessas bibliotecas utilizar os timers utilizados para gerar a pwm nesse pino. Le o primeiro post deste tópico: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1232572239 ele apresenta algumas bibliotecas para gerar pwm's.

Baltasar

Sim estou a perceber o teu ponto de vista, mas vasculhei o código todo das libs que refiro e nenhuma tem qualquer referencia ou código que me leve a crer que se use algum dos 3 timers do Arduino.

No entanto vou dar uma vista de olhos melhor no link que indicas, pois pode ter alguma coisas que me ajude, embora no meu caso os sinais PWM normais do arduino servem perfeitamente pois e para controlar a intensidade de vários led's por uma porta de um FET.

tr3s

O primeiro tópico foi actualizado! Os anexos já funcionam novamente :D

Abraços a todos e desculpem pela demora :P
Tr3s
Daniel Gonçalves

arucard


vdr

Se eu quiser que o DS1307 me envie para um pino do arduino um impulso positivo a cada 12h ou 24h como o poderei fazer? Andei a olhar para o código aqui disponivel e não descortinei como faze-lo.