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
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.
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)
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
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
...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ß.
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
sagst du deinem compiler explizit, dass er die daten im flash ablegen soll? was für einen benutzt du denn??
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.