collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Real Time Clock DS1307 (RTC) + Arduino  (Lida 167181 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #15 em: 28 de Março de 2009, 01:49 »


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.
« Última modificação: 04 de Julho de 2010, 16:44 por metRo_ »

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #16 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))

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #17 em: 28 de Março de 2009, 23:04 »
Thanks metr0_ ;D, its done :D!

Abraços!
Tr3s
Daniel Gonçalves

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #18 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

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #19 em: 28 de Março de 2009, 23:41 »
PS: não é "metr0_" é metRo_ lool

aish! k nome feio k ele te chamou! :D

Offline npaiva

  • Mini Robot
  • *
  • Mensagens: 27
  • Be Atomyk!!!
    • N'Paiva - Robotics Laboratory
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #20 em: 30 de Março de 2009, 23:41 »
Chegaram os meus samples do real time clock DS1307 RTC, agr vai ser só brincar... ::)
"É necessário ter o caos aqui dentro para gerar uma estrela."

- Friedrich Nietzsche

Offline Ricardo_91

  • Mini Robot
  • *
  • Mensagens: 48
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #21 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
Ricardo Vieira


Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #22 em: 05 de Maio de 2009, 11:46 »
É isso mesmo, esse é o clock k é utilizado para gerar segundos ;)

Offline delphi

  • Mini Robot
  • *
  • Mensagens: 217
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #23 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 que custa +/- 6 euros  ( + 4 USD de portes, que são repartidos se encomendarem mais unidades ou outros artigos).
www.saborapalco.com - Companhia de Teatro Amador
www.megavaquinha.com - Uma mega aposta no euromilhões de um grupo de mega amigos

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #24 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 :)

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #25 em: 28 de Julho de 2009, 23:20 »
como posso encontrar o valor dele? há algum medidor?
um medidor da frequência de cristais:
http://blog.makezine.com/archive/2008/08/how_to_build_a_frequency.html ;)
tava pra criar um novo post pra isto  :D
« Última modificação: 28 de Julho de 2009, 23:22 por tcustodio »
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #26 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?

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #27 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
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #28 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 :)

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Real Time Clock DS1307 (RTC) + Arduino
« Responder #29 em: 28 de Julho de 2009, 23:55 »
Sim experimenta, mas se tem esse aspecto quase de certeza que é um destes :D
Tr3s
Daniel Gonçalves