www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90S1200 Simulieren mit EEPROM


Autor: Günter Vollweiler (Gast)
Datum:

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

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aboniert

Autor: plitzi (Gast)
Datum:

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

Autor: Günter Vollweiler (Gast)
Datum:

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

Autor: plitzi (Gast)
Datum:

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

Autor: Günter Vollweiler (Gast)
Datum:

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

Autor: Peter Dannegger (Gast)
Datum:

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


Peter

Autor: Sven (Gast)
Datum:

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

Autor: Peter Dannegger (Gast)
Datum:

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

Autor: Günter Vollweiler (Gast)
Datum:

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

Autor: Peter Dannegger (Gast)
Datum:

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

Autor: Thomas O. (Gast)
Datum:

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

Autor: Günter Vollweiler (Gast)
Datum:

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

Autor: Peter Dannegger (Gast)
Datum:

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

Autor: Thomas O. (Gast)
Datum:

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

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.