Forum: Mikrocontroller und Digitale Elektronik I2C Fehler beim anzeigen.


von µC-Einsteiger (Gast)


Lesenswert?

Bekomme den Baustein(RV-3029-C2) nicht zum laufen!

zeigt immer 255:255 an.


i2c_start();
i2c_write(RV3029_lesen);
Minuten = i2c_read(1);
Stunden = i2c_read(0);
i2c_stop();

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(RV3029C2_W_MIN);
i2c_write(0x05);
i2c_write(0x03);
i2c_stop();

Sollte ja hier dann 03:05 ausgeben was allerdings nicht passiert.

Event. dann noch die Hilfe das man den Wert 24 Uhr in eine Variable 
speichert um danach auf 24Std vergleichen kann um Messwert zuspeichern.

von _gast (Gast)


Lesenswert?

Der Fehler liegt eindeutig in Zeile 42.



Soll heißen: Code+Schaltplan her, hellsehen können wir (noch?) nicht.

von µC-Einsteiger (Gast)


Lesenswert?

schaltplan is funktioniert. 4k7 Pullupwiderstände sind drin. wie gesagt 
es geht mir nur rein um die anzeige um das weiterverabeiten.

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(0x00);
i2c_write(0x01);    //1Hz Takt einschalten
i2c_stop();

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(RV3029C2_W_MIN);
i2c_stop();

i2c_start();
i2c_write(RV3029_lesen);
Minuten = i2c_read(1);
Stunden = i2c_read(0);
i2c_stop();

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(RV3029C2_W_MIN);
i2c_write(0x05);
i2c_write(0x03);
i2c_stop();

uart_puts( dtostrf( Stunden, 1,0,string ) );
uart_puts(":");                uart_puts( dtostrf( Minuten, 1,0,string ) 
);
uart_puts(";");

zur Anzeige nutze ich HTERM. da ich die Uhr nur zur abfrage brauch ob es 
24 Uhr ist. Sobald 24 Uhr muss wert im EEPROM gespeichert werden das ist 
anversich ja das kleinere Problem. Wie gesagt es geht um die UHR!!!!!!

von Michael A. (Gast)


Lesenswert?

Bekommst du beim I2C-Zugriff auf den Slave jeweils ein Ack auf dem 0-ten 
Bit?

von Michael A. (Gast)


Lesenswert?

Edit:  ... 9-ten Bit

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

µC-Einsteiger schrieb:
> da ich die Uhr nur zur abfrage brauch ob es
> 24 Uhr ist.

24 Uhr? Diese Zeit gibt es nicht, das machen nur komische Digitaluhren 
von Siemens. Normale 24-Stunden-Uhren zählen von 00:00:00 bis 23:59:59.

> uart_puts( dtostrf( Stunden, 1,0,string ) );

Glaubst Du, daß dtostrf die geeignete Funktion zum Umwandeln eines int 
in einen Klartext ist?

von µC-Einsteiger (Gast)


Lesenswert?

Rufus:

hatte die ganze Zeit keine Probleme um die Werte zu übertragen!

frag mich gerade wie ich die Uhr halt schreibn soll und dann das ganze 
in einem if zu vergleichen das er dann die werte wo er darin hochgezählt 
hat im EEPROM speichert.

von µC-Einsteiger (Gast)


Lesenswert?

#define RV3029C2_W_MIN        0x09
#define RV3029C2_W_STD        0x0A
#define RV3029_schreiben      0xAC
#define RV3029_lesen          0xAD

int main(void)
{
unsigned char Minuten;
unsigned char Stunden;

i2c_init();

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(0x00);    //Einstellungen
i2c_write(0x01);    //1Hz Takt für Uhr einschalten
i2c_stop();

i2c_start();
i2c_write(RV3029_schreiben);
i2c_write(RV3029C2_W_MIN);
i2c_write(0x05);
i2c_write(0x03);
i2c_stop();

while(1)
{
  i2c_start();
  i2c_write(RV3029_schreiben);
  i2c_write(RV3029C2_W_MIN);  //Adresse Minuten
  i2c_stop();

  i2c_start();
  i2c_write(RV3029_lesen);
  Minuten = i2c_read(1);
  Stunden = i2c_read(0);
  i2c_stop();

  uart_puts( dtostrf( Stunden, 1,0,string ) );  //Senden an USART
  uart_puts(":");
  uart_puts( dtostrf( Minuten, 1,0,string ) );  //Senden an USART
  uart_puts(";");
}
}

Hier ist mein kleines Programm wo mir doch so viele Sorgen bereitet. 
Vielleicht weis jemand mit dabei zu helfen bekomme immer 255:255 
ausgegeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.