-         
Ergebnis 1 bis 6 von 6

Thema: Verständnisfrage EEPROM-Daten

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628

    Verständnisfrage EEPROM-Daten

    Anzeige

    Hallo!

    Habe nun schon ein wenig im Netz herumgesucht, wurde aber leider nicht fündig (eventuell falsche Begriffe verwendet?).
    Um es gleich zu sagen: Es ist mir ein wenig peinlich diese Frage zu stellen, denn ich programmiere nun schon fast ein Jahr in Bascom und habe auch schon größere Projekte realisiert - eigentlich sollte ich die ganze Thematik ja schon wissen. Aber irgendwie hat sich mir das immer unterzogen, beziehungsweise war es mir immer möglich, ohne dieses Grundwissen meine Projekte zu realisieren.

    Es geht um folgendes:
    Angenommen, ich möchte Daten ins EEPROM schreiben, so mache ich dies so:
    Code:
    Dim A as Byte
    
    Writeeeprom A , 10
    
    End
    Oder so:
    Code:
    Dim A as Byte
    Dim B as Eram Byte
    
    B=A
    
    End
    Das Ganze funktioniert auch soweit.
    Nun aber zu meiner Frage:
    Soweit ich das mitbekommen habe, werden die Daten im HEX-Format ins EEPROM geschrieben und kann sich auch mit Bascom auslesen. Dann sehe ich zum Beispiel "1E" in einer Zelle stehen. Dies bedeutet den Wert 30 (habe ich im so eingegeben). Wie setzt sich nun dieses "1E" zusammen?
    Im Buch von Claus Kühnel habe ich ein Programmbeispiel gesehen, dass die Funktion Writeeeprom A , &H60 beinhaltet. Welchen Zahlenwert hat "&H60"? An welche Zelle wird dann der Wert geschreiben?

    Wieviel Platz besitzt eine einzelne Speicherzelle? Ein Byte? Ein Word?

    Ich hoffe, ihr könnt mir die ganze Thematik etwas genauer erläutern! Besten Dank schon im Vorraus!

    Gruß
    Thomas

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.796
    Soweit ich das mitbekommen habe, werden die Daten im HEX-Format ins EEPROM geschrieben ...
    Die Daten sind "elektrisch" als Nullen und Einsen gespeichert, also z.B. ein Byte als 8 Nullen/Einsen (=Bits). Die Dezimal-Zahl 7 kann man in der Binär-Form so darstellen:
    &B00000111
    ... oder in der Hexadezimal-Form:
    &H07

    Die Darstellung einer Zahl hat nichts mit der Art der Speicherung im EEPROM zu tun.

    Ein Word besteht aus 16 Nullen/Einsen (=Bits):
    &B0000000000000000
    ... hexadezimal sieht das so aus:
    &H0000

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Hallo Dirk!

    Danke für deine Antwort, aber so ganz schafft sie meine Unklarheiten noch nicht aus der Welt.

    Das die Daten elektrisch ausschließlich in 1 und 0 vorliegen war mir klar, nur die Umrechnung von Dezimal zu Binär und von Binär zu Hexadezimal ist mir nicht klar. Könntest du mir das genauer erläutern oder eventuell ein paar hilfreiche Links posten?

    Was für einen hexadezimalen Wert hätte zum Beuspiel 123?

    Gruß
    Thomas

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BurningBen
    Registriert seit
    02.09.2008
    Ort
    Darmstadt
    Alter
    27
    Beiträge
    842
    Vielleicht hilft dir das hier weiter:
    http://www.arndt-bruenner.de/mathe/s...lensysteme.htm

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Zitat Zitat von BurningBen
    Vielleicht hilft dir das hier weiter:
    http://www.arndt-bruenner.de/mathe/s...lensysteme.htm
    Danke, dass hat mir sehr geholfen!


    Gruß
    Thomas

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2009
    Ort
    NS
    Beiträge
    7
    Soweit ich das mitbekommen habe, werden die Daten im HEX-Format ins EEPROM geschrieben und kann sich auch mit Bascom auslesen.
    Mit den Beispiel:
    Code:
    Dim A as Byte
    Dim B as Eram Byte
    
    B=A
    
    End
    Schreibst du genau ein Byte in den EEPROM an der adresse &H00. Der EEPROM fängt ab dieser Adresse an die Werte zu speichern.

    Code:
    Dim A_byte As Byte
    Dim B_word As Word
    Dim C_long As Long
    Dim Printvar As Long
    Dim Printb As Word
    Dim Printa As Byte
    
    Dim A_eeprom_byte As Eram Byte
    Dim B_eeprom_word As Eram Word
    Dim C_eeprom_long As Eram Long
    Dim D_eeprom_long As Eram Long At &H07
    Dim E_eeprom_word As Eram Word At &H09 Overlay
    Dim F_eeprom_byte As Eram Byte At &H0A Overlay
    
    '1.1-Normale wertzuweisungen:
    A_byte = &H01
    B_word = &H0001
    C_long = &H00000001
    
    A_eeprom_byte = A_Byte
    Printa = A_eeprom_byte
    Print Hex(printa)
    Incr A_byte
    Writeeeprom A_byte, &H00
    Printa = A_eeprom_byte
    Print Hex(printa)
    
    B_eeprom_word = B_Word
    Printb = B_eeprom_word
    Print Hex(printb)
    Incr B_word
    Writeeeprom B_Word, &H01
    Printb = B_eeprom_word
    Print Hex(printb)
    
    C_eeprom_long = C_long
    Printvar = C_long
    Print Hex(printvar)
    Incr C_long
    Writeeeprom C_long, &H03
    Printvar = C_eeprom_long
    Print Hex(printvar)
    Print
    Print
    
    D_eeprom_long = 0
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    '2.1-Gleiche Variable, selbe Werte (Variable,Variable)
    Writeeeprom C_long , D_eeprom_long
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom B_word , E_eeprom_word
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom A_byte , F_eeprom_byte
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    
    '2.2-Gleiche Variable, selbe Werte (Variable,Adr)
    Writeeeprom C_long , &H07
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom B_word , &H09
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom A_byte , &H0A
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    
    '2.3-Gleiche Variable, selbe Werte (Variable = Hexwert)
    D_eeprom_long = &H00000002
    Printvar = D_eeprom_long
    Print Hex(printvar)
    E_eeprom_word = &H0002
    Printvar = D_eeprom_long
    Print Hex(printvar)
    F_eeprom_byte = &H02
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    Print
    
    A_byte = &HA3
    B_word = &HA200
    C_long = &HA1000000
    
    '3.1-Gleiche Variable, andere Werte (Variable,Variable)
    Writeeeprom C_long , D_eeprom_long
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom B_word , E_eeprom_word
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom A_byte , F_eeprom_byte
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    
    A_byte = &HA6
    B_word = &HA500
    C_long = &HA4000000
    
    '3.2-Gleiche Variable, andere Werte (Variable,Adr)
    Writeeeprom C_long , &H07
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom B_word , &H09
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Writeeeprom A_byte , &H0A
    Printvar = D_eeprom_long
    Print Hex(printvar)
    Print
    
    '3.3-Gleiche Variable, andere Werte (Variable = Hexwert)
    D_eeprom_long = &HA7000000
    Printvar = D_eeprom_long
    Print Hex(printvar)
    E_eeprom_word = &HA800
    Printvar = D_eeprom_long
    Print Hex(printvar)
    F_eeprom_byte = &HA9
    Printvar = D_eeprom_long
    Print Hex(printvar)
    End
    Ergibt:

    Code:
    01
    02
    0001
    0002
    00000001
    00000002
    
    
    00000000
    
    00000002
    00020002
    02020002
    
    00000002
    00020002
    02020002
    
    00000002
    00020002
    02020002
    
    
    A1000000
    A2000000
    A3000000
    
    A4000000
    A5000000
    A6000000
    
    A7000000
    A8000000
    A9000000
    Wie du erkennen kannst, schreibt der Befehl Writeeeprom Var_a, &H03 im EEPROM ab der Adresse 3 (Bedenke dieses ist das 4. Byte im EEPROM da man bei &H00 anfängt) und belegt so viele BYTES wie die Var_a benötigt.
    Byte => 1 Byte
    Word => 2 Bytes
    Long => 4 Bytes

    Also gilt auch:
    ERAM BYTE => 1 Byte im EEPROM
    ERAM WORD => 2 Bytes im EEPROM
    ERAM LONG => 4 Bytes im EEPROM

    Im Beispiel wird immer die Variable D_eeprom_long gedruckt. So erklärt sich wieso wenn man der Variable E_eeprom setzt wird so auch D_eeprom überschrieben da diese sich im gleiche EEPROM Speicherbereich befinden. Das gleiche gilt auch wenn man die Variable F_eeprom ändert, so ändert man sowohl D_eeprom als auch E_eeprom.
    Und das aus diesen Grund:
    Speicheradresse__.00.01.02.03.04.05.06.07.08.09.0A .0B
    A_eeprom_bereich.XX.__.__.__.__.__.__.__.__.__.__. __
    B_eeprom_bereich.__.XX.XX.__.__.__.__.__.__.__.__. __
    C_eeprom_bereich.__.__.__.XX.XX.XX.XX.__.__.__.__. __
    D_eeprom_bereich.__.__.__.__.__.__.__.XX.XX.XX.XX. __
    E_eeprom_bereich.__.__.__.__.__.__.__.__.__.XX.XX. __
    F_eeprom_bereich.__.__.__.__.__.__.__.__.__.__.XX. __

    Die ersten 3 EEPROM Variablen überlagern sich nicht. Jeder ERAM Typ hat sein X Bytes wie er Lang ist.
    Die letzten 3 EEPROM Variablen überlagern sich, sodas beim ändern einer dieser Variablen, sich auch die anderen 2 Variablen ändern können.
    Möchte man z.B. ein Byte in ein Word ändern so würde man (MC Abhängig wenn FLAG WORD tauschen gesetzt ist gilt diese nicht) eher alle Variabeln auf den ersten gemeinsamen Byte legen:
    G_eeprom_bereich.__.XX.XX.XX.XX.__
    H_eeprom_bereich.__.XX.XX.__.__.__
    I_eeprom_bereich.__.XX.__.__.__.__

    Nun wenn man I_eeprom auf 1 Setzt, so ist auch H_eeprom auf 1 und G_eeprom eben so. Anderes rum geht dieses nur bedingt, das man im Wertebereich der niedrigere Variable bleibt.
    Wenn man also G_eeprom auf 256 setzt, so ist auch H_eeprom auch 256. I_eeprom hingegen ist aber 0, da ein Byte nur von 0 - 255 geht und so aus dem Werte bereich geht.

    Ich hoffe du hast jetzt ein besseren einblick in der adressierung vom EEPROM bekommen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •