LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: tr3s em 13 de Março de 2009, 01:06

Título: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 13 de Março de 2009, 01:06
  Hello hello rapaziada :D!

  Pois é, estou de volta com mais um tutorial onde vos vou explicar como usar ou fazer interagir um RTC, mais propriamente o DS1307 (http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2688) da Maxim-Dallas com o Arduino! Agora já podem adicionar um relógio e dar horas no vosso projecto!

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fworld-educational-services.net%2Fcart%2Fimages%2F8pin.jpg&hash=8306124d865d1e7751d6755c72f0cee9c0768475)

  Antes de mais o que é um RTC ou Real Time Clock? Um RTC é um dispositivo que dá horas, é verdade, conta o tempo! Todos nós os temos em casa, quer seja nos relógios digitais, na motherboard dos nossos computadores, nos telemoveis, etc..
  O RTC que vou introduzir hoje é, como já disse, o DS1307 (http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2688). Este RTC comunica por i2c e tem bastantes características interessantes:


  A questão da alimentação da bateria é interessante, de certeza que todos sabem que nas motherboards dos nossos computadores temos la uma pilha, e "ah pois é" essa pilha é a que alimenta o RTC do nosso computador! Este integrado pode ser alimentado por uma fonte de energia normal como qualquer outro  integrado mas pode ainda estar a ser alimentado por uma bateria, normalmente uma pilha de 3V como as que os nossos computadores têm na motherboard (CR2032 por exemplo)! Este integrado se detectar que a fonte de alimentação não está presente comuta automaticamente para a bateria e passa a funcionar com a energia da bateria. Com uma destas pilhas totalmente carregada, o integrado matém-se a contar o tempo durante pelo menos 9 anos, "cool" não é? Ah, mas atenção, a bateria é obrigatória!
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fitp.nyu.edu%2Fphyscomp%2Fuploads%2Fbattery_coin.jpg&hash=421f36b30720fb7dd68fc95b68ffb9dd5eea7717)

  O funcionamento do RTC, muito sucitamente, é o seguinte:


  Eehe até parece simples... E é! Claro que se começarmos a ler o Datasheet do DS1307 (http://datasheets.maxim-ic.com/en/ds/DS1307.pdf) até nos assustamos com tanta informação e realmente interpretar aquilo é chato e massador! Por um lado é bom pois qualquer dúvida ou informação que queiramos saber está lá explicada, por outro lado é chato pois podiam fazer um guia mais simples do funcionamento do integrado em vez de colocarem a informação toda no mesmo documento.

  Entrando em mais promenores mas sem aprofundar muito (Ai não, queriam a papinha toda não era?! Seus malandros) como este dispositivo tem interface I²C (http://en.wikipedia.org/wiki/I%C2%B2C) não nos podemos esquecer das resistências de Pull-Up do canal! Se ainda não tiverem nenhum dispositivo i²c na vossa breadboard tem de colocar duas resistências na vossa montagem, caso contrário já têm as resistências colocadas (se não nem sei como funciona o vosso dispositivo) e então é so encaixarem lá o vosso novo integrado, o RTC!
  Para o cristal... pois é, é aqui que a "porca torce o rabo", o cristal que se usa com este RTC e com todos os outros RTC's (sim na motherboard está lá um mas nem pensem em tirá-lo para o bem da vossa "mobo"!) é um cristal com a frequência de 32.768KHz. É dificil de encontrar à venda nas lojas, pelo menos aqui em Lisboa, mas online encontra-se bastante facilmente e em casa também.... "O QUÊ EM CASA?" Ah pois é "bébés" em encontrei o meu num brinde do chinês, daqueles que fazem o que é suposto, não funcionar, mas que supostamente davam horas! Sim abri aquilo e tirei de lá o belo cristal de 32.768KHz ehehe mas também o podem encontrar em relógios digitais, alarmes etc., la dentro há sempre um destes cristais!

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg.en.china.cn%2F0%2F0%2C0%2C112%2C925%2C360%2C360%2Cd7476a64.jpg&hash=76e2d2bf15dcfa6953d0f9fb99f716df005793f3)

  Assim, com a introdução feita, vamos ver como são as ligações:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi240.photobucket.com%2Falbums%2Fff159%2Fsuper-mascarada%2Frtc-1.jpg&hash=5718d86e9daf3e9d465c9601c86f50946157cc74)

  Mais uma vez, A bateria é obrigatória e portanto o RTC não funciona sem a ter ligada! Eu aproveito o pino de 3V do Arduino!

  Em anexo deixo um código que vai enviar a data "actual"  por Serial, o código está bastante comentado e se seguirem os comentário fica fácil de entender. Vai também um ficheiro "ds1307.pde" com as rotinas que fiz para comunicar com o RTC. Basiei-me em código que vi em sites da internet mas que alterei de forma a respeitar o Datasheet do DS1307 (http://datasheets.maxim-ic.com/en/ds/DS1307.pdf) e que também optimizei. Creio que é bastante fácil de entender e se tiverem dúvidas do porquê "disto e daquilo", se não estiver em comentário deixo-vos o desafio de irem consultar o datasheet :D!

  Tenham atenção à função "ds1307setup();", esta função só é necessária na primeira vez que ligam o RTC, se o alimentarem com uma pilha de 3v ou bateria nunca mais precisam desta função! Isto porque a função o que faz é preparar o RTC, definir a data de arranque e mandar o RTC contar o tempo, uma vez que ele nunca mais vai perder energia (pois tem uma bateria ligada) nunca vai parar de contar. Se por acaso lhe tirarem a alimentação, precisam de executar a função da próxima vez que o ligarem.

  Agora para o fim digo-vos que a Sparkfun (http://www.sparkfun.com/commerce/categories.php) vende um KIT com este RTC já com as resistências de i2c, com o cristal e pilha de 3V, tudo bonitinho sendo so preciso ligar dois fios de alimentação e os dois fios para comunicar:
http://www.sparkfun.com/commerce/product_info.php?products_id=99 (http://www.sparkfun.com/commerce/product_info.php?products_id=99)
  É claro que comprar isto, além de ser caro, não mete piada nenhuma porque já vem tudo feito! Mas para quem não gosta de se divertir a ligar coisas e tem dinheiro para gastar...

  Eu mandeir vir samples deste RTC do site da Maxim e aqui está o link de Samples de DS1307 (http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2688/t/or). Mandem vir o DS1307+, este é PDIP 8, ou seja tem 8 pinos e dá para encaixar na breadboard. O '+' significa que é RoHS Lead Free e daí dar para vir para a Europa (Se não for RoHs não podem enviar para cá, regras da U.E. e acho bem)!

 Bom... código em anexo leiam com atenção e ainda se podem rir :D

Exemplo de output do programa:
Citar
   Sao:    23:15:15   Quinta-feira dia 12 de Marco de 2009
   Sao:    23:15:16   Quinta-feira dia 12 de Marco de 2009
   Sao:    23:15:17   Quinta-feira dia 12 de Marco de 2009
Cumprimentos! ;)

Contribuição do metRo_ RTC + PCD8544 (http://lusorobotica.com/index.php/topic,681.msg6034.html#msg6034)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 13 de Março de 2009, 01:20
muito bom.. já vem a caminho.. :P
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 13 de Março de 2009, 08:12
Muito obrigado :)

Eu já tenho um RTC há muito tempo em casa mas não consegui arranjar o cristal :S No entanto é um DS1337+ mas espero que o funcionamento seja identico :)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Fifas em 13 de Março de 2009, 12:27
nice :D

