Forum: Mikrocontroller und Digitale Elektronik AT90S1200 Simulieren mit EEPROM


von Günter Vollweiler (Gast)


Lesenswert?

Hallo,
weiss jemand, ob es Simulationsprobleme gibt, wenn im Code auf EEPROM
zugegriffen wird ?
Zu EEPROM speichern:
Folgender Code:
.....
cli
code_speichern1:  ;Beschreiben EEPROM
  ldi  r17,3
  ldi  r18,5    ;zu speicherndes Byte ...
  out  eedr,r18  ;... in EEPROM-Datenregister
  out  eear,r17  ;Adresse in EEPROM-Adressregister
  sbi  eecr,eewe  ;... setzen
code_speichern2:
  sbic  eecr,eewe  ;wenn eewe-Bit gesetzt ...
  rjmp  code_speichern2 ;... warten
....
Problem:
Beim Schreiben EEPROM hängt sich Programm auf, weil das Bit in eecr
nicht rückgesetzt wird.

Zu EEPROM lesen:
...
  clr  r17
code_ausw2:
  out  eear,r18  ;Adresse in EEPROM-Adressregister
  sbi  eecr,eere  ;
  sbic  eecr,eere  ;wenn eere-Bit gesetzt ...
  rjmp  code_ausw2  ;... warten
  in  r17,eedr  ;Byte aus EEPROM auslesen ...

Folgendes Problem:
Obwohl ich den EEPROM initialisiert habe mit
.cseg
.org 0x00  ;initialisierewn EEPROM
eeNULL0:  .DW 0x3F03,0x6D67 und so weiter
kommen beim Lesen andere Werte raus.
Anmerkung: Lt. Atmel könnte auf Abfrage eere verzichtet werden; geht
aber trotzdem im Simulator nicht.

Besten Dank im Voraus

von Thomas O. (Gast)


Lesenswert?

aboniert

von plitzi (Gast)


Lesenswert?

