mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA16 RAM


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne ein 240x128 Grafik LCD ansteuern. Das ganze wird in C
programmiert. Will ich nun eine Grafik ins LCD schicken, so werden ja
3840 Bytes übermittelt. Tue ich diese knapp 4kByte in ein Array und
will dann die Einträge nacheinander senden, so verweigert mein ATMega16
seinen Dienst.
Mache ich dieses Array nur z.B. 240 Byte groß, funktioniert das so wie
ich es wollte. Nur sind das ja zu wenig Daten für das ganze Bild.
Sobald ich mehrere Arrays habe mit je 240 Byte Einträgen sagt der
Controller wieder "nö". Ich vermute dass das SRAM da irgendwie seine
finger mit im Spiel hat, welches ja auch nur 1k groß ist.
Hat einer ne Idee, wie ich dieses Problem lösen kann?
Geht vielleicht ganz einfach, bin aber leider kein C-Gott.

Vielen Dank
Holger

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin auch auf der Suche nach einer Routine, die 3,8kB in 1KB
unterbringt :-) Bei mir meckert der Compiler immer, daß der Mega16
nicht genug RAM hat.

"Hat einer ne Idee, wie ich dieses Problem lösen kann?"

Anderen Prozessor (Mega128) nehmen, oder ext. RAM anstöpseln.
Prinzipiell könntes Du auch das RAM vom Display byteweise read/write
ansprechen; ist aber nicht sonderlich schnell.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo legst Du denn das Array mit 3840 Bytes Größe ab?

Daß es nicht ins RAM passt, hast Du ja schon selbst herausgefunden - Du
solltest Dir also ansehen, wie Du das (konstant) ins ROM bekommst.

Die "storage class specifiers", die in der Dokumentation Deines
Compilers beschrieben sind, könnten ein Anlaufpunkt sein - irgendwo
dort wird auch beschrieben, wie man konstante Daten im ROM definiert.


(Allerdings frage ich mich, wozu das gut sein sollte; ein statisches
Bild auf ein LC-Display auszugeben ist ja nicht so sonderlich sinnvoll)

Autor: sicily (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schonmal mit 12 leuten in nem trabi gesessen?
also, wenn es darum geht, ein einziges bild mit knapp 4kB auf dem
display anzuzeigen, dann kannst du beim mega16 die information
eigentlich nur im flash speichern!

gruss,
sicily

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
38L Wasser in einen 10L-Eimer gibt in jedem Fall eine riesen Sauerei,
d.h. es geht nicht.

Du brauchst also einen externen SRAM, da ist der ATMega162 besser
geeignet.


Peter

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ja, dass die daten nicht ins ram passen hab ich wohl gemerkt. aber
wenn ich mein hex-file in den controller lade wird ja zunächst nur der
flash mit beschrieben, oder nicht? und der ist ja groß genug. wenn der
controller dann die ersten 240 byte gesendet hat, kann man ihm dann
nicht irgendwie sagen, dass er die aus dem ram rausnehmen soll und die
nächsten 240 byte reinschieben kann?
ich kann mir ja auch bilder auf meinem computer angucken, die insgesamt
mehr als z.b. 2 GByte haben. und der arbeitsspeicher ist ja auch nicht
so groß.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist kein Problem, das Bild in Häppchen zu je 240 Byte zu erzeugen.

Du must nur das Programm so schreiben, daß Du immer den gleichen 240
Byte Puffer benutzt.

Ein Array ist dagegen immer die Summe aus allen Elementen. Woher soll
der Compiler denn auch wissen, welches Feld Du nicht mehr benötigst ?


Peter

Autor: sicily (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sagst du deinem compiler explizit, dass er die daten im flash ablegen
soll?
was für einen benutzt du denn??

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze den avr-gcc. oder muss es noch genauer sein? ich weiß nicht,
wie ich ihm explizit sagen kann, dass er die daten nur im flash ablegen
soll, da sie ja nur gelesen werden. ich habe es schon mit constant vor
meinem array probiert. haut aber auch nicht hin.
ich habe auch schon probiert ein array mit 240 byte anzulegen und
dieses dann im programmablauf mit neuen daten zu beschreiben. der
compiler meckert dann aber, dass es solch eine deklaration schon gibt.
zieht sich der controller denn alle daten zum programmstart komplet in
den sram? oder kann er wärend des programmablaufs neue daten in den
sram ablegen?

danke und gruß
holger

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.