mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEProm schreiben/ Lesen.


Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: crazy horse (Gast)
Datum:

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

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.