Forum: Mikrocontroller und Digitale Elektronik Problem mit EEPROM ATtiny45


von Marcel Z. (7_zwerge)


Lesenswert?

Abend,

wie im Titel schon beschriebn habe ich ein Problem beim Beschreiben des 
internen EEPROM des Tiny45. Programmiert wird mit AVR Studio in C über 
winAVR. Geflasht wird der Tiny über DebugWire mit dem Dragon (Fuse 
DebugWire Enable über HVSP vorher aktiviert). Der µC läuft mit dem 
internen RC-Oszillator und einem Teiler von 8.

Der verwendete Treiber läuft auf einem ATmega 88 ohne Probleme und ist 
auch der Code aus dem Datenblatt:
1
global void vEE_Write(uint8 Parameter, uint8* pBuffer)
2
{
3
#if(EEPROM_WRITE_ACCESS == TRUE)
4
  while(Get_Bit(EECR, EEPE));  // wait for completion of prev.   
5
  EEAR = Parameter;       // set up adress register
6
  EEDR = *pBuffer;             // set up data register  
7
  Set_Bit(EECR, EEMPE);       // write logial one to EEMPE
8
  Set_Bit(EECR, EEPE);       // start EEPROM write  by setting EEPE
9
#endif  
10
}
11
12
global void vEE_Init(uint8* pBuffer)
13
{
14
  uint8 i;
15
16
  while(Get_Bit(EECR, EEPE));  // wait for completion of prev. write
17
  
18
  for(i=0; i<EndOfEE_Data; i++)
19
  {
20
    EEAR = i;       // set up adress register
21
    Set_Bit(EECR, EERE); // start EEPROM read by setting EERE
22
    *pBuffer = EEDR;     // save data from data register
23
    pBuffer++;  
24
  }          
25
}

Was geht bzw. was geht nicht. Das Auslesen der Daten in vEE_Init 
funktioniert. Nachdem die Funktion vEE_Write() aufgerufen wurde halte 
ich das Programm an und lasse mir den Inhalt des EEPROMs in AVR Studio 
anzeigen und siehe da, keine Werte gespeichert. Werte, die ich mit den 
Dragon ins EEPROM schreibe, werden gespeichert. Wenn ich die Funktion 
vEE_Write() mit dem Dragon Zeile für Zeile durchklicke, passt auch 
alles. Also richtige Adresse geladen, Bits werden richtig gesetzt und 
auch in dem Datenregister steht der richtige Wert, wird aber nicht ins 
EEPROM übernommen.

So langsam gehen mir auch die Ideen aus, woran es liegen könnte. Hatte 
schon jemand ähnliches Problem? Verträgt sich beim Attiny x5 das EEPROM 
mit DebugWire nicht? DebugWire ausschalten geht leider nicht, da der µC 
bereits auf der PCB drauf ist.

Vielen Dank schon mal im Voraus und gute Nacht
Marcel

von Marcel Z. (7_zwerge)


Lesenswert?

Abend,

hat den wirklich keiner mehr ein Tipp für mich?
Ich habe auch mal die Interrupts deaktiviert, ohne Erfolg aber.
1
cli();
2
Set_Bit(EECR, EEMPE);       // write logial one to EEMPE
3
Set_Bit(EECR, EEPE);       // start EEPROM write  by setting EEPE
4
sei();

Ich habe auch schon anstatt Set_Bit(EECR, EEPE) EECR |= 0x02 und EECR = 
0x02 geschrieben, hilft aber auch nix.

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.