Forum: Compiler & IDEs ATtiny2313 und EEprom lesen/schreiben prob.


von Mario Leonhardt (Gast)


Lesenswert?

Hallo

Ich habe ein Problem mit dem Attiny2313 und dem EEprom lesen/schreiben.
Meine Routinne zu lesen:

unsigned char EEGET(int location) {
  while(EECR & (1<<EEPE)); /* Check if EEPROM is ready*/
  EEAR = location; /* Write EEPROM address register*/
  EECR |= (1<<EERE); /* Set the read strobe*/
  return EEDR;
}

und die zum schreiben:

void EEPUT(int location, unsigned char byte)  {
  while (EECR & (1<<EEPE)); /* Check if EEPROM is ready*/
  EEAR = location; /* Write EEPROM address register*/
  EEDR = byte; /* Write EEPROM data register*/
  EECR |= (1<<EEMPE); /* Set master write enable signal*/
  EECR |= (1<<EEPE); /* Set write strobe*/
}

Beide Routinen sind die denem Handbuch zum attiny2312 ähnlich.
Allerdings steht im Handbuch diese readRoutine:

unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}

Das EEWE Bit gibt es aber meiner meinung nach nicht, ist wohl ein
fehler...

Wenn ich nun meine Routinen Teste mit:

  EEPUT(1,5);
  myDelay(); //mal kurz warten...
  if (EEGET(1)== 5) {
    PORTB |= (1<<PB3);
  }

leuchtet die LED an PORTB3 nie... (ich kann sie manuell schalten,
richtungsregister usw. alles i.o.).
Ich bin am verzweiffeln mit diesem EEprom und hoffe auf Eure Hilfe!
Ach ja, ich verwende einen externen 10Mhz Quaz zur Taktung des
Tini2313, kann es sein das die 10Mhz Taktung das Problem für die EEprom
zugriffe ist? Was muss ich evtl. noch einstellen das das mit dem 10MHz
takt funktioniert?

Vielen Dank schon mal...
MfG dg1leo

von Rolf Magnus (Gast)


Lesenswert?

Warum nimmst du nicht die fertigen EEPROM-Routinen aus der avr-libc?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Weil er erstmal seine avr-libc auf 1.2.5 hochziehen müsste...

von Slowflyer (Gast)


Lesenswert?

Hallo,

ich hatte vor kurzem auch ein Problem mit dem EEPROM beschreiben.
(http://www.mikrocontroller.net/forum/read-2-253001.html) Hab auch
alles so gemacht, wie es in dem Datenblatt stand. Dummerweise ging es
trotzdem nicht. Wie vorhin von Jörg vorgeschlagen, hab ich die libc auf
1.2.5 gebracht und siehe da, die Standardroutinen fürs EEPROM haben auf
einmal funktioniert. Warum und wie auch immer: es hat geholfen. Was ich
nicht ausprobiert habe, die Routinen in Assembler zu schreiben.

von Mario Leonhardt (Gast)


Lesenswert?

Dank euch...

Ich hab den Fehler gefunden, es hing bei mir dann doch mit der
takfrequenz zusammen. Ich hatte mein makefile für das projekt per
editor richtig angepasst (10MHz) und in das von avr studio 4 angelegte
verzeichniss gespeichert. Allerdings hatte mir wohl avr-studion beim
builden das makefile geändert, da ich unter den projektoptionen im
avr-studio nicht noch mal extra die 10MHz angegeben hatte...
Die avr-libc hatte ich schon auf den stand 1.2.5 gebracht nachdem ich
beim suchen nach lösungen für mein problem schon über den thread
gestossen bin, hatte aber auch nichts geändert.
Da ich aber genau wissen wollte was wann wie passiert hab ich zunächst
die EEPUT und EEGET routine verwendet. Ich geh mal stark davon aus das
jetzt die EEprom-Routinnen auch funktionieren.

Habt Dank...
Leo

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.