tr3s mais uma vez em grande! (tens de justificar o que ganhas ;D)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 13 de Março de 2009, 20:37
hmmm está engraçado! mas gastar dois pinos analógicos perde a graça  :-\

;D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 14 de Março de 2009, 01:30
Perde a graça gastar dois pins analógicos, mas ganha a graça quando metes 20 ou 30 dispositivos nesses 2 pins e não gastas mais nenhuns :P


Excelente tutorial tr3s, continua o bom trabalho para receberes a bonificação ;D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 17 de Março de 2009, 13:50
Olá, estava a tentar perceber o teu código mas cheguei a esta parte e não percebi umas coisas.

 1- O que me está a confundir é o facto de teres o mesmo nome em duas funcções :S embora tenha chegado à conclusão que ela vai escolher a função em função dos parâmetros!

Aqui, quando fazes isto
Código: [Seleccione]
for(byte i=0;i<7;i++)rtc[i]=ds1307get(i, 0); o
Código: [Seleccione]
ds1307get(i, 0) suponho que vai fazer isto
Código: [Seleccione]
int ds1307get(byte c, boolean refresh) por causa do i ser to tipo byte.

2-Mas depois começas
Código: [Seleccione]
  switch(c){
  case DS1307_SEG:
    v=(10*((rtc_bcd[DS1307_SEG] & DS1307_HI_SEG)>>4))+(rtc_bcd[DS1307_SEG] & DS1307_LO_BCD);
break;
  case DS1307_MIN:
e não percebo como é que quando fazes switch(c) ele vai escolher um dos case porque de onde é que vem por exemplo
Código: [Seleccione]
DS1307_SEG?? A ideia que tenho é que fazes switch(n) e ele escolhe o case com aquele numero!

3-Podias explicar melhor isto:
Código: [Seleccione]
10*((rtc_bcd[DS1307_SEG] & DS1307_HI_SEG)>>4))+(rtc_bcd[DS1307_SEG] & DS1307_LO_BCD)?? Suponho que seja para transformar o numero BCD em decimal! Mas se puderes explicar o que isto realmente faz era bom.

Obrigado!


Código: [Seleccione]
void ds1307get(int *rtc, boolean refresh){       // Adquire os dados do array rtc_bcd e converte-os para int, se pretendido, actualiza o array.
  if(refresh) ds1307read();
  for(byte i=0;i<7;i++)rtc[i]=ds1307get(i, 0);   // Percorre cada elemento do array e actualiza-o
}

int ds1307get(byte c, boolean refresh){  // Adquire cada elemento da data, retorna esse valor como int e actualiza o array se pedido
  if(refresh) ds1307read();
  int v=-1;                              // Se der "fezes" tem de retornar um valor absurdo...
  switch(c){
  case DS1307_SEG:
    v=(10*((rtc_bcd[DS1307_SEG] & DS1307_HI_SEG)>>4))+(rtc_bcd[DS1307_SEG] & DS1307_LO_BCD);
break;
  case DS1307_MIN:
    v=(10*((rtc_bcd[DS1307_MIN] & DS1307_HI_MIN)>>4))+(rtc_bcd[DS1307_MIN] & DS1307_LO_BCD);
break;
  case DS1307_HR:
    v=(10*((rtc_bcd[DS1307_HR] & DS1307_HI_HR)>>4))+(rtc_bcd[DS1307_HR] & DS1307_LO_BCD);
break;
  case DS1307_DdS:
    v=rtc_bcd[DS1307_DdS] & DS1307_LO_DdS;
break;
  case DS1307_DMES:
    v=(10*((rtc_bcd[DS1307_DMES] & DS1307_HI_DMES)>>4))+(rtc_bcd[DS1307_DMES] & DS1307_LO_BCD);
break;
  case DS1307_MTH:
    v=(10*((rtc_bcd[DS1307_MTH] & DS1307_HI_MES)>>4))+(rtc_bcd[DS1307_MTH] & DS1307_LO_BCD);
break;
  case DS1307_ANO:
    v=(10*((rtc_bcd[DS1307_ANO] &  DS1307_HI_ANO)>>4))+(rtc_bcd[DS1307_ANO] & DS1307_LO_BCD)+DS1307_BASE_ANO;
break;
  }
  return v;
}
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 17 de Março de 2009, 16:29
Ok, vamos então responder a essas questões:

1)
Sim, tens razão. Embora as funções tenham o mesmo nome, têm parâmetros diferentes e por isso são consideradas duas funções diferentes pelo compilador. Dependendo dos parâmetros que passas é uma função ou outra que é chamada. Repara que uma recebe um valor de 8 bits (byte) no primeiro parâmetro e outra recebe um pointer para uma zona de memória.

