- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Datenbank / Tabelle im Programmspeicher ?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    41
    Beiträge
    1.013

    Datenbank / Tabelle im Programmspeicher ?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi ich hab nen großes Problem ich muss ne menge daten über SPI versenden und zwar 64 x 8bit diese möchte ich im Programmspeicher ablegen über googel und im RN-Wiki hab ich einiges gefunden allerdings werde ich da nicht draus schlau meine daten sehen momentan wie folgt aus:

    0x55,0xa5,0x55,0x56,0xaa,0x55,0x56,0x66
    0x55,0x56,0x9a,0x55,0x56,0x56,0x55,0x56
    0x56,0x95,0x59,0x55,0xa5,0x59,0x55,0xa5
    0x65,0x55,0x69,0x65,0x55,0x69,0xa5,0x55
    0x69,0xa5,0x55,0x69,0x59,0x55,0x69,0x6a
    0x55,0x99,0x69,0x56,0x56,0x96,0xaa,0x56
    0x96,0x56,0x99,0x69,0x55,0xa5,0x55,0x55
    0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55

    Diese müssen Fein Säuberlich der reihe nach gesendet werden dazu kommen nochmal 64 x 8bit Adressbytes das heißt insgesamt sind des den 1024 Bit die gesendet werden müssen.

    Die Adressbits sind aber nicht so das Problem da ich diese in einer schleife fortlaufend nummerieren kann.

    Vielleicht hat ja einer einen TIP für mich.

    Aso Proggen tuhe ich mit ASM
    Legastheniker on Bord !

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    40
    Beiträge
    140
    Servus,

    also so ganz verstehe ich dein Problem nicht. Wo sollen denn die Daten hin gesendet werden?
    Hast du da ein Timing problem oder wo ist dein problem? Oder weiß du nicht, wie du über SPI senden sollst?! Vielleicht stehe ich heute morgen auch noch auf dem Schlauch! ...........SCHLAND!!!!!
    Gruß

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Also, da ist ein Problem, dass alle PICs unter der 18F Version haben. Die haben zwar einen Pointer (IndF), aber es gibt keine Möglichkeit, damit aus dem Flash zu lesen.
    In diesem Fall macht man folgendes:
    Eine Unterfunktion liefert die Werte nach dem Zustand eines Zählers zurück.

    Lookup:
    MOVFW Zähler
    ADDWF PCL,F

    RETLW 0x55
    RETLW 0xA5
    ...

    und in Prog:
    INC Zähler
    CALL Lookup

    damit machst du nichts anderes, als per Variable Zähler den Programm-Counter zu manipulieren. Der RETLW Befehl läd dann vor dem Rücksprung ins Hauptprogramm den Wert in das W-Register.

    Das ist leider die einzige Möglichkeit. Alternativ könntest du natürlich die Werte als konstanten definieren und Speicherzellen damit laden, die du dann wieder mit dem Pointer ansprechen kannst. Aber damit hast du den gleichen Speicherverbrauch (denn die Konstanten müssen ja wo stehen) + den Speicherverbrauch im RAM.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    41
    Beiträge
    1.013
    ah des hört sich recht gut an werde des mal testen

    danke
    Legastheniker on Bord !

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    Zitat Zitat von the_Ghost666
    Also, da ist ein Problem, dass alle PICs unter der 18F Version haben. Die haben zwar einen Pointer (IndF), aber es gibt keine Möglichkeit, damit aus dem Flash zu lesen.
    sicher? im datenbaltt zum 16f877a steht unter 3.5 "reading flash program memory" schaut zwar nicht ganz so easy aus, ist aber ein code beispiel dabei.

    und dann gäbe es ja auch noch ein eeprom, welches man beschreiben könnte (also einfach in asm sagen, dass soll ins eeprom rein) und dann kann man es wieder mit dem pic auslesen.

    Zitat Zitat von the_Ghost666
    In diesem Fall macht man folgendes:
    Eine Unterfunktion liefert die Werte nach dem Zustand eines Zählers zurück.

    Lookup:
    MOVFW Zähler
    ADDWF PCL,F

    RETLW 0x55
    RETLW 0xA5
    da muss man aber gut aufpassen, da das PCL registier nur 8 bit halten kann, die adresse wo er hinspringt aber 13 bit breit ist. d.h. wenn du die tabelle an einer ungünstigen stelle plazierst, spinnt dein programm:

    F0: MOVFW Zähler ; zähler = 20d
    F1: ADDWF PCL,F ;pcl = F1h + 20d = 105h -> PCL = 05h -> springt irgendwo hin nach oben

    das muss man dann einfach in der .lst datei nachschauen wo die funktion steht, oder mit einem org befehl das so anlegen, dass es passt, oder im datenblatt nachschauen und die etwas kompliziertere funktion nehmen, die auch mit solchen sprüngen klar kommt beispiel 5 scheint das richtige zu sein.

    SEIDL.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Ja, das stimmt natürlich alles, die Platzierung muss man beachten, natürlich auch, das der Wert in Zähler nicht höher ist, als die Tabelle lang.
    Das der PIC doch aus dem Flash-Speicher lesen kann, war mir bisher garnicht so bewusst, hatte vor einiger Zeit die selbe Frage. Der einzige Nachteil ist die lange Bearbeitungsdauer, da die Sequenz einige Takte braucht, aber sonst scheints echt zu klappen. Muss ich mal ausprobieren. Dann könnte man auch wieder die äh .db -Assembleranweisung nehmen, um eine ganze Tabelle mit Kommata einzurichten.

Berechtigungen

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

12V Akku bauen