
Zitat von
Technik_Amateur
Code:
...
if (!TWIM_Start (SlaveAddress, TWIM_WRITE))
{
TWIM_Stop ();
}
else
{
TWIM_Write (0b00000000); //Register-Pointer
TWIM_Write (0b00000000); //sec
TWIM_Write (0b01001000); //min
TWIM_Write (0b00011001); //stunde
TWIM_Write (0b00000011); //wochentag
TWIM_Write (0b00000101); //tag
TWIM_Write (0b00010110); //Monat
TWIM_Write (0b00011001); //jahr
TWIM_Write (0b00000000); //control
TWIM_Stop ();
_delay_ms(1000);
}
... scheitere ich schon beim Schreiben (stellen der Uhr) ...
Wie wärs, wenn Du uns auch mal Deinen Code zum Schreiben/Lesen per I²C zeigst. Ich fürchte, dass da ein (DER?) Hund begraben liegt. Bei mir sehen z.B. die Schreib-/Lesebefehle so aus (Beispiel - läuft *gg*):
Code:
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_WRITE 0
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_READ 1
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Lesen vom Slave
if(!(i2c_start(SLAVE_MoCo+I2C_WRITE))) //Slave bereit zum schreiben/lesen?
{ //
// - - - - - - - - - - - - - - - - - - - -
i2c_start(SLAVE_MoCo+I2C_WRITE); // Slave bereit zum schreiben/lesen?
i2cdmy = i2c_write(0x00); // Buffer Startadresse 0 zum Auslesen
i2c_stop(); //
i2cdmy = i2c_start(SLAVE_MoCo+I2C_READ); // <<<### Lesen beginnen
btst1 = i2c_read (ACK); // 1. von 5 Bytes lesen...
btst2 = i2c_read (ACK); //
btst3 = i2c_read (ACK); //
btst4 = i2c_read (ACK); //
btst5 = i2c_read (NAK); // letztes Byte lesen, darum NAK
i2c_stop(); // Zugriff beenden
} //
else // Wenn Fehler, dann nelde jetzt:
{ // Lesefehler, dazu Fehlerblinken
uputs0("\r\n\tKein Lesen möglich.\r\n"); //
i2cerr = 0b00000001; // i2c-read nicht möglich
for(i=0; i<2; i++) { // Fehlermeldung : LED i-fach blinken
SetBit(PORTC, 2); // LED EIN, HELL
waitms(3); //
ClrBit(PORTC, 2); // LED AUS, Dunkel
waitms(47); } // Ende for(i=0; i<..; i++) ==> LED ist AUS AUS
} // Ende if(!(i2c_start(SLAVE_MoCo+I2C_WRITE)))
// - - - - - - - - - - - - - - - - - - - -
Und !!! denk bitte dran, gelesen wird bei I²C immer von der ungraden Adresse . . . und natürlich wie Dirk schreibt, müsste dem Controller mitgegeben werden wo >vom Target< er denn lesen soll.

Zitat von
Technik_Amateur
RTC DS1307 antwortet nicht trotz richtiger Adresse
Denn es sind immer ZWEI Adressen und Write ist nur die gerade Adresse.
Lesezeichen