-         

Ergebnis 1 bis 9 von 9

Thema: LCD - Problem

  1. #1

    LCD - Problem

    Anzeige

    Hallo,
    super Seite. Gefällt mir sehr gut. Leider hab ich noch niemand gefunden der dasselbe Problem hatte wie ich.

    Ich sollte einen ATMEGA128 mit externem Speicher programmieren. Ich benütze die Programmiersprache C und den AVR Studio 4 zum bespielen.

    Das ansteuern einzelner LED`S funktioniert tadellos, jedoch kann ich kein LCD - Display ansteuern da mein Programm nicht mehr aus dem Unterprogramm herauskommt. Das soll heißen, dass er ein Unterprogramm (egal welches) immer und immer wieder ausführt und somit mit dem eigentlichen Program nicht weitermacht.

    Ich habe im Datenblatt des Atmega128 gelesen, dass man den Stack-pointer für die return Adresse von Unterprogrammen aktivieren muss. Kann es daran liegen? Wenn ja, wie kann ich den Stack aktivieren?

    Mit freundlichen Grüßen,
    Martin

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    32
    Beiträge
    37
    Einfach so den Stack initialisieren:
    Code:
    reset:	ldi	r16,	low(ramend)
    		out	spl,	r16
    		ldi	r16,	high(ramend)
    		out	sph,	r16
    ramend ist die letzte SRAM Adresse, brauchst dich aber nicht drum kümmern, steht alles in den include dateien mit drinne

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    @eric101,
    das ist zwar richtig, was Du schreibst, er meint aber, daß er in C programmiert und nicht im Assembler...
    Ich weiß es nicht ganz genau, aber muß man in C den Stack einrichten?
    Ich habe es noch nie gemacht...

    @ offender
    Was hälst Du davon Dein Programm hier zu posten?
    Dann kann Dir sicher jemand helfen, den Fehler zu finden.

    Gruß Sebastian

  4. #4
    Ich wollt`s eigentlich mit dem Programm vom Fleury probieren, welches ja eigentlich für die meisten LCD Displays und Port-Ausgänge kompatibel ist. Ich frage mich, ob sich evtl. wegen meinem zusätzlichen externen Speicher evtl. der Stack geändert hat, oder ob es sich evtl. um einen Hardware-fehler handelt, obwohl ich einzelne LED`s problemslos ansteuern kann.

    Danke schon mal für die Antworten,
    Martin

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    32
    Beiträge
    37
    achso sorry, hab ich leider überlesen
    Mit C kenn ich mich leider nicht aus

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.05.2005
    Ort
    Chemnitz
    Alter
    28
    Beiträge
    104
    Kann man bei C keinen Assembler einbinden, dass geht doch eigentlich immer. Kenn mich aber mit C nicht aus, kann dir darum nicht weiterhelfen.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Also ich weiß nicht genau, ob da irgendwo ein Zusammenhang besteht,
    aber Stack wird immer von hinten nach vorne aufgebaut...
    Wie dir Eric102 beispielhaft geschrieben hat, hat der Stackpointer was mit RAMEND zu tun...
    Ramend ist einfach die letzte SRAM Speicherzelle, die auf dem Chip vorhanden ist.
    Es ist dann wohl auch klar, daß Ramend von Mega zu Mega anders ist, je nachdem wieviel Speicher der Chip besitzt.
    ich habe einen Blick in die iom128.h geworfen und ziemlich unten fast an ende der Datei
    steht folgendes:
    Code:
    #define    RAMEND   0x10FF     /* Last On-Chip SRAM Location */
    Das heißt die letzte Speicherzelle des Mega128 befindet sich bei 0x10FF,
    und daraus mach der Compiler wohl irgendwie den Stackpointer.

    Wenn Du aber noch externes SRAM hast müsste das alles verschoben werden, sonst kann ja passieren, daß Du dir den Stackinhalt überschreibst.

    Gruß Sebastian

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    32
    Beiträge
    37
    das merkwürdige ist nur das offender sagt, dass das Unterprogramm immer wieder von vorne anfängt. In dem Moment wo ein Unterprogramm aufgerufen wird, speichert der Controller die Adresse(16bit) vom Hauptprogramm im Stack und springt beim return an die abgelegte Adresse. Und jetzt kommt das merkwürdige, denn im Stack steht nicht die Adresse von der letzten Stelle im Hauptprogramm sondern in diesem Fall die Adresse von der ersten Zeile des Unterprogramms und das versteh ich nicht

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Deswegen tip ich eher auf ein Fehler im Programm
    Es passiert mir auch immerwieder, daß ich eine Endlosschleife reinbaue.
    Gruß Sebastian

Berechtigungen

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