Forum: Mikrocontroller und Digitale Elektronik RTC funktioniert nicht mehr


von Gast (Gast)


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!

von Gast (Gast)


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?

von Gast (Gast)


Lesenswert?

Leute bitte! Ich habe jetzt das andere STK500 geholt und mit dem geht es 
auch nicht. Hat wirklich niemand eine Idee, was daran Schuld sein 
kann???

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.