- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 4 von 4

Thema: EEPROM schreiben in BASCOM zu langsam

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57

    EEPROM schreiben in BASCOM zu langsam

    Anzeige

    Powerstation Test
    Hallo,
    ich weiß nicht ob ich mit meiner Frage hier richtig bin - ich versuche es mal:
    in meinem Programm ( in Bascom geschrieben ) speichere ich bei einem Interrupt 3 Variable im EEPROM:

    writeeeprom A , &H10
    writeeeprom B , &H20
    writeeeprom C , &H30

    Nun habe ich timing Probleme – es dauert zu lange!
    Ich weiß nicht wie Bascom den Befehl writeeeprom übersetzt, könnte mir aber vorstellen, das es direkt in Assembler geschrieben schneller geht.
    Ich habe aber gar keine Ahnung von Assembler.

    Könnt ihr mir helfen?

    Ob die Variablen auf &H10, 20 und 30 stehen, oder wo anders im EEPROM ist völlig egal.
    Die begrenzte „Lebensdauer“ des EEPROM’s ist für mich kein Problem
    Die Variablen lese ich folgender maßen vom EEPROM:

    readeeprom A ,&H10
    readeeprom B ,&H20
    readeeprom C ,&H30

    A ist ein Byte, B ein Word und C ist Long:

    Dim A as byte
    Dim B as word
    Dim C as long

    ich will ja nicht unverschämt sein, wenn die Lösung aber so aussehen könnte, das ich sie ohne Probleme in mein Bascom einbinden kann, das währe nicht schlecht

    Tschüß SZ
    Its not a bug its a feature

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    eeprom ist per Definition schon recht langsam.
    Wenn ich mich erinnere glaube ich irgendwo im Datenblatt
    hab ich mal was von Wartezyklen im Millisekundenbereich gelesen
    zu haben. Mit ASM wirste also diese Hürde auch nicht überspringen
    können. Für dauerhafte und schnelle Datenspeicherung bietet
    sich Flash oder F-RAM an.

    Ach so, eins noch, ne eeprom-Variable kann man auch einfach
    per DIM belegen,
    also

    Dim a as eram byte
    dim b as eram word
    dim c as eram long

    so kannst Du dann direkt auf die einzelne Variable zugreifen,
    einfach a=5 z.B.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57
    das ist mir schon klar, und was der m2561 macht auch:

    der AVR hat intern eine "Brennroutine" für das interne EEPROM diese dauert 3,4 ms
    plus
    - lade Adressregister High EEARH,
    - lade Adressregister Low EEARL,
    - lade Datenregister EEDR
    und
    - Steuerregister EECR 5 x !!! setzen ( es können tatsächlich die 5 Bits NICHT auf einmal gesetzt werden )
    danach 4 Takte warten und erst dann kann das nächste Byte geschrieben werden - echt krass !!!!!!!!!

    Ich stehe einfach vor der Aufgabe 7 Byte ( 1 Byte, 1 Word und 1 Long ) zu retten. Das macht man am einfachsten mit dem internen EEPROM. Bis jetzt hat das auch bei mir prima funktioniert. Nur komm ich bei meiner jetzigen Anwendung in Zeitnot und könnte mir vorstellen, das die Byte ins EEPROM schreiben in Assembler programiert schneller läuft.
    Deshalb meine Frage nach einer Assemblerlösung.
    Ich bin halt nur ein Bascom BASIC "Programierer" und habe keine Ahnung von Assembler.

    tschüß SZ
    Its not a bug its a feature

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    push r16
    weprom:
    sbic EECR,EEWE <- hier liegt der Knackpunkt
    rjmp weprom
    out Adresse Highbyte,ZH
    out Adresse Lowbyte,ZL
    out EEDR,r16
    sbi EECR,EEMWE
    sbi EECR,EEWE
    pop r16
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

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

Solar Speicher und Akkus Tests