Forum: Mikrocontroller und Digitale Elektronik EEProm schreiben/ Lesen.


von Freak5 (Gast)


Lesenswert?

ich wollte Daten in das EEPROm meines ATmega 16s schreiben um diese dann
am PC auszulesen.
Doch obwohl die LED-Anzeige das Beenden des Programmes angezeigt hat,
zeigt Ponyprog den Speicher als leer an, wenn man den Blauen Teil der
geladenen Daten als EEPRom verstehen kann.
Der Code ist:
.include "m16def.inc"
Ldi r16, 0XFF
.def temp = r16
out DDRA, r16

         ldi temp, LOW(RAMEND)             ; LOW-Byte der obersten
RAM-Adresse
         out SPL, temp
         ldi temp, HIGH(RAMEND)            ; HIGH-Byte der obersten
RAM-Adresse
         out SPH, temp
call Verzoegerung
 LDI r16, 0b00100000



Out PortA, r16
 LDI r20, 0xF0
Write:  SBIC  EECR,EEWE
  RJMP  Write
  LDI  r16,0
        LDI     r17,0
  OUT  EEARH,r16
        OUT     EEARL,r17
  OUT  EEDR,r20
  SBI  EECR,EEWE

LDI r16, 0b00010000
Out PortA, r16


end:
jmp end

Verzoegerung:
push r16
push r17
push r18

ldi r16,20
Schlr16:

  ldi r17,255
  Schlr17:

    ldi r18,255
    Schlr18:

      nop

    dec r18
    BRNE Schlr18

  dec r17
  BRNE Schlr17

dec r16
BRNE Schlr16

pop r18
pop r17
pop r16
ret

Oder kann Pony Prog den EEprom gar nicht richtig auslesen und zeigt mir
deshalb nur FF?

von Andi (Gast)


Lesenswert?

Du hast vergessen, das Master-Write-Bit (EEMWE) vor dem EEWE zu setzen:

  SBI  EECR,EEMWE ;Erst Schreibschutz deaktivieren
  SBI  EECR,EEWE  ;Dann innerhalb von 4 Takten schreiben

Steht auch im Datasheet:
The EEMWE bit determines whether setting EEWE to one causes the EEPROM
to be written. When EEMWE is set, setting EEWE within four clock cycles
will write data to the EEPROM at the selected address If EEMWE is zero,
setting EEWE will have no effect.
When EEMWE has been written to one by software, hardware clears the bit
to zero after four clock cycles. See the description of the EEWE bit for
an EEPROM write procedure.

MfG
Andi

von Freak5 (Gast)


Lesenswert?

Also muss man diesen Internen Speicher wie einen Externen behandeln->
Erstmal Aktivieren, alle Daten anlegen und dann die Aktivierungsleitung
EEWE kurz auf High setzen.
Zum Wiederholen müsste man dann EEWE wieder löschen, neue Daten anlegen
und wieder auf High setzen, oder?
Danke!

von Freak5 (Gast)


Lesenswert?

P.S.: Kann man einen Avrbraten, indem man ihn in einen Sockel steckt, an
dem die Spannung angelegt ist und dann beim einsetzen sich für eine Sek
um einen Pin versieht?
Ich glaube nämlich einer meiner zwei AVRs ist jetzt hinüber und ich
weis nicht warum, wenn es nicht durch dieses zitterige reinsetzen
passiert ist.

von Andi (Gast)


Lesenswert?

Baldrian wäre nicht schlecht für Dich ;-)
Kann schon passieren das der AVR beim versetzten reinstöpseln in den
Sockel bei Power On defekt geht.
Man setzt auch erst mal 2 der äußeren Pins an, legt ihn flach auf alle
und dann rein.

Nach dem Schreib-Prozedere in das EEPROM mit setzten von EEMWE und EEWE
brauchst Du nix mehr machen.
Eine Prüfung, ob noch ein Schreibvorgang besteht, hast Du am Anfang
sowieso schon durch das Testen von EEWE.
Ist der Schreibvorgang beendet (von der Hardware), werden EEMWE und
EEWE automatisch auf 0 gesetzt.
Ich weis jetzt gerade nicht, wie lange ein Schreibvorgang (1 Byte)
dauert, aber es sind schon ein paar Millisekunden.

MfG
Andi

von Freak5 (Gast)


Lesenswert?

Der AVR ist anscheinend doch heil geblieben. Ich sollte mir mal richtige
Sockel kaufen, wo der Kontakt keine Glückssache ist grr
Danke für die Tipps. Jetzt kann ich alle Debuginfos, welche ich nicht
per LED ausgeben kann im EEPROM speichern, solange ich den code für das
Display am Schiftregister noch nicht fertig getippt habe :-)

von TravelRec. (Gast)


Lesenswert?

Naja, Spannung aus, einsockeln, nochmal gucken, Spannung an ist auch
ziemlich sicher... Ach und bitte daran denken, daß das EEPROM nur etwa
100.000 Schreibzugriffe pro Speicherzelle verkraftet, also wenn Du
vergißt, die EEPROM-Adresse zu verändern und in einer zufälligen
Endlosschleife ständig die gleiche Zelle beschreibst, ist diese sehr
schnell kaporus und somit auf ewig aus dem EEPROM ausmaskiert...

von crazy horse (Gast)


Lesenswert?

was heisst denn kaporus? Ich kanns mir zwar denken, was du meinst - aber
welche Sprache ist denn das?

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.