Das Problem biem Lesen ist eigentlich einfach. Der Simulator kennt Deine
*.eep nicht und will sie auch gar nicht kennen. Um aber vernünftige
Werte bei der Simulation aus dem EEPROM lesen zu können, musst Du zu
Begin der Simulation diese *.eep-Datei in den Speicherbereich für den
EEPROM hochladen. Also Simulation starten (ging früher mal mit F5 :( )
und danach über Debug->Up/Download Memories Deine eep-Datei "Load from
File" laden.

Jörg

von Günter Vollweiler (Gast)


Lesenswert?

Hallo Jörg,
vielen Dank. Damit ist wenigstens das EEPROM-Leseproblem gelöst. Aber
kann ich Deiner Antwort entnehmen, dass das  S c h r e i b e n  in den
EEPROM per Code beim Simulator nicht funktioniert ? Er bleobt ja immer
an der Abfrage des EEWE-Bits im Register EECR hängen, da dieses Bit vom
Simulator als Quittung nach erfolgreichem Schreiben rückgesetzt werden
sollte, dies aber nicht tut.
Gruss Günter

von plitzi (Gast)


Lesenswert?

Stimmt, ich habe es gerade mal schnell selbst im aktuellen AVR-Studio
getestet. Nach dem 1. Schreibzyklus wird das EEWE offensichtlich vom
Simulator nicht wieder zurückgesetzt, auch nach langer Wartezeit (der
Schreibzyklus dauert ja ca. 2,5-4ms beim 1200er). Möglicherweise ist
das aber dem etwas anderen Algorithmus des 1200er EEPROMs geschuldet.
Ich kann mich nicht entsinnen, bei anderen AVRs auf solche Problem
gestoßen zu sein, also vermutlich ein spezielles Problem der Simulation
beim AT90S1200:(.

Vielleicht steht ja etwas dazu in den Fehlerbeschreibungen des
AVRStudios?

Jörg

von Günter Vollweiler (Gast)


Lesenswert?

Hallo, nochmals vielen Dank für die Unterstützung. Wenigstens weiss ich
nun, dass das Problem nicht bei mir lag. Eine Fehlerbeschreibung habe
ich übrigens bei atmel nicht gefunden.
Gruss Günter

von Peter Dannegger (Gast)


Lesenswert?

Ohne externen Unterspannungs-Reset-IC wirst du am EEPROM aber keine
Freude haben, dann ist er sehr vergeßlich.


Peter

von Sven (Gast)


Lesenswert?

@Peter Dannegger

>>Ohne externen Unterspannungs-Reset-IC wirst du am EEPROM aber keine
Freude haben, dann ist er sehr vergeßlich.

Und wie simuliert man den?

Sven

von Peter Dannegger (Gast)


Lesenswert?

"Und wie simuliert man den?"


Du bist ein Scherzkeks !

Hardwarefehler simuliert man nicht sondern beseitigt sie.

Beim AT90S1200 wird Atmel das aber definitiv nicht mehr tun, sondern
auf den ATTiny2313 als Nachfolger verweisen.
Und bei dem muß man dann eben den Brownout-Reset einschalten, wenn man
den EEPROM nutzen will.



Peter

von Günter Vollweiler (Gast)


Lesenswert?

Nur damit ich das richtig verstehe.
Wenn ich den EEPROM nur lesend nutze (ich lade die Daten beim
programmieren des AT90S1200) ist doch ein externer Unterspannungs-Reset
nicht nötig ?

Günter

von Peter Dannegger (Gast)


Lesenswert?

"Wenn ich den EEPROM nur lesend nutze (ich lade die Daten beim
programmieren des AT90S1200) ist doch ein externer
Unterspannungs-Reset
nicht nötig ?"


Lach lach, schön wärs.

Ich hatte im EEPROM Texte fürs LCD abgelegt, da der ja kein LPM kann.

Es war (leider gar nicht) lustig, wie nach jedem Einschalten mehr und
mehr Zeichen unleserlich wurden.


Peter

von Thomas O. (Gast)


Lesenswert?

Hallo,

kann mir mal jemand diese Problematik erklären? Wodurch kommt diese
Unterspannung, schlechte Stromversorgung oder schwingt der Regler am
Anfang etwas? Man kann den AVR ja so programmieren das es erst nach
64mSek. losgeht bzw. diese Zeit durch ein RC Glied an VCC und GND
verlängern. Man könnte aber auch einen Schleife an den Anfang des Progs
setzten um erst nach 1Sek. das eigentliche Prog zu starten.

von Günter Vollweiler (Gast)


Lesenswert?

Ich versthe das auch nicht ganz. Die einzige Erklärung für ein
Unterspannungs-Reset-IC ist die, dass das Teil auch beim Abschalten der
Spannung sein EEPROM-Gedächtnis verlieren kann. In diesem Fall helfen
weder ein RC-Glied noch eine Programmschleife ?

Günter

von Peter Dannegger (Gast)


Lesenswert?

Irgendwo im Netzteil hast Du einen dicken Elko, der sich nach dem
Abschalten ganz langsam entlädt.

Und irgendwann reicht die Spannung für die CPU nicht mehr aus, um
einwandfrei zu arbeiten und sie macht nur Unsinn.
Sie kann z.B. einen Befehl falsch dekodieren, z.B. als Schreiben des
EEPROM, obwohl ein solcher nicht im Flash steht.


Der Unterspannungsreset-IC soll nun die CPU im Reset halten, wenn beim
Einschalten die VCC noch zu klein ist bzw. beim Auschalten langsam zu
klein wird.


Peter

von Thomas O. (Gast)


Lesenswert?

Hallo,

jetztz ists mir klar. Kann es passieren das die I/O Pins sich auch
undefiniert ändern? Ich verwende nämlich externes EEPROM oder betrifft
das nur den internen?

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.