2) Esses valores,  "DS1307_SEG" por exemplo, estão definidos no inicio do ficheiro com o comando "#define" (explicação do comando #define (http://www.cppreference.com/wiki/preprocessor/define)) onde lhes é atribuido um valor numérico, um significado. Assim quando o compilador encontra aquelas palavras substitui-as pelo valor/sginificado que lhes foi atribuído. Eu faço-o para ser mais fácil entender o que faz cada caso, consegue-se entender onde são tratados os segundos, minutos, horas, etc..

3) Quando se pede informação ao RTC, ele retorna-a num formato um bocado esquisito. O que se faz nesse código é filtrar toda a informação não desejada, garantindo que só fica lá o que pretendemos e de seguida movemos tudo para a posição onde é suposto estar. Estes dois passos tratam a parte alta do valor, isto é, os primeiros bits (a contar da esquerda) que constituem o valor. Multiplica-se por 10 para obtermos o algarismo das dezenas. Repetem-se os dois primeiros passos para tratar a parte baixa do valor, claro que se utiliza uma máscara diferente. Agora como vamos tratar do algarismo das unidades não multiplicamos por 10 e basta somar este às dezenas para obtermos o valor final!
Fica um link onde se explica o que é a representação BCD (http://en.wikipedia.org/wiki/Binary-coded_decimal).

Sei que para ti não era necessário uma explicação tão extensa, mas pode haver alguém que tenha as mesmas dúvidas e que não tenha o mesmo background. ;)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 17 de Março de 2009, 18:10
2) Estava a olhar para o case e à espera que estivesse lá o valor e não uma variável com esse valor. duhhh

3) Será que consegues colocar um exemplo vindo do rtc em bcd?


Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 17 de Março de 2009, 18:30
Agora não consigo porque estou no trabalho, mas se tiveres aí tudo à mão é simples: vais ao código do case do switch e mostras a posição do array para a consola com Serial.println(rtc_bcd[posiçao_que_escolhes], BIN);

Algo assim:
Código: [Seleccione]
...
 switch(c){
  case DS1307_SEG:
    v=(10*((rtc_bcd[DS1307_SEG] & DS1307_HI_SEG)>>4))+(rtc_bcd[DS1307_SEG] & DS1307_LO_BCD);
    // inseres a linha que se segue
    Serial.println(rtc_bcd[DS1307_SEG], BIN); // Esta linha, Atencao esta linha :D
    // inseres a linha de cima, a que passou :P
    break;
  case DS1307_MIN:
    v=(10*((rtc_bcd[DS1307_MIN] & DS1307_HI_MIN)>>4))+(rtc_bcd[DS1307_MIN] & DS1307_LO_BCD);
break;
...
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 17 de Março de 2009, 19:33
Falta-me o maldito do cristal...  :P
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 17 de Março de 2009, 19:34
motherboards antigas, n há aí por casa?
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 17 de Março de 2009, 19:55
Não mas tenho que ir aqui ao lado ao meu primo que ele tem para lá uma...
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 17 de Março de 2009, 21:26
motherboards antigas, n há aí por casa?
feira da ladra :)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 17 de Março de 2009, 23:44
Não mas tenho que ir aqui ao lado ao meu primo que ele tem para lá uma...

então tens aí uma solução.. e n te deixes enganar.. elas têm dois cristais.. :P
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 28 de Março de 2009, 01:49
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh4.ggpht.com%2F_i2teYMYP9C0%2FSc2GdqIITWI%2FAAAAAAAAATg%2FhnxNWK6dqYA%2Fs400%2FIMG_0409.JPG&hash=88f240f8a1c9ced31862fa9adbedde82eed819ec) (http://picasaweb.google.com/josescxavier/TutorialRTCds1307_LCD#5318054579077139810)(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh4.ggpht.com%2F_i2teYMYP9C0%2FSc2GjIbivWI%2FAAAAAAAAATo%2FNTILZC3d_tE%2Fs400%2FIMG_0410.JPG&hash=7bea2be6691676cb202df03d0f484ff0c41eb1c0) (http://picasaweb.google.com/josescxavier/TutorialRTCds1307_LCD#5318054673110973794)

Venho aqui apresentar-vos a minha contribuição para este tópico eheh  ;D
Vou postar aqui o código que vos permite colocarem as horas no LCD, no entanto é necessário dizer que existem algumas limitações a nível de memória por isso retirei no vector onde está definida a tabela ascii tudo excepto os números de 0 a 9 e :.

Código: [Seleccione]
Serial.print("Sao:    ");
  int horas = rtc[HORAS];             //Coloca as horas numa variavel
  Serial.print(horas,DEC);            // em primeiro vêm as horas...
  Serial.print(":");                  // ...
  int minutos = rtc[MINUTOS];         //Coloca os segundos numa variavel
  Serial.print(minutos,DEC);          // Agora os minutos...
  Serial.print(":");                  // ...
  int segundos = rtc[SEGUNDOS];       //Coloca os segundos numa variavel
  Serial.print(segundos,DEC);         // E de seguida os segundos. Vamos agora às estrelas... (Ai Marisa... (.)(.) )
  char hor_str[3] = "  ";             //criamos uma string onde vamos colocar o valor das horas
  char min_str[3] = "  ";             //criamos uma string onde vamos colocar o valor dos minutos
  char seg_str[3] = "  ";             //criamos uma string onde vamos colocar o valor dos segundos
  itoa(horas, hor_str, 10);           //Convertemos de inteiro (horas) para string(hor_str) na base 10, decimal.
  itoa(minutos, min_str, 10);         //Convertemos de inteiro (minutos) para string(min_str) na base 10, decimal.
  itoa(segundos, seg_str, 10);        //Convertemos de inteiro (segundos) para string(seg_str) na base 10, decimal.
  cursorxy(0,1);                      //Posicionamos o cursor no lcd.
  apagarLinha(1);                     // Apaga uma linha do LCD.
  cursorxy(0,1);                      //Posicionamos novamente o cursor no lcd.
  putstr(hor_str);                    //Colocamos os segundos no LCD :)
  putstr(":");
  putstr(min_str);                    //Colocamos os segundos no LCD :)
  putstr(":");
  putstr(seg_str);                    //Colocamos os segundos no LCD :)

O vector com os caracteres ficou assim:
Código: [Seleccione]
byte nokiabyte[11][5] = {
{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
};

Como agora começamos no 0 (hex 0x30) é necessário nas funções em baixo alterar para 0x30 como mostra o seguinte:
Código: [Seleccione]
void putchar(char character){                  // Traduz os caracteres para um formato reconhecido pelo PCD8544 e envia-os para o LCD. Cada caracter é um conjunto de 5 bytes.
  for (char i = 0; i < 5; i++){
    writedata(nokiabyte[character - 0x30][i]); // Vai buscar o byte ao array de caracteres e envia-o para o LCD
  }
  writedata(0x00);                             // Espaçamento de um pixel entre cada caracter
}

void putcharInv(char character){                  // Traduz os caracteres para um formato reconhecido pelo PCD8544 e envia-os para o LCD. Cada caracter é um conjunto de 5 bytes.
  for (char i = 0; i < 5; i++){
    writedata((nokiabyte[character - 0x30][i])^0xff); // Vai buscar o byte ao array de caracteres e envia-o para o LCD com as cores inversas
  }
  writedata(0xff);                             // Espaçamento de um pixel entre cada caracter
}

Programa em Anexo

tr3s se calhar era interessante no primeiro post colocar uma nota para este post.
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 28 de Março de 2009, 06:21
:) tiro-lhe o chapéu, sr metro.. mt bem, mt bem..

(essa técnica de cortar nos caracteres k n são importantes eu tb já a tinha usado no meu 'termopac', realmente correu mt bem nos primeiros dias, mas o arduino de vez em kd dá uns cortes no lcd.. fica tudo desconfigurado.. (acontecia especialmente com as imagens))
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 28 de Março de 2009, 23:04
Thanks metr0_ ;D, its done :D!

Abraços!
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 28 de Março de 2009, 23:22
 :)
Podes explicar melhor ou dar links para sítios com esta informação porque acontecem estes problemas de memória quando se usa o i2c e grandes vectores?

PS: não é "metr0_" é metRo_ lool
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 28 de Março de 2009, 23:41
PS: não é "metr0_" é metRo_ lool

aish! k nome feio k ele te chamou! :D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: npaiva em 30 de Março de 2009, 23:41
Chegaram os meus samples do real time clock DS1307 RTC, agr vai ser só brincar... ::)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Ricardo_91 em 05 de Maio de 2009, 11:39
boas
já pedi samples ;D do ds1307 á maxim deve xegar dentro de 2 semanas
agora falta o cristal, vi este cristal na leiritronica

Cristal Quartzo 768KHZ para Relógio

Stock: DISPONÍVEL
Ref.: CQ32,768      0,26€ (IVA incluído)

axam que funciona??
eu sei que diz 768khz mas na referencia diz 32,768 e diz que é utilizada em relogios
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 05 de Maio de 2009, 11:46
É isso mesmo, esse é o clock k é utilizado para gerar segundos ;)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: delphi em 25 de Maio de 2009, 16:48
Para os mais preguiçosos, como eu, existe esta board, já com tudo assemblado http://www.futurlec.com/Mini_DS1307.shtml (http://www.futurlec.com/Mini_DS1307.shtml) que custa +/- 6 euros  ( + 4 USD de portes, que são repartidos se encomendarem mais unidades ou outros artigos).
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 28 de Julho de 2009, 23:18
Boas, chegaram samples do RTC, queria saber o valor recomendado para as resistencias de pull up, sei que dá normalmente de 1k a 47k, o que difere com diferentes resitencias?

e outra coisa, encontrei um cristal numa impressora, tem a mesma forma que esse, mas não tem nada escrito  ???

como posso encontrar o valor dele? há algum medidor?

outra coisa será ver as peças da impressora no site, mas está perto do impossivel...

obrigado :)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tcustodio em 28 de Julho de 2009, 23:20
como posso encontrar o valor dele? há algum medidor?
um medidor da frequência de cristais:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fblog.makezine.com%2F_art_pics_AVR_freq_overall.jpg&hash=bc6751012bf8cb80a158d5bc59be7a5138968064)
http://blog.makezine.com/archive/2008/08/how_to_build_a_frequency.html ;)
tava pra criar um novo post pra isto  :D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 28 de Julho de 2009, 23:36
Ui  :o mas só o tempo que me leva pa fazer isso já o rtc passou do prazo  :P

então e se eu puzer um cristal aleatorio? o que acontece? simplesmente conta o tempo mal?
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tcustodio em 28 de Julho de 2009, 23:46
Ui  :o mas só o tempo que me leva pa fazer isso já o rtc passou do prazo  :P
podes fazer aquilo de maneira a apenas mandar o valor da frequência para a consola ;)

então e se eu puzer um cristal aleatorio? o que acontece? simplesmente conta o tempo mal?
Yup, ou conta mais depressa ou mais devagar, consoante o valor do cristal ;D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 28 de Julho de 2009, 23:47
Ui  :o mas só o tempo que me leva pa fazer isso já o rtc passou do prazo  :P
podes fazer aquilo de maneira a apenas mandar o valor da frequência para a consola ;)

então e se eu puzer um cristal aleatorio? o que acontece? simplesmente conta o tempo mal?
Yup, ou conta mais depressa ou mais devagar, consoante o valor do cristal ;D
ahh ok então sempre posso experimentar.
obrigado :)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 28 de Julho de 2009, 23:55
Sim experimenta, mas se tem esse aspecto quase de certeza que é um destes :D
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Sérgio_Sena em 29 de Julho de 2009, 11:52
Boas, chegaram samples do RTC, queria saber o valor recomendado para as resistencias de pull up, sei que dá normalmente de 1k a 47k, o que difere com diferentes resitencias?

Para o barramento I2C, e como só há um participante, resistências de 4k7 são sufice.


Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 29 de Julho de 2009, 12:49
obrigado asena :) tenho mesmo só um par dessas  ;D


Então e esta?

juntei este código, com o do termometro(do ricardo-reis), e agora a data fica intermitente  ??? o MS timer está a interferir?

