Forum: Mikrocontroller und Digitale Elektronik AVR EPPROM wird nur bis zu einem bestimmten Punkt ausgelsen


von Marius D. (lonestarr102)


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?

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.