PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ACII-Matrixcode sinnvoll speichern



teslanikola
20.03.2006, 21:16
Hallo,
ihr kennt doch alle Bestimmt die Standart ASCII-Tabele

http://home.wanadoo.nl/electro1/avr/images/charset.gif


so jetzt will ich diese Tabelle sinnvoll in meinen Falsh o. E²PROM haun, nur ich will das so, dass der ASCII-Code zb. 0x41 fürn A, gleichzeitig angibt wo sich die 5Bytes für die ausgabe verstecken. Mein Grundgedanke:

ASCII: ; Startaddressen

.db daten,daten,daten,daten,daten ; ASCII 0x00 ( Addresse: Startaddresse + ASCII [0x00])
. . .
. . .
. . .
.db daten,daten,daten,daten,daten ; ASCII 0x7F ( Addresse: Startaddresse + ASCII [0x7F])

nurt gibts da ein Problem: Ich muss ja 5Bytes auf eine Addresse schreiben, jetzt geht das nicht habt ihr ne Idde wie ich das besser lösne kann. ich will den ASCII-Code erhalten, und auch zur addressenbestimmung nutzen.

skillii
20.03.2006, 21:30
Du könntest zum Beispiel die Addressen wie folgt berechnen:

Startaddresse + ASCII*5,
dann hat z.B.: das 2. Byte für einen bestimmten ASCII-Wert die Addresse
Startaddresse + ASCII*5 + 1.

Ich hoffe das war das was du brauchst.

teslanikola
20.03.2006, 21:51
Naja werds mal so machen, jetzt hab ich aber ein Prob:

aus dem

.DB 0x7E,0x09,0x09,0x09,0x7E ; für A
.DB 0x7F,0x49,0x49,0x49,0x36 ; für B

macht mein AVR das:

+00000050: 007E
+00000051: 497F
+00000052: 4949

+00000053: 0036
+00000054: 413E
+00000055: 4141

er baut also noch ein 0x00 ein, wie kann ich das unterbinden, weiul sonst hab ich nacher ne menge ungenutzten / unnötig verbrauten flash

PasstScho
20.03.2006, 22:07
Hallo,
Ich habe mir mal eine Laufschrift gemacht.
Dabei ist ein Buchstabe auf 5x8 Pixel limitiert.
Das habe ich mit einem Array gemacht.
Immer 5 Bytes sind ein Buchstabe (ist die x-Richtung jedes "Bildes").
Jedes Byte hat 8 Bits, und stellt die y-Richtung der Bilder dar.
Klappt ganz gut, ich kann nicht klagen.
MfG Alex

teslanikola
20.03.2006, 22:16
naja geht in die richtung, aber ich benötige die ASCII fürh herere sachen als für ein Lauflicht.

bax
20.03.2006, 22:16
...er baut also noch ein 0x00 ein, wie kann ich das unterbinden, weiul sonst hab ich nacher ne menge ungenutzten / unnötig verbrauten flash

Wenn die Anzahl der Bytes nach einem .db ungerade ist, wird automatisch ein 0x00 eingefügt, weil der Programmspeicher 16 bit breit ist. In Deinem Fall ist es am einfachsten, wenn Du zwei Buchstaben in einer Zeile unterbringst.

greetz Rajko

teslanikola
20.03.2006, 22:48
thx sag ich da nur, aber ich muss trotzdem ne Multiplikation emulieren, arg und kotz, aber danke jungs!!!

bax
21.03.2006, 12:02
Nur mal so als Vorschlag: Da ich bei mir eine Proportionalschrift haben wollte hab ich es bei mir mit Tabellen gelöst:



TABLE:

;hier werden die Zeiger zur jeweils ersten Adresse mit Daten generiert

.dw FONT00_CHAR00 ;Zeichen "0"
.dw FONT00_CHAR01 ;Zeichen "1" usw.
.dw FONT00_CHAR02
.dw FONT00_CHAR03
.
.
.
;ab hier stehen die Bitmuster, das erste Byte gibt die Breite des Zeichens an.

FONT00_CHAR00: ;0

.db 0x04, 0xFE, 0x82, 0x82, 0xFE, 0x00

FONT00_CHAR01: ;1

.db 0x04, 0x0, 0x0, 0xFE, 0x0, 0x00
.
.
.
FONT00_CHAR11: ;H

.db 0x05, 0xFE, 0x10, 0x10, 0x10, 0xFE

FONT00_CHAR12: ;I

.db 0x03, 0x82, 0xFE, 0x82
.
.
FONT00_CHAR16: ;M

.db 0x07, 0xFE, 0x4, 0x8, 0x10, 0x8, 0x4, 0xFE



Die Zahlen hab ich allerdings einheitlich breit gemacht, um die Ausgabe sich verändernder Zahlenwerte zu vereinfachen. Und meine Codierung ist nicht mehr ganz so ASCII-konform, ich hab die Ziffern 0...9 auch gleich als Ziffern 0...9 genommen, das spart einiges umrechnen :-)

Der Zugriff geht dann so, das ich mir für das Zeichen 0x0A z.B. den Zeiger auf Table: + 2 * 0x0A setze, mir von dort den Zeiger auf den Beginn der Daten für dieses Zeichen hole, dann die Breite in Bytes nehme und entsprechend oft die nächsten Bytes hole und zum LCD schicke.

greetz Rajko

teslanikola
21.03.2006, 13:24
das hab ich auch schon gemacht, dachte aber das es möglicherweise noch was simpleres gibt

SprinterSB
21.03.2006, 14:33
Vielleicht geht es, wenn du jedem .db eine eigene Zeile spendierst? Kann ja wohl nicht sein, daß dein Assembler ungefragt Nullen einbaut!