e agora descobri que apagei o código  ::)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 29 de Julho de 2009, 12:51
fizeste o quê?
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 29 de Julho de 2009, 21:09
juntei o código do RTC, e o do termometro, assim o LCD diz a data, e a temperatura, mas a data ficou intermitente...  cada segundo pisca.

Fiz agora uma placa para o RTC, mas quando ligo não faz nada :(, se tiro o chip ele diz: dia, 0, semana 0, hora 0, segundo 0, o que se passa aqui?

eu acho que puz o ferro tempo a mais no cristal... são muito sensiveis? ou então está a fazer curto, mas até agora não encontrei nada...
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 29 de Julho de 2009, 22:14
Funcionava tudo antes de fazeres a placa? Os componentes sao todos os mesmos ou alteraste algum para a placa?
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 29 de Julho de 2009, 22:18
Funcionava tudo antes de fazeres a placa? Os componentes sao todos os mesmos ou alteraste algum para a placa?

só o chip, mas já experimentei dois dos tres que tenho(pensei que podia estar a estraga-los)e agora a placa tem uma ''coin cell'' lá soldada.  :'(

estive a rever todas as ligações, parece estar tudo bem.

fiz upload novamente do código, e agora diz a data que eu meto para começar a contar, mas fica sempre na mesma, os segundos não passam, nem os minutos, nem nada...  :-\

vou experimentar ligar aos 3.3v do arduino, em vez da pilha, mas a pilha é nova... :S

UPDATE: bem quando desligo a pilha, ou os 3.3v do arduino, ele funciona lol, mas quando ligo a pilha o empo fica parado ??? bem sei que o chip funciona, e o cristal...  8)

mas que estranho :o
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 29 de Julho de 2009, 23:14
tu por acaso lembraste-te de fazer o set ao ds1307? é que se não lhe deres um ponto de partida ele n faz nada, ou parte do zero.. se estiveres a dazer o set, e ele começa do zero, deve ser problema da pilha.. tira a pilha e liga directamente ao 3v3 e ao gnd do arduino..


quanto ao intermitente, n sei como tás a fazer isso, mas sim, pode ter a ver com a mstimer2.. ou por outra, deve ter a ver com o código que tu adicionaste, pk supostamente isso n devia tar intermitente.. se por acaso meteste algum delay, tens aí a resposta pró teu problema.. mstimer2 n se dá bem com delays..
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: amando96 em 29 de Julho de 2009, 23:55
sim fiz set, o código que usei está em anexo, e por acaso acho que me lembro de um delay de 1000 ms no código, amanha revejo-o melhor.

liguie directamente aos 3.3v do arduino a gnd, e não conta o tempo, mas quando desligo começa a contar... amanha faço um video para ver melhor :)
Título: Re:Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 29 de Julho de 2009, 23:59
tens aki um tutorial tão bom do daniel pra te guiares e acertares com isso à primeira, pões-te a inventar com tuts sei lá de quem.. só te posso desejar boa sorte..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: arucard em 15 de Setembro de 2009, 19:59
Olá amigo, me parece que o arquivo .rar está corrompido, você teria como verificar?
Obrigado.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 15 de Setembro de 2009, 21:20
:S deve ter a ver com as actualizações do fórum.. kd alguém aqui o postar de novo, que avise.. (eu acho k n tenho cá isso sem ser já modificado)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 16 de Setembro de 2009, 00:04
Realmente houve um problema com os ficheiros, vou corrigir o mais breve possível, fiquem atentos a novidades pois abro um post novo quando estiver resolvido.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: arucard em 21 de Outubro de 2009, 12:56
Olá amigo, alguma novidade sobre a volta do arquivo?
obrigado...
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Raul em 21 de Outubro de 2009, 21:44
Os ficheiros em qualquer post estão corrompidos.
Avisa quando conseguires solucionar o problema.


Cumprimentos
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: microbyte em 21 de Outubro de 2009, 22:41
Amigo Raul, aqui não tenho qualquer problema a abrir os anexos.
Estou a usar o Safari.
Não sei que browser estás a usar, mas tenta com outro.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 21 de Outubro de 2009, 23:01
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: microbyte em 21 de Outubro de 2009, 23:03
Aqui está tudo normal...
Safari em OSX
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 21 de Outubro de 2009, 23:04
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: microbyte em 21 de Outubro de 2009, 23:09
Tens razão...
Não tinha experimentado a extrair. ;) Peço desculpa pela confusão.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 18 de Novembro de 2009, 16:29
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: delphi em 18 de Novembro de 2009, 16:32
Olá, e se não fizer star()?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 18 de Novembro de 2009, 16:38
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 18 de Novembro de 2009, 18:27
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.   ;)

Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 19 de Novembro de 2009, 16:44
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?



Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 21 de Novembro de 2009, 10:38
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" ?!?!?   ::)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 21 de Novembro de 2009, 13:28
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 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1232572239) ele apresenta algumas bibliotecas para gerar pwm's.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Baltasar em 21 de Novembro de 2009, 14:56
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 23 de Novembro de 2009, 12:12
O primeiro tópico foi actualizado! Os anexos já funcionam novamente :D

Abraços a todos e desculpem pela demora :P
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: arucard em 14 de Dezembro de 2009, 12:04
Valeu cara!! muito obrigado!!
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: vdr em 20 de Fevereiro de 2010, 19:50
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.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 20 de Fevereiro de 2010, 19:58
o ds1307 só por si n faz isso.. mas podes programar o arduino para que, a uma dada hora:minuto:segundo, mande o impulso k keres pró pino que te interessar..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: vdr em 20 de Fevereiro de 2010, 20:01
Então tenho de fazer um loop de getTime  até que tenha obtido a minha hora? Ou há outra opção?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 20 de Fevereiro de 2010, 20:09
sim.. comparas casa hora:minuto:segundo recebido do ds com a hora:minuto:segundo a que tu queres enviar o tal impulso pró pino x do arduino.. parece-me a forma mais simples de o implementar..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: vdr em 20 de Fevereiro de 2010, 20:12
Isto é um pouco off-topic mas sabes-me dizer que operações devo evitar no meu programa de modo a que ele consuma o menos possivel?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 20 de Fevereiro de 2010, 20:55
isso parece-me um bocado irrelevante porque acho que é tudo igual.. quanto mt, se te preocupa tanto o consumo do arduino, procura por informação acerca de como baixar o clock do arduino..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Njay em 20 de Fevereiro de 2010, 23:36
Isto é um pouco off-topic mas sabes-me dizer que operações devo evitar no meu programa de modo a que ele consuma o menos possivel?
Tens que usar modos de sleep. O que estás a usar para alimentar o Arduino?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 20 de Fevereiro de 2010, 23:58
Tens que usar modos de sleep. O que estás a usar para alimentar o Arduino?

