I2C 24c Code Optimierung Atmega32

Gast #2190008
Lesenswert?
• ▲
▼
Hallo,

ich möchte ein 24C64 Eeprom mit 200-400 aufeinander folgenden Bytes 
beschreiben. Der unten stehende Code funktioniert soweit, jedoch dauert 
das Schreiben um die 2-3s aufgrund dieses Befehls _delay_ms(EWAIT); 
(5ms).
Wenn ich die Zeile weg lasse kommt es zu Fehlern. Kann ich stattdessen 
irgendwie TWINT abfragen?
Achja ich möchte nicht seitenweise beschreiben.

Viele Grüße
1
void i2c_start(void) 
2
  {
3
  TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);   
4
  while ((TWCR & _BV(TWINT)) == 0) ;       
5
  }
6

7

8
void i2c_stop(void) 
9
  {
10
  TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);          
11
  {
12

13

14
void i2c_send(uint8_t DataByte) 
15
  {
16
  TWDR = DataByte;
17
  TWCR = _BV(TWINT) | _BV(TWEN);           // clear interrupt to start transmission
18
  while ((TWCR & _BV(TWINT)) == 0) ;         // wait for transmission
19
  }
20

21

22
void EEPROM_ByteWrite(uint16_t addr, uint8_t wert) 
23
  {
24
  again:
25
    i2c_start();
26
    i2c_send(BASEADR | TW_WRITE);
27

28
    if ((TWSR & 0xF8) != 0x18)
29
      {
30
      i2c_stop();
31
      goto again;
32
      }
33

34
    i2c_send(addr>>8);              
35
    i2c_send(addr);
36

37
    i2c_send(wert);
38
    i2c_stop();
39
    _delay_ms(EWAIT);              // warten fuer 24Cxx
40
  }

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.