collapse

* Posts Recentes

LusoRobótica - Website - Estado actual por SerraCabo
[Hoje às 15:35]


Power spike on power off por SerraCabo
[Hoje às 15:34]


Circuito para distinguir fase do neutro por TigPT
[Ontem às 14:04]


Vídeo sobre o projecto e a montagem de um conversor 12VDC - 230VAC por senso
[19 de Novembro de 2018, 15:39]


Compra Colectiva Mouser N3-2018 (limite 25 Nov) por Hugu
[19 de Novembro de 2018, 01:01]


Vídeo - selecção da uma fonte de alimentação em substituição de um transformador por vasco
[18 de Novembro de 2018, 16:21]


Placa BMS Desliga por jm_araujo
[17 de Novembro de 2018, 22:36]


Vende-se MUITO e BOM material por m90mine
[13 de Novembro de 2018, 23:32]


leitura de voltagens com o analogRead(A0) por vasco
[08 de Novembro de 2018, 13:59]


Controlar Velocidade Motor AC por senso
[06 de Novembro de 2018, 23:05]

Autor Tópico: DS1672 + Arduino Uno  (Lida 2013 vezes)

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

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
DS1672 + Arduino Uno
« em: 02 de Junho de 2012, 10:36 »
Boas...

Já há algum tempo que ando às voltas com isto e não arranjo forma de corrigir este problema que é o seguinte:

Estou a tentar fazer a interface entre um DS1672 e o Arduino e o que acontece é que depois de eu o inicializar ele simplesmente não incrementa, ficando sempre no mesmo valor.

Já verifiquei os contactos da placa, troquei de DS1672 e cristal e tenho a resistencia de PULL-UP no \RST.

Esta é a minha biblioteca:
Código: [Seleccione]
#include <Wire.h>
#define RTCaddr 0x68


void start_counter(unsigned char s0,unsigned char s1,unsigned char s2,unsigned char s3)
{
     char zero = 0;
     Wire.beginTransmission(RTCaddr);
     Wire.write(zero);
     Wire.endTransmission();
     
     Wire.beginTransmission(RTCaddr);
     Wire.write(zero);
     Wire.write(s3); // LSB
     Wire.write(s2);
     Wire.write(s1);
     Wire.write(s0); // MSB
     Wire.endTransmission();
 }

unsigned long read_counter()
{
     char zero = 0;
     Wire.beginTransmission(RTCaddr);
     Wire.write(zero);
     Wire.endTransmission();
     
     Wire.requestFrom(RTCaddr,4);
     unsigned char temp0 = Wire.read();
     unsigned char temp1 = Wire.read();
     unsigned char temp2 = Wire.read();
     unsigned char temp3 = Wire.read();
     
     unsigned long i = (temp0 | (temp1 << 8) | (temp2 << 16) | (temp3 << 24));
     return i;
 }

E este é o código que tenho:

Código: [Seleccione]
#include <Wire.h>
#include <SIS0.h>

unsigned long xpto;
void setup()
{
  unsigned char zz = 1;
  Wire.begin();
  Serial.begin(9600);
  start_counter(zz,zz,zz,zz);
}

void loop()
{
  Serial.println(read_counter());
}
OxyGen #

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.578
  • Helpdesk do sitio
Re: DS1672 + Arduino Uno
« Responder #1 em: 02 de Junho de 2012, 11:08 »
O endereço i2c está correcto?
Avr fanboy

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: DS1672 + Arduino Uno
« Responder #2 em: 02 de Junho de 2012, 14:34 »
Sim está... 1101000 -> 0x68 ....
OxyGen #

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.578
  • Helpdesk do sitio
Re: DS1672 + Arduino Uno
« Responder #3 em: 02 de Junho de 2012, 22:02 »
Isso é já com ou sem o shift de uma casa á direita(acho que é á direita :/ ) do endereço i2c?
Avr fanboy

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: DS1672 + Arduino Uno
« Responder #4 em: 03 de Junho de 2012, 00:55 »
Estou a usar o endereço que aparece no datashet aquando dos exemplos de comunicação...
OxyGen #

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: DS1672 + Arduino Uno
« Responder #5 em: 03 de Junho de 2012, 13:17 »
Então devia funcionar...
Ele está a mandar o ACK?

Isso tem de ser visto no osciloscópio...

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: DS1672 + Arduino Uno
« Responder #6 em: 03 de Junho de 2012, 15:15 »
Eu consigo programar os valores iniciais... porque quando inicializo e depois vou ler, ele tem sempre os mesmos valores e não incrementa...

P ex: valores iniciais todos a 1: ele manda-me de volta tudo a 1 como eu programei inicialmente mas não incrementa.

Já funcionou várias vezes, mas deixa sempre de funcionar... tenho tudo bem ligado... ate ja o troquei de sitio na placa branca e os fios e inclusive a polaridade do cristal e até troquei o proprio cristal de 32768Hz
OxyGen #

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: DS1672 + Arduino Uno
« Responder #7 em: 03 de Junho de 2012, 22:47 »
Epah a pergunta pode ser estupida, mas estás a usar pull-ups, certo? xD
Já agora aproveita e diz o valor.

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: DS1672 + Arduino Uno
« Responder #8 em: 04 de Junho de 2012, 22:33 »
Sim... estou a usar 3... I2C e o RST 2K7
OxyGen #

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: DS1672 + Arduino Uno
« Responder #9 em: 04 de Junho de 2012, 23:07 »
Sim... estou a usar 3... I2C e o RST 2K7


nao percebi bem  o que escreves-te mas poem res de 4k7 a fazer de pull-up de sda a vcc e scl ao vcc