Hallo, ich arbeite derzeit an einer LED-Leuchtschrift. Buchstaben darstellen funktioniert soweit. Nachdem ich aber kein GCC programmier Profi bin wollte ich euch einmal fragen wie man so eine schriftart abspeichert und dann abruft. Derzeit lade ich die 9 Zeilen in globale Variablen und schiebe diese dann raus in Schieberegister void font_klein_a(void) { ByteZeile1 = 0b00000000; ByteZeile2 = 0b00000000; ByteZeile3 = 0b00000000; ByteZeile4 = 0b01110000; ByteZeile5 = 0b00001000; ByteZeile6 = 0b01111000; ByteZeile7 = 0b10001000; ByteZeile8 = 0b10001000; ByteZeile9 = 0b01111100; }
Wenn das funktioniert, ist das OK. Du könntest dem Compiler noch bekannt machen, ob sich die Daten für die Zeichen ändern (wie jetzt) oder nicht (const Schlüsselwort). Der Compiler kann dann u.U. schnelleren oder schlankeren Code produzieren. Du könntest statt vieler Variablen ein Feld (Array) benutzen und über den Index zugreifen. Damit können dann Schleifen programmiert werden. Bei µC mit wenig RAM könntest du auch die Daten statt im RAM im Flash-ROM halten. Beim AVR ist das im AVR-GCC-Tutorial erklärt unter dem Schlüsselwort PROGMEM.
Rudolf schrieb: > Nachdem ich aber kein GCC programmier Profi bin wollte ich euch einmal > fragen wie man so eine schriftart abspeichert und dann abruft. Du musst die Daten aus dem Programm rausholen und in einer Tabelle ablegen. Sinnvollerweise macht man das dann so, dass man den ASCII Code des auszugebenden Zeichens direkt als Index in diese Tabelle benutzen kann. > Derzeit lade ich die 9 Zeilen in globale Variablen und schiebe diese > dann raus in Schieberegister > > > void font_klein_a(void) { > ByteZeile1 = 0b00000000; > ByteZeile2 = 0b00000000; > ByteZeile3 = 0b00000000; > ByteZeile4 = 0b01110000; > ByteZeile5 = 0b00001000; > ByteZeile6 = 0b01111000; > ByteZeile7 = 0b10001000; > ByteZeile8 = 0b10001000; > ByteZeile9 = 0b01111100; > } Du solltest in deinem C-Buch über Arrays nachlesen. Wann immer du versucht bist, mehrere gleichartige Variablen anzulegen, die alle gleich heißen und sich nur durch eine laufende Nummer unterscheiden, dann willst du meistens ein eigentlich ein Array. uint8_t DisplayByte[9]; jetzt hast du 9 gleichartige Variablen DisplayByte[0], DisplayByte[1], ... DisplayByte[8] nur: Die Zahl in den eckigen Klammern beim Zugriff kann auch errechnet werden. Und da fängt dann die ganze Sache an interessant zu werden.
Das heißt mit den array meinst du das so oder? uint8_t font[255][9] = { //{...},{...},{....},{...},{...},{...},......... //............................ //97. klammer auf = kleines a {0b00000000, 0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b10001000, 0b01111100}, //{...},{...},{....},{...},{...},{...},........... //............................ //255. klammer {0,0,0,0,0,0,0,0,0} };
Rudolf schrieb: > Das heißt mit den array meinst du das so oder? ganz genau. Wobei man nicht unbedingt alle Zeichen braucht. Im ASCII Code sind die ersten 32 Zeichen zb so, dass es keine sinnvolle Darstellung dafür gibt (sind Steuerzeichen wie zb Zeilenvorschub). D.h. man muss dafür daher auch keine Einträge in der Tabelle spendieren. Beim Zugriff auf die Tabelle da erst mal 32 abziehen, ist ja nicht das Thema.
Vielen Dank Das mit den Steuerzeichen weiß ich. Die benütze ich für einen Reset des Controllers und die Blinkfrequenz. Gibt es bei einen Mega32 auch die mölichkeit einen Text in den internen Speicher zu schreiben und diesen nach einen Neustart wieder auszulesen?
Rudolf schrieb: > Gibt es bei einen Mega32 auch die mölichkeit einen Text in den internen > Speicher zu schreiben und diesen nach einen Neustart wieder auszulesen? Natürlich. Das EEprom ist dafür gedacht, dass man sich dort Werte ablegen kann, die zb auch einen Stromausfall überleben müssen.
Jetzt muss ich nochmal nachfragen ob es auch moglich ist die schriftart in das Flash zu schreiben da mit uint8_t font[255][9] = {{....}.....{.....}} fast der ganze Ram voll ist? Danke schon mal für alle Antworten
Rudolf schrieb: > ob es auch moglich ist die schriftart > in das Flash zu schreiben Stefan B. schrieb: > Bei µC mit wenig RAM könntest du auch die Daten statt im RAM im > Flash-ROM halten. Beim AVR ist das im AVR-GCC-Tutorial erklärt unter dem > Schlüsselwort PROGMEM.
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.