hmmm.. Njay, e que tal abrires um tópico a falar sobre isso? (acho que ainda não há e é daquelas coisas que pode interessar a mt boa gente..)  :)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 21 de Fevereiro de 2010, 01:39
O Arduino não é propriamente algo que esteja concebido para gastar pouco por isso se isso é algo importante devias optar por utilizar só o necessário.
A maxim-ic tem alguns RTC que possuem funções de alarme e assim, só não sei que tempos estão envolvidos etc, mas ve aqui: http://para.maxim-ic.com/en/search.mvp?fam=rtc&374=I%3Csup%3E2%3C/sup%3EC&tree=timers (http://para.maxim-ic.com/en/search.mvp?fam=rtc&374=I%3Csup%3E2%3C/sup%3EC&tree=timers)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: vdr em 22 de Fevereiro de 2010, 02:12
Citar
Tens que usar modos de sleep. O que estás a usar para alimentar o Arduino?

Quando acabar o projecto, deverá ficar ligado a um transformador.

Citar
Inserir Citação
O Arduino não é propriamente algo que esteja concebido para gastar pouco por isso se isso é algo importante devias optar por utilizar só o necessário.
A maxim-ic tem alguns RTC que possuem funções de alarme e assim, só não sei que tempos estão envolvidos etc, mas ve aqui: http://para.maxim-ic.com/en/search.mvp?fam=rtc&374=I%3Csup%3E2%3C/sup%3EC&tree=timers (http://para.maxim-ic.com/en/search.mvp?fam=rtc&374=I%3Csup%3E2%3C/sup%3EC&tree=timers)

Encontrei o DS1678 - http://datasheets.maxim-ic.com/en/ds/DS1678.pdf (http://datasheets.maxim-ic.com/en/ds/DS1678.pdf) - mas não faço ideia de como fazer o código para operar com ele como foi feito pelo metro_ para o RTC do tópico  :-[


Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: ricardo-reis em 22 de Fevereiro de 2010, 10:00
n foi feito pelo metro, foi mm feito pelo tr3s..

se a alimentação vai ser um transformador, qual é o problema relativo aos consumos? :)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: metRo_ em 22 de Fevereiro de 2010, 10:50
Sim, como já foi dito foi o tr3s e não eu que fez o código.
Visto que esse também comunica por I2C o código do três pode-te ajudar e podes aproveitar para aprender I2C porque depois e saberes como funciona uma vez ficas a saber utilizar I2C para sempre ;)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: AcidDagger em 01 de Junho de 2010, 21:58
Eu tenho uma board antiga com um cristal desses, se ouver alguem perto de Torres Novas que o quiser...
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: OxyGen em 27 de Julho de 2010, 14:30
Boas... uma pergunta: porque é que o endereço para acesso ao RTC é #define DS1307_I2C_ID 0x68  // ID no bus i2c do RTC ds1307

Estive a ler o datasheet de uma ponta à outra e não encontrei nada disso...
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: TigPT em 27 de Julho de 2010, 15:09
Boas... uma pergunta: porque é que o endereço para acesso ao RTC é #define DS1307_I2C_ID 0x68  // ID no bus i2c do RTC ds1307

Estive a ler o datasheet de uma ponta à outra e não encontrei nada disso...
Na página 12 indica no diagrama de comunicações:
http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf (http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf)

1101000 = 0xD0, contudo como o bit da direita (menor peso informa escrita ou leitura, temos que shiftar todo o endereço 1 para a direita já que o arduino utiliza a Wire que só controla i2c com 7 bits tratando a biblioteca de escritas / leituras

Assim:
0110100 = 0x68 é o endereço a 7bits!
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: OxyGen em 27 de Julho de 2010, 20:49
Acho que não podias ter dado melhor resposta... muitissimo obrigado xD
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: andre_f_carvalho em 23 de Setembro de 2010, 20:02
Eu tenho uma board antiga com um cristal desses, se ouver alguem perto de Torres Novas que o quiser...

boas,

ainda tens o tal cristal de 32.768KHz ? para o rtc 1307?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Turicas em 23 de Abril de 2011, 07:31
Olá,
desenvolvi uma biblioteca para o Arduino que controla o módulo DS1307 RTC.
O código que desenvolvi é mais fácil de usar do que utilizando diretamente a biblioteca Wire.

Para mais informações:
- Discussão no Fórum Arduino (em Inglês) (http://arduino.cc/forum/index.php/topic,59256.0.html)
- Código no GitHub (https://github.com/turicas/DS1307/)

Gostaria de ter um feedback de quem possui esse módulo para saber se a minha biblioteca funciona perfeitamente. Obrigado!
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Kartech em 22 de Setembro de 2011, 12:51
Boas,
Já montei o DS1307 e já está a funcionar o problema é que ele repete os segundos :/
Citar
Sao:    12:30:0   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:0   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:1   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:1   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:2   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:2   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:3   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:3   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:4   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:4   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:5   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:6   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:6   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:7   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:7   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:8   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:8   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:9   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:9   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:10   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:10   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:10   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:11   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:11   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:12   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:12   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:13   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:13   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:14   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:14   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:14   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:15   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:15   Quinta-feira dia 22 de Setembro de 2011
Sao:    12:30:16   Quinta-feira dia 22 de Setembro de 2011

O que é que eu fiz ou deveria ter feito?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: andre_f_carvalho em 22 de Setembro de 2011, 12:56
a unica coisa que esta ai mal é tu estares a fazer verificação duas vezes por segundo, dai teres repetido os valores
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: senso em 22 de Setembro de 2011, 18:38
Entao, se imprimires sempre é normal que ele imprima muitas vezes o mesmo tempo, porque um segundo, bem demora um segundo a passar.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: vdr em 22 de Setembro de 2011, 19:55
Boas,
Já montei o DS1307 e já está a funcionar o problema é que ele repete os segundos :/

O que é que eu fiz ou deveria ter feito?

Tive o mesmo problema. Tinha um delay de 1 segundo entre impressões e mesmo assim ele imprimia como no teu caso, o problema estava no ground. Experimenta desligar o fio que liga o pino do IC ao ground e segura na ponta, assim o teu corpo funciona como massa, se resolver e estiveres a usar um portátil basta usar a bateria e desliga-lo da corrente da rede.

Ou então utilizar uma alimentação sem ser a porta usb.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Joel em 01 de Abril de 2012, 00:46
Antes de mais queria dar os parabéns ao tr3s por este tópico, está muito bom.

Depois de montado o circuito e testado, pôs a apresentar os valores no LCD, mas quero agora um desafio maior.

E o desafio que tenho em mente, é conseguir através, de um Joystick e o LCD acertar as horas. Sem a necessidade de recorrer ao auxilio do PC.

Será que isso é possivel?

Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: senso em 01 de Abril de 2012, 12:46
Claro que sim, e podes fazer isso de várias maneiras.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Joel em 02 de Abril de 2012, 00:02
Hum.... e será que me podes elucidar dessas várias maneiras???

É que nunca fiz nada do gênero, nem tão pouco estou a ver como possa fazer... :s
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: senso em 02 de Abril de 2012, 02:41
Usas a esquerda e a direita para seleccionar horas/minutos/segundos e o cima/baixo para incrementar/decrementar os valores.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Joel em 02 de Abril de 2012, 14:40
Sim... já tenho consigo controlar as posições com Joystick... o meu problema, é que não sei a nivel de programação como se faz, para conseguir acertar!!

Tipo se quero mudar de uma para duas horas, como tenho de fazer para que ao selecionar o dois ele mude a hora.. :s
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: Fidel10 em 04 de Abril de 2012, 23:03
Boa noite, tou com um problema a compilar este codigo.
Tento usar as informaçoes que foram aqui dadas mas nao consigo que funcione, da-me sempre este erro:
Código: [Seleccione]
TutorialRTCds1307.cpp: In function 'void setup()':
TutorialRTCds1307.pde:-1: error: 'ds1307setup' was not declared in this scope
TutorialRTCds1307.cpp: In function 'void printData()':
TutorialRTCds1307.pde:-1: error: 'ds1307get' was not declared in this scope
Isto é de que??
No documento que saquei no primeiro post tem muitos ficheiros que tem o mesmo formato dos que estao na libraria, tenho de mandar para la alguma coisa??
Ja consegui com outro codigo mas tive de meter uma libraria para o RCT e funciona, mas nao da os dias da semana, e isso era bom... so da no formato de numeros, ja tentei aplicar as funçoes deste codigo que da os dias da semana mas nao deu nada.
Agradeço toda e qualquer ajuda :D

Abraço
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: jmacedo em 21 de Maio de 2012, 12:54
Bom dia,

Peço desculpa pelo meu fraço conhecimento, mas sou novato nestes campos.

No primeiro topico deste tema o autor diz que coloca 2 resistencias Pull-Up, pergunto eu, que resistencias são estas e o valor ??

Obrigado
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: CBX em 21 de Maio de 2012, 13:12
qualquer uma entre 4.7k e 10k
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: jmacedo em 21 de Maio de 2012, 13:20
Muito obrigado pela resposta.

Quem sabe sabe , quem não sabe faz como eu PERGUNTA  ;)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: jmacedo em 30 de Maio de 2012, 17:54
Olá,
desenvolvi uma biblioteca para o Arduino que controla o módulo DS1307 RTC.
O código que desenvolvi é mais fácil de usar do que utilizando diretamente a biblioteca Wire.

Para mais informações:
- Discussão no Fórum Arduino (em Inglês) (http://arduino.cc/forum/index.php/topic,59256.0.html)
- Código no GitHub (https://github.com/turicas/DS1307/)

Gostaria de ter um feedback de quem possui esse módulo para saber se a minha biblioteca funciona perfeitamente. Obrigado!

Boas,

Peço desculpa mas depois de descarregar o dito ficheiro, e copia-lo para o sitio devido, não consigo por a funcionar com o Arduino 1.0.1

Alguem sabe o que fazer ?? Os erros são os seguintes;

\arduino-1.0.1\libraries\DS1307\DS1307.cpp: In function 'char* fromNumberToWeekDay(int)':
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:34: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:37: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:40: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:43: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:46: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:49: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:52: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:55: warning: deprecated conversion from string constant to 'char*'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp: In member function 'void DS1307Class::setDate(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)':
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:75: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:78: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:79: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:80: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:81: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:82: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:83: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:84: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:86: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp: In member function 'void DS1307Class::getDate(int*)':
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:92: error: 'class TwoWire' has no member named 'send'
\arduino-1.0.1\libraries\DS1307\DS1307.cpp:97: error: 'class TwoWire' has no member named 'receive'
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 01 de Junho de 2012, 01:30
Esse código foi feito com versoes do Arduino IDE bastante antigas. Parece que o novo Arduino IDE 1.0.1 já não mantém retro compatibilidade.
Terás de alterar o código de forma a compilar :S
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: almamater em 04 de Julho de 2012, 23:55
Possa.. sei que em tempos já tinha feito este circuito.. agora voltei a fazer e não sei pq está a dar o resultado mal:

Repete os segundos umas quantas vezes..:

2011-04-22 12:32:17 - day of week: Friday
2011-04-22 12:32:17 - day of week: Friday
2011-04-22 12:32:17 - day of week: Friday
2011-04-22 12:32:17 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:18 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday
2011-04-22 12:32:19 - day of week: Friday

Usando este codigo:
Código: [Seleccione]
/*
This example firstly sets the date and time on DS1307 Real-Time Clock.
Please modify the clock values that are hardcoded.
Secondly it reads the date and time from DS1307 Real-Time Clock
and send this information to your PC using USB/Serial (like the ReadDate example).
Make the connections below, upload the code and open Serial Monitor.

Made by Álvaro Justen aka Turicas

Pin connections on DS1307 module:

[DS1307] <--> [Arduino]
5V       <--> 5V
GND      <--> GND
SQW      <--> (not connected)
SCL      <--> Analog Input 5
SDA      <--> Analog Input 4

This software is free software.
*/

#include <Wire.h>
#include <DS1307.h>

char dateTime[20];
int RTCValues[7];

void setup() {
    Serial.begin(9600);
    Serial.print("Setting the value of RTC... ");

    DS1307.begin();
    DS1307.setDate(11, 04, 22, 5, 12, 31, 30);
    //Year: two-digit, from 00 to 99
    //Month: two-digit, from 01 to 12
    //Day of month, from 01 to 31
    //Day of week, from 0 (sunday) to 6 (saturday)
    //Hour: 24-hour format, from 0 to 23
    //Minute: from 0 to 59
    //Second: from 0 to 59
    Serial.println("OK!");
    Serial.println("Reading data from RTC...");
}

void loop() {
    DS1307.getDate(RTCValues);
    sprintf(dateTime, "20%02d-%02d-%02d %02d:%02d:%02d", RTCValues[0],
            RTCValues[1], RTCValues[2], RTCValues[4], RTCValues[5],
            RTCValues[6]);
    Serial.print(dateTime);
    Serial.print(" - day of week: ");
    Serial.println(fromNumberToWeekDay(RTCValues[3]));

    delay(1000);
}


As ligações estão como é suposto..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: senso em 05 de Julho de 2012, 01:17
Estás a ler a imprimir os dados mais rápido que uma vez por segundo, por isso é que repete o tempo.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: almamater em 05 de Julho de 2012, 01:34
nao.. pq é capaz de estar muito tempo assim.. já testei com um relógio ao lado e não bate certo!
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 05 de Julho de 2012, 10:31
Verifica o cristal e a bateria  ;)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: almamater em 05 de Julho de 2012, 10:32
Verifica o cristal e a bateria  ;)

Pois... a bateria está nos 3v do arduino, quanto ao Cristal vou testar trocar por outro..
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 05 de Julho de 2012, 10:53
Lembro-me de alguém que teve um problema "Muito" semelhante e afinal era o ground que não estava a ser partilhado correctamente... :P
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: almamater em 05 de Julho de 2012, 10:57
Humm.. eu liguei o pino dos 5V aos 5V do Arduino, e o pino dos 3V +Ground do chip à saída 3V e Ground do Arduino, ou seja, não tenho outra fonte a não ser o Arduino, estou a fazer mal?
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: almamater em 05 de Julho de 2012, 23:17
Ok, descoberto o mistério mas sem saber pq :) Realmente tem a ver com o ground, da forma que mencionei acima e com o arduino ligado ao portatil não funciona, adicionei um fonte externa e alimentei o chip através da mesma, liguei o ground com o do arduino e já funciona!

Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: tr3s em 06 de Julho de 2012, 14:36
Ainda bem ;) Fico contente em saber :)
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: r16 em 07 de Julho de 2012, 19:16
boas eu tenho um time shield ds1307 e o que pretendia era um codigo que fizesse o seguinte:

Por exemplo estas funcoes:

Ligar todas as segundas feiras as 20:00:00 um rele, e desligar á segunda feira também as 23:50:00.
Ligar todos os dias as 08:00:00 um radio  e desligar as 18:00:14
e ligar em um dia especifico do ano um rele por exemplo dia 6/11/2012 as 13:00:00 e desligar as 13:15:00


Alguem me pode ajudar neste sentido, e dizer qual as librarias a instalar?
Obrigado
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: dio123 em 23 de Maio de 2013, 10:18
Bom dia,
Ontem fui experimentar  RTC, então liguei o arduino, programei as horas e data e depois fiz com para mostrar a data e hora no lcd. Passado +/- meia hora ligo novamente o arduino e as horas estavam certas.

Hoje de manha por volta das 9:50h ligo o arduino e diz-me que são 7:30h, Mas a data mudou e ficou bem. Deixei passar uns minutos e voltei novamente a ligar e diz 7:38h. Assim por olho dá-me a sensação que está a contar bem, mas durante a noite houve uma queda grande nas horas.
Queria saber se alguem sabe o que possa ter passado?
Verifiquei a pilha e tem 3v.

Edit: Fiz uns testes mais curtos e se tiver ligado a alimentação do arduino funciona bem, os segundos batem certos com o do pc.
Se usar a pilha  durante 2 minutos e voltar a ligar o arduino os segundos ficam com uma diferença de 3 segundos em relação ao pc
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: dio123 em 23 de Maio de 2013, 16:44
Acho que está resolvido.O problema é das pilhas. Apesar de não apagar a memoria  não conta bem .É o que dá pilha dos chineses.
Usei 2 AA e com 3.2v novas e já não acontece isso. Agora falta logo a noite vou ver se as horas batem certo.

Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: rodriguesf em 16 de Julho de 2013, 18:27
Boas,

para um projecto arranjei um modulo destes http://www.ebay.com/itm/140927641754?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649 (http://www.ebay.com/itm/140927641754?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649),
a questão é que durante a noite(12horas) obtive uma diferença em relação a um relógio normal de 25 segundos a mais,
esta precisão do rtc é normal ou há aqui qualquer coisa mal?

Obrigado
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: jm_araujo em 16 de Julho de 2013, 20:19
Verificar que a pilha está em bom estado.
Se estiver, pode ser do cristal. Ou do tipo errado (6pf vs 12.5pf) , ou simplesmente foleiro.
Título: Re: Real Time Clock DS1307 (RTC) + Arduino
Enviado por: rodriguesf em 17 de Julho de 2013, 11:19
Verificar que a pilha está em bom estado.
Se estiver, pode ser do cristal. Ou do tipo errado (6pf vs 12.5pf) , ou simplesmente foleiro.

a pilha parece estar boa, tem 3.5v, isto faz tudo bem tirando a parte de adiantar as horas bastante para a aplicação que lhe quero dar.