- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: ACII-Matrixcode sinnvoll speichern

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470

    ACII-Matrixcode sinnvoll speichern

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ihr kennt doch alle Bestimmt die Standart ASCII-Tabele

    Bild hier  


    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.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    35
    Beiträge
    194
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.11.2004
    Ort
    München
    Alter
    36
    Beiträge
    447
    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

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    naja geht in die richtung, aber ich benötige die ASCII fürh herere sachen als für ein Lauflicht.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Zitat Zitat von teslanikola
    ...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

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    thx sag ich da nur, aber ich muss trotzdem ne Multiplikation emulieren, arg und kotz, aber danke jungs!!!

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Nur mal so als Vorschlag: Da ich bei mir eine Proportionalschrift haben wollte hab ich es bei mir mit Tabellen gelöst:

    Code:
    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

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    das hab ich auch schon gemacht, dachte aber das es möglicherweise noch was simpleres gibt

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Vielleicht geht es, wenn du jedem .db eine eigene Zeile spendierst? Kann ja wohl nicht sein, daß dein Assembler ungefragt Nullen einbaut!
    Disclaimer: none. Sue me.

Berechtigungen

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

Labornetzteil AliExpress