RTC funktioniert nicht mehr

Gast #1158897
Lesenswert?

Hi Leute, ich bekomme bald eine Krise.

Ich mache zur Zeit mit 2 anderne Leuten ein Projekt und dafür haben wir 
einen atmega32 mit einem RTC über I2C verbunden. Jetzt hat letzte Woche 
mein Kollege die Schaltung mit nach Hause genommen und seitdem geht es 
nicht mehr. Bei der Funktion:
1
/*******************************************************
2
  Funktion :    I2C sende Daten
3
  Eigenschaften:  Sende 1 Byte über Bus
4
  Übergabewert:  1 Byte Daten
5
  Rückgabewert:  -
6
********************************************************/
7
void I2C_send(uint8_t data)
8
{
9
  uint8_t twst;
10

11
  TWDR = data;
12
  TWCR = (1<<TWINT) | (1<<TWEN);          // Sende Daten
13
  while(!(TWCR & (1<<TWINT)));          // Warte bis TWINT gesetzt ist(Also senden fertig)
14

15
  twst = TWSR & 0xF8;          
16
  if((twst != TW_MT_DATA_ACK) && (twst != TW_MR_SLA_ACK) && (twst != TW_MT_SLA_ACK))    // Status Register richten Status? Ansonsten ERROR
17
  {
18
    I2C_error();              
19
  }
20
}

Komme ich immer in die Funktion I2C_error(), und twst zeigt 0x00 an. Im 
Datenblatt steht folgendes:

$00 Bus error due to an illegal
START or STOP condition
No TWDR action 0 1 1 X Only the internal hardware is affected, no STOP 
condition
is sent on the bus. In all cases, the bus is released
and TWSTO is cleared.

Hat jemand eine Idee was das sein könnte? Ich bin wirklich schon am 
durchdrehen, wir sollten schon viel weiter sein und viel mehr haben und 
jetzt funktioniert gar nichts mehr. Ich benutze übrigens gerade ein 
anderes STK500, kanns an den Jumper einstellungen liegen? RTC ist ein 
ds1340. Bitte helft mir, ich kanns euch gar nicht ausdrücken, wie 
dankbar ich euch wäre!
Gast #1158959
Lesenswert?

Hi,

nachdem ich die Schaltung neuaufgebaut habe, gibt es wenigstens nicht 
mehr diesen ERROR. Allerdings bleibt es trotzdem noch hängen:
1
/*******************************************************
2
  Funktion :    Hole Daten von I2C
3
  Eigenschaften:  Holt Daten vom anderen I2C Gerät
4
  Übergabewert:  -
5
  Rückgabewert:  1 Byte Daten
6
********************************************************/
7
uint8_t I2C_get(void)
8
{
9
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
10
  while(!(TWCR & (1<<TWINT)));          // Warte bis Übertragung fertig
11
  return TWDR;                  // return die Daten
12
}

Hier bleibt es in einer Endlosschleife hängen. TWCR ist 0b01000100

Kann mir wirklich niemand helfen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren