Eeprom as Eram Single

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Eeprom as Eram Single

      Moin allerseits. Ich bin am Ende meiner Möglichkeiten. Der nachfolgende Code funktioniert nicht . Die Fehlermeldung:
      Error : 25 Line : 19 Variable already dimensioned [Variable already dimensioned] , in File : C:\Users\Wolfi\Desktop\Bascom\noname1.bas
      Error : 93 Line : 24 Variable not dimensioned [EEPROM(0)] , in File : C:\Users\Wolfi\Desktop\Bascom\noname1.bas

      Hier ist das Listing:

      Source Code

      1. $regfile = "m8def.dat"
      2. $crystal = 8000000 ' Noch intern. Auf 16MHz extern umprogrammieren
      3. ' Definition der Pins und Variablen
      4. Config Portb = Output
      5. Config Portd = Output
      6. Config Portc.1 = Output
      7. Config Pinb.0 = Input
      8. Config Pinb.1 = Input
      9. Config Portc.2 = Output
      10. Config Portc.3 = Output
      11. Dim Anzeige1 As Byte
      12. Dim Anzeige2 As Byte
      13. Dim Eeprom(0) As Eram Single
      14. Dim Eeprom(1) As Eram Single
      15. Dim LastButtonTime As Word
      16. ' Initialisierung
      17. Anzeige1 = Eeprom(0) ' Lies den Wert von Adresse 0 im EEPROM
      18. Anzeige2 = Eeprom(1) ' Lies den Wert von Adresse 1 im EEPROM
      19. Portb.0 = 1 ' Taster 1
      20. Portb.1 = 1 ' Taster 2
      21. Portc.1 = 0 ' Relais
      22. Portc.2 = 1 ' Anode 1
      23. Portc.3 = 1 ' Anode 2
      24. Ein Alias Pinb.0
      25. Aus Alias Pinb.1
      26. Relais Alias Portc.1
      27. Do
      28. ' Überprüfe Taster für Anzeige 1
      29. If Ein = 0 Then
      30. LastButtonTime = Time
      31. Incr Anzeige1
      32. If Anzeige1 > 9 Then
      33. Anzeige1 = 0
      34. End If
      35. Waitms 200 ' Entprellzeit
      36. End If
      37. ' Überprüfe Taster für Anzeige 2
      38. If Aus = 0 Then
      39. LastButtonTime = Time
      40. Incr Anzeige2
      41. If Anzeige2 > 9 Then
      42. Anzeige2 = 0
      43. End If
      44. Waitms 200 ' Entprellzeit
      45. End If
      46. ' Überprüfe Inaktivität der Tasten für 10 Sekunden
      47. If (Time - LastButtonTime) > 10000 Then
      48. ' Anzeige 1 aktualisieren
      49. Portc.2 = 0 ' Anode 1 aktivieren
      50. Portc.3 = 1 ' Anode 2 deaktivieren
      51. ' (Rest des Anzeige 1 Codes bleibt unverändert)
      52. ' Anzeige 2 aktualisieren
      53. Portc.2 = 1 ' Anode 1 deaktivieren
      54. Portc.3 = 0 ' Anode 2 aktivieren
      55. ' (Rest des Anzeige 2 Codes bleibt unverändert)
      56. ' Speichern der Werte im EEPROM
      57. Eeeprom(0) = Anzeige1 ' Speichere den Wert von Anzeige1 in Adresse 0 im EEPROM
      58. Eeeprom(1) = Anzeige2 ' Speichere den Wert von Anzeige2 in Adresse 1 im EEPROM
      59. End If
      60. Loop
      Display All


      Vielleicht hat von Euch Experten eine Lösung nach dem Motto: Finde den Fehler. Grüße Wolleausmallo
    • Mit
      DIM xxx(n) AS ...
      dimensionierst Du ein Array mit dem Namen xxx und der Länge n

      Aus der Hilfe:
      var may also be an array : ar(10) for example.
      avrhelp.mcselec.com/index.html?dim.htm


      wolleausmallo wrote:

      Dim Eeprom(0) As Eram Single

      Mit Eeprom(0) dimensionierst Du ein Array. Mit Eeprom(1) dimensionierst Du schon wieder ein Array. Wieder mit dem Namen Eeprom.
      Ich würde einen Variablennamen wie 'Eeprom' eher vermeiden. So etwas könnte ein reserviertes Wort sein. Lieber so etwas wie 'Eepromvariable'.

      Warum einmal Single und einmal Byte?

      Vielleicht für Dich interessant:
      EEPROM beschreiben

      Oder aus der Hilfe:
      ERAM
      For ERAM variables, it is important to understand that these are not normal variables. ERAM variables serve as a way to simple read and write the EEPROM memory. You can use READEEPROM and WRITEEEPROM for that purpose too.
      To write to an ERAM variable you have to use an SRAM variable as the source : eramVAR= sramVAR
      To read from an ERAM variable you have to use an SRAM variable as the targer : sramVAR=eramVAR
      Both variables need to be of the same data type. So when writing to an ERAM double, the source variable need to be of the double type too.
      ERAM can be assigned with a numeric value too : eramVAR= 123
      You can not use an ERAM variable as you would use a normal variable.
      Also keep in mind that when you write to ERAM, you write to EEPROM, and that after 100.000 times, the EEPROM will not erase properly.
      Dim b as byte, bx as ERAM byte
      B = 1
      Bx = b ' write to EEPROM
      B = bx ' read from EEPROM


      Achtung:
      "Also keep in mind that when you write to ERAM, you write to EEPROM, and that after 100.000 times, the EEPROM will not erase properly."
      Du darfst NIE in einer Do-Loop ins EEPROM schreiben. Das zerstört Deinen EEPROM-Speicher!
      Immer nur ins EEPROM schreiben, wenn die Hauptschleife verlassen wurde oder wenn in einer Einstellroutine nur einmal etwas geändert wird.
    • Erstmal muss das Dim EEPROM so lauten Dim EEPROM(2) As ERAM SINGLE
      Damit werden bereits zwei Plätze eingerichtet.
      Diese erreicht man dann in der Folge als EEPROM(1) und EEPROM(2) oder wenn die die Basis umstellst mit EEPROM(0) und EEPROM(1)

      Als nächstes möchtest du einer Bytevariable den Inhalt einer Singlevariablen zuweisen, das kann funktionieren muss es aber nicht (ist zumindest etwas holprig und kann den Controller auch gut verwirren).

      Schließlich möchtest du in eine Wordvariable den Inhalt von Time zuweisen was so auch nicht funktionieren wird. weil Time entweder einen String oder Bytes (drei hintereinanderliegende) zurückgibt.
    • Ich habe es jetzt so gemacht, die gleiche Fehlermeldung. Ich glaube ich werde zu alt(76). Ja, die Hilfe habe ich auch aber manchmal verstehe ich dieses tecenglisch nicht. Habe den Timerkram mal rausgenommen.

      im Anzeige1 As Byte
      Dim Anzeige2 As Byte

      Dim Eeprom(2) als Eram Single

      Lastbuttontime als Word dimmen

      ' Initialisierung
      Anzeige1 = Eeprom(1) ' Lies den Wert von Adresse 0 im EEPROM
      Anzeige2 = Eeprom(2) ' Lies den Wert von Adresse 1 im EEPROM

      Portb.0 = 1 ' Taster 1
      Portb.1 = 1 ' Taster 2
      Portc.1 = 0 'Relais
      Portc.2 = 1 ' Anode 1
      Portc.3 = 1 ' Anode 2

      Ein Alias Pinb.0
      Aus Alias Pinb.1
      Relais Alias Portc.1

      The post was edited 1 time, last by wolleausmallo ().

    • Hi Stefan. Das mit der Schleife im Eeprom weiß ich glücklicherweise schon.

      Dim Anzeige1 As Byte
      Dim Anzeige2 As Byte

      Dim Eeanzeige1 As Byte
      Dim Eeanzeige2 As Byte


      Anzeige1 = Eeanzeige(1) ' Lies den Wert von Adresse 0 im EEPROM
      Anzeige2 = Eeanzeige(2) ' Lies den Wert von Adresse 1 im EEPROM

      Funktioniert nicht. Sei so nett und schreib mir die paar Zeilen.

      The post was edited 1 time, last by wolleausmallo ().

    • Die Variable ist veränderbar bin,hex, string etc. Im array legt man daten ab, welche man wieder auslesen kann. Ich habe noch keine simplen Beispiele mit ein paar zeilen gefunden. Ich möchte hier kein fertiges Programm. Mir reicht schon ein Minibeispiel an dem ich mich abarbeiten kann. Mit Speichern habe ich noch keine Erfahrung.
    • In einer einfachen Variablen z.B. "Zahl", kann man nur einen einzigen Wert ablegen.
      Es ist wie ein Container (Garage), in die nur ein Auto (Variablenwert) passt.

      z.B.
      Dim Garage as String*20
      Garage = "Mein Auto"

      Was darin abzulegen ist, wie die Variable heißen soll, bestimmst du, zusammen mit dem Variablen-Typ.

      Also, da passt nur ein Wert rein pro Variable.

      Ein Array ist eine Liste von gleichen Variablen-Typen.
      Um bei der Garage zu bleiben, möchtest du z.b. nicht eine, sondern 8 Garagen haben, und in jede passt ein Auto.
      Dann wäre das wie folgt:

      Dim Garage(8) as String*20

      Jetzt kannst du in die 8 Garagen mit den Nummern 1 bis 8 Autos reinstellen.

      Garage(1) = "Mein Auto"
      Garage(6) = "Motorrad"
      Garage(7) = "Gerümpel"

      Wenn du sehen willst, was in der Garage 6 ist, fragst du diese Garage ab:

      Print Garage(6)
      Und es wird "Motorrad" ausgegeben.

      Ein Array ist also nicht eine Variable, sondern mehrere (Wert in Klammer beim Dim-Anweisung) vom gleichen Variablen-Typ

      Das obige Beispiel war jetzt ein String bzw ein String-Array.
    • Standardmäßig werden Variablen immer im RAM (SRAM) abgelegt.
      Man kann aber durch den Zusatz ERAM bei der Dimensionierung die Werte auch im EEProm ablegen.

      Dim meineVariable as Integer ' Variable im SRAM
      Dim meineVariable as ERAM Integer ' Variable im EEProm

      Du solltest Variablen im EEProm nicht wie normale Variablen benutzen, sondern nur zum Konfigurationen speichern etc.

      Ich verwende immer den Prefix EE_, wenn es sich um eine EEProm-Variable handelt.