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!