AVR EPPROM wird nur bis zu einem bestimmten Punkt ausgelsen

OP #4453168
Lesenswert?
• ▲
▼
Ich benutze ein ATtiny84A

folgendes Problem.
Ich Lese immer abwechselnd ein Byte aus dem EEprom und sende dieses über 
I2C zum Master. Bei jedem zweiten Aufruf wird nur das ACK vom I2C-Bus 
detektiert. Sobald ich an einem Stück mehr als ca. 85 Bytes auslese kann 
ich nur durch einen Hardreset das Programm wieder zum laufen bringen.
Ich würde gerne mindestens 128 Bytes über I2C-verschicken können.


Die folgende Funktion wird bei einem USI_OVF Interrupt aufgerufen.

Prallel zum USI_OVF läuft noch ein Timer. Dieser Timer wird am Anfang 
des USI_OVF zurückgesetzt. Beim Überlauf wird der I2C Übertragung 
resetet und auf den Empfang von neuen Werten vorbereitet.   (Hab 
irgendwie keine schönere Lösung hierfür gefunden.)
1
void I2C_SendEepromData(uint8_t Register)
2
{ 
3
  if (eeprom_counter&1)  // eeprom_counter is odd
4
  {
5
    USIDR = 0;
6
    USISR = 14;
7
    //PORTB ^= (1 << PB1 );
8
    
9
  }
10
  else // eeprom_counter is even  Read ACK
11
  {
12
    
13
    eeprom_busy_wait();
14
    I2C_DataAck( eeprom_read_byte( cali_ptr + Register +(eeprom_counter >> 1)) , 0);
15
  }
16
  eeprom_counter++;
17
}

kurze Erklärung zu einen Variablen:
cali_ptr:  pointer auf ersten EEPROM Speicherplatz
Register: Start-Byte ab dem geschrieben werden soll
eeprom_counter einfacher Zähler
I2C_DataAck gibt Daten auf EEProm aus und setzt den USI Zähler)


Also jemand eine Idee woran es liegen könnte, warum nur ein Teil der 
Daten übertragen wird?

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.