mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RTC funktioniert nicht mehr


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
/*******************************************************
  Funktion :    I2C sende Daten
  Eigenschaften:  Sende 1 Byte über Bus
  Übergabewert:  1 Byte Daten
  Rückgabewert:  -
********************************************************/
void I2C_send(uint8_t data)
{
  uint8_t twst;

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

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

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!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

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

Kann mir wirklich niemand helfen?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.