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.
Der Fehler liegt eindeutig in Zeile 42. Soll heißen: Code+Schaltplan her, hellsehen können wir (noch?) nicht.
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!!!!!!
Bekommst du beim I2C-Zugriff auf den Slave jeweils ein Ack auf dem 0-ten Bit?
µ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?
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.
#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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.