LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: OxyGen 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:
#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:
#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());
}
-
O endereço i2c está correcto?
-
Sim está... 1101000 -> 0x68 ....
-
Isso é já com ou sem o shift de uma casa á direita(acho que é á direita :/ ) do endereço i2c?
-
Estou a usar o endereço que aparece no datashet aquando dos exemplos de comunicação...
-
Então devia funcionar...
Ele está a mandar o ACK?
Isso tem de ser visto no osciloscópio...
-
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
-
Epah a pergunta pode ser estupida, mas estás a usar pull-ups, certo? xD
Já agora aproveita e diz o valor.
-
Sim... estou a usar 3... I2C e o RST 2K7
-
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