mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit EEPROM ATtiny45


Autor: Marcel Zimmermann (7_zwerge)
Datum:

Bewertung
0 lesenswert
nicht 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:
global void vEE_Write(uint8 Parameter, uint8* pBuffer)
{
#if(EEPROM_WRITE_ACCESS == TRUE)
  while(Get_Bit(EECR, EEPE));  // wait for completion of prev.   
  EEAR = Parameter;       // set up adress register
  EEDR = *pBuffer;             // set up data register  
  Set_Bit(EECR, EEMPE);       // write logial one to EEMPE
  Set_Bit(EECR, EEPE);       // start EEPROM write  by setting EEPE
#endif  
}

global void vEE_Init(uint8* pBuffer)
{
  uint8 i;

  while(Get_Bit(EECR, EEPE));  // wait for completion of prev. write
  
  for(i=0; i<EndOfEE_Data; i++)
  {
    EEAR = i;       // set up adress register
    Set_Bit(EECR, EERE); // start EEPROM read by setting EERE
    *pBuffer = EEDR;     // save data from data register
    pBuffer++;  
  }          
}

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

Autor: Marcel Zimmermann (7_zwerge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abend,

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

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.