- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: Mega128 und 32KB externes SRAM

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47

    Mega128 und 32KB externes SRAM

    Anzeige

    Praxistest und DIY Projekte
    Hallo da,

    ich habe schon zum Thema gesucht, aber das einzige was ich finden konnte, waren Informationen diesbezüglich das MakeFile betreffend.
    Es geht darum, dass ich gerne die GameBoyCamera auslesen möchte und die Daten nicht direkt per RS232 übertragen werden sollen.
    Deswegen habe ich eine Platine mit einem 74LS573 und einem 32KB SRAM von Cypress gebaut, dass ich an meine Mega128 Platine anstecken kann.

    Soweit so gut.

    Jetzt das Problem: Da die Camera ein Format von 128*123 hat, wollte ich ein 8-Bit Array initialisieren, dass entweder
    bild[128][123] oder
    bild[16380] groß ist.
    Das geht natürlich nur, wenn der externe Speicher auch läuft.

    Dazu habe ich also folgende Zeile im Makefile freigeschaltet:
    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # used for variables (.data/.bss) and heap (malloc()).
    EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

    Weil das warscheinlich nicht reicht, habe ich in meiner Initialisierung noch das folgende programmiert:

    MCUCR &= (1 << SRE);
    XMCRA &= (~1 << XMBK);
    XMCRB &= ~(1 << XMM2);
    XMCRB &= (1 << XMM1);
    XMCRB &= ~(1 << XMM0);

    printf("MCUCR has the following value: %d\n", MCUCR);
    printf("XMCRA has the following value: %d\n", XMCRA);
    printf("XMCRB has the following value: %d\n", XMCRB);

    Die printf-Befehle senden an meinen PC. Es kommt überall "0" heraus. Es gibt jetzt drei Möglichkeiten:
    - man kann die Register so garnicht setzen und seswegen kommt null raus,
    - man kann die Register so nicht auslesen
    - oder beides... :P

    Wie habt ihr externen Speicher initialisiert? Habt ihr vielleicht beispielcode für mich?
    Muss ich was bei der Variablendeklaration beachten?

    Gruß und danke,
    Timo

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    so, ich habe in der Tat die Register falsch gesetzt, jetzt mache ich es so:
    MCUCR = 0x80;
    XMCRA = 0x06;
    XMCRB = 0x01;

    Das Problem ist damit aber nicht behoben, denn wenn mein TestArray den Adressbereich von 4000irgendwas verlässt, was allein durch die deklaration geschieht, dann stürzt der AVR ab und startet neu.

    Ich komme damit alleine nicht weiter. Per google konnte ich leider auch keinen Beispielcode für die Deklaration von 32KB externem Speicher finden

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    Nachdem ich noch einen Verdrahtungsfehler - in Form eines falschherum gedrehten Steckers - behoben habe, und mir eine weitere Zeile im MakeFile aufgefallen ist, der mein vorheriges Wecken der 32k wieder zu Nichte machte, habe ich noch den Wert für die obere Grenze auf 0x8000 gesetzt:

    EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x808000

    Leider startet der mega128 nun garnicht mehr mit diesen Einstellungen. Auch wird nicht versucht auf den Speicher zu zu greifen, zumindest kann ich keinerlei Regung erkennen.

    Ich bin quasi für jede Hilfe offen!

    Gruß Timo

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    Hat niemand eine Lösung/Idee?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    hast Du schon mal andere Projekte betrachtet, wie die das machen ?
    Mir fällt da immer Ethernut ein, dann könntest Du vergleichen.
    Die Seite scheint aber zZt. nicht online zu sein,
    aber es gibt auch andere Projekte die ähnliches machen,
    mal nach Ethernet und Mega128 suchen.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    Vielen Dank für die Antwort!
    Ich brauchte dringend wenigstens einen Hinweis, wo ich zu suchen habe, denn Projekte die externen Ram verwenden gibt es scheinbar nicht so häufig

    Ich werde mich da nochmal umsehen!

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Ich habe zwar noch nicht selber damit gearbeitet, aber ich habe hier ein Projekt von einem Kollegen, bei dem ein externes 64k RAM am AT90CAN128 läuft. Vergleichen wir doch einfach mal die Einstellungen.

    Erst mal habe ich mit mfile einen etwas anderen Makefile-Eintrag für 32k bekommen:
    EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x8090ff
    Was auch logisch ist, denn 0x8090ff - 0x801100 = 0x7FFF = 32767

    Mein Kollege hat sämtliche WaitStates ausgeschaltet. Wobei mir auffällt, dass Du WaitStates für den Lower Sector angegeben hast, obwohl gar kein Lower Sector aktiviert ist....

    Ansonsten ist die einzige Abweichung, dass mein Kollege den BusKeeper eingeschaltet hat (XMBK in XMCRB).

    Versuch mal Dein Glück mit diesen Einstellungen.
    Wenn's nicht klappt, zeige mal bitte Deinen Schaltplan.

    askazo

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    Ok mache ich. Ich habe mfile garnicht verwendet. Ich hoffe das war einer der Fehler!
    Leider komme ich erst heute nachmittag dazu....

    Vielen Dank auch dir!

    Gruß
    Timo

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    Ah, freude kommt gewissermaßen Teilweise auf:

    Ich habe in meiner Not mal Bascom angeschmissen und durch Variablen spezielle Variablen meinen Speicher auf Funktionalität testen können:

    Dim Testarray1(1024) As Xram Integer
    Dim Testarray2(1024) As Xram Integer
    Dim Testarray3(1024) As Xram Integer
    Dim Testarray4(1024) As Xram Integer
    Dim Testarray5(1024) As Xram Integer
    Dim Testarray6(1024) As Xram Integer

    Der Haufen ist ja definitiv größer als der normale Ram, weswegen er im SRAM liegen muss und insbesondere durch den Deklarationshinweis 'Xram' auch da rein gebastelt wird.

    Das Programm füllt dann diese Arrays mit Daten und gibt die anschließend per RS232 aus. Das läuft tadellos! Allerdings halt nicht in C :/

    Das bedeutet meine jüngst dreimal durchgemessene Schaltung läuft immerhin und es muss sich ergo um ein problem mit dem Programm oder den compileroptions handeln...

    ich stelle gleich mal die sourcen online evtl ist das sinnvoll...

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    20.03.2005
    Ort
    Berne
    Alter
    41
    Beiträge
    47
    kompletter Quellcode in C, geschrieben in ProgrammersNotepad 2.

    Wäre super, wenn den jemand anschauen würde und dann auch noch den Fehler findet
    Also das Phänomen ist immernoch, dass der Mega128 mit eingeschalteten Compileroptionen für 32 KB externen Ram einfach nichts mehr macht. Es regt sich rein garnichts mehr...
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad