Supergroße Fonts auf Display 128x160 (ST7735R) darstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Supergroße Fonts auf Display 128x160 (ST7735R) darstellen

      Hallo zusammen,

      da ich nach Recherche und Probieren nicht mehr weiterkomme, möchte ich versuchen, auf diesem Weg eine Erklärung oder Lösungsansatz zu erhalten.

      Für ein Projekt möchte ich ein 1.8" Display mit SPI-Ansteuerung für die Darstellung sehr großer Textsymbole verwenden.
      Da ich bereits die überaus nützliche Bibliothek von HKipnik (ST7735_functions.inc) an anderer Stelle einsetze, nahm ich an, dass es kein Problem sein sollte, nach Erstellung einer Fonts-Datei (~.font) für eine Symbolgröße von etwas 40x64 mit folgender Programmsequenz der Bibliothek (nach Anpassung an den neuen Dateinamen) zugreifen zu können:


      '*******************************************************************************
      'LCD_Text String -- X -- Y Start -- Font -- Forecolor -- Backcolor
      '*******************************************************************************
      Sub Lcd_text(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Forecolor As Word , Backcolor As Word )

      Local Tempstring As String * 1 , Temp As Word 'Dim local the variables
      Local A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
      Local Row As Byte , Block As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
      Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
      Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
      Local Offset As Word

      Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
      Select Case Fontset
      Case 1 :
      Block = Lookup(0 , Font8x8) 'Add or remove here fontset's that you need or not,
      Byteseach = Lookup(1 , Font8x8)
      Blocksize = Lookup(2 , Font8x8)
      Dummy = Lookup(3 , Font8x8)
      Case 2 :
      Block = Lookup(0 , Font12x16)
      Byteseach = Lookup(1 , Font12x16)
      Blocksize = Lookup(2 , Font12x16)
      Dummy = Lookup(3 , Font12x16)
      '(
      Case 3 :
      Block = Lookup(0 , Font8x12)
      Byteseach = Lookup(1 , Font8x12)
      Blocksize = Lookup(2 , Font8x12)
      Dummy = Lookup(3 , Font8x12)
      Case 4 :
      Block = Lookup(0 , Font6x10)
      Byteseach = Lookup(1 , Font6x10)
      Blocksize = Lookup(2 , Font6x10)
      Dummy = Lookup(3 , Font6x10)
      Case 5 :
      Block = Lookup(0 , Font10x16)
      Byteseach = Lookup(1 , Font10x16)
      Blocksize = Lookup(2 , Font10x16)
      Dummy = Lookup(3 , Font10x16)
      ')
      End Select
      Colums = Blocksize / Block 'Calculate the numbers of colums
      Row = Block * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
      Row = Row - 1 'Want to start with row=0 instead of 1
      Colums = Colums - 1 'Same for the colums
      For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
      Temp = Carcount + 1 'Cut the text string in seperate caracters
      Tempstring = Mid(s , Temp , 1)
      Offset = Asc(tempstring) - 32 'Font files start with caracter 32
      Offset = Offset * Blocksize
      Offset = Offset + 4
      Temp = Carcount * Byteseach
      Temp = Temp + Xoffset
      For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
      A = Rowcount + Yoffset
      Xpos = Temp
      For Columcount = 0 To Colums 'Loop for numbers of Colums
      Select Case Fontset
      Case 1 : Pixels = Lookup(offset , Font8x8)
      Case 2 : Pixels = Lookup(offset , Font12x16)
      ' Case 3 : Pixels = Lookup(offset , Font8x12)
      ' Case 4 : Pixels = Lookup(offset , Font6x10 )
      ' Case 5 : Pixels = Lookup(offset , Font10x16 )
      End Select
      Ypos = A
      For Pixelcount = 0 To 7 'Loop for 8 pixels to be set or not
      Pixel = Pixels.0 'Set the pixel (or not)
      If Pixel = 1 Then
      Call Lcd_set_pixel(xpos , Ypos , Forecolor)
      Else
      If Backcolor <> Transparent Then
      Call Lcd_set_pixel(xpos , Ypos , Backcolor)
      End If
      End If
      Shift Pixels , Right 'Shift the byte 1 bit to the right so the next pixel comes availible
      Incr Ypos 'Each pixel on his own spot
      Next Pixelcount
      Incr Offset
      Incr Xpos 'Do some calculation to get the caracter on the correct Xposition
      Next Columcount
      Next Rowcount
      Next Carcount
      End Sub


      Leider erfolgslos! Zunächst vermutete ich die Fehlerursache in der Kodierung der Fonts-Datei, aber mit keinem der drei eingesetzten Editoren konnte eine funktionsfähige erzeugt werden.

      Beispielsweise konnten folgende Daten problemlos zur Anzeige gebracht werden:


      Digital20x32:
      $asm
      .db 4,20,80,0
      .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;
      .db 0,0,0,0,0,0,
      ...
      $end asm


      Allerdings ist mir die Darstellung noch zu klein.


      Bei weiteren Versuchen stellte sich heraus - egal, welchen installierten Font man als "Ausgangsmaterial" einsetzt - dass ab etwas einer Fontbreite von 40 mit der Routine Sub Lcd_text(...) keine Symbolanzeigen möglich sind; stets ist ein waagerechtes oder senkrechtes "Pixelrauschen" das Ergebnis.
      Beim nächsten Versuch habe ich eine (gekürzte) Fontdatei 48.zip aus einer Sammlung eingesetzt; auch hier keine korrekte Anzeige.

      Zunächst vermutete ich, dass die Variablen-Deklarationen für die Datenmenge nicht ausreicht, aber auch mit einer Änderung hatte ich keinen Erfolg.

      Kennt vielleicht jemand die Ursache und hat eine Lösung für das Problem?

      Gruß Ingolf






    • Amatronik schrieb:

      auch hier keine korrekte Anzeige.
      Bei allen Zeichen? Auch ein "I" oder "," machen Pixelmüll? Immer den selben oder bei jedem anders?

      Amatronik schrieb:

      vermutete ich, dass die Variablen-Deklarationen für die Datenmenge nicht ausreicht
      da würd ich auch drauf wetten. Auch denkbar das das Display "durchdreht" wenn zu viel in Adressen außerhalb des Bildschirms geschrieben werden? Geht es auch schief wenn nur ein Zeichen angezeigt werden soll das nicht über den Rand ragt?
      Muß es ein Font sein? Bilder bräuchten weniger Platz und dürfen beliebige(?) Größe haben.
      Eine Verdopplung wäre auch möglich. damit würde der 32x20 in 64x40 angezeigt?
      Bei kleinen Fonts ging das recht gut - sie wurden leicht "kantig"

      Local a muß Word sein

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Hallo,
      ich habe die Font-Datei bewusst klein gehalten (nur bis zur 9) und mittig das Symbol positioniert, funktioniert auch wunderbar - bis etwa Breite 40!
      Bei einer Displaygröße von 128x160 sollte an den Rändern ausreichend Platz sein.
      Eigenartig bei den Darstellungen ist, dass es vorkommt, dass die Symmetrie zwischen Spalten und Zeilen komplett durcheinander gerät; teilweise ca. 4 : 30 Pixel
      oder 128 : 4.
      Beobachtet habe ich außerdem, dass gegenüber kleineren Fonts der Anzeigebereich sichtbar langsamer gefüllt wird.

      An Bilder habe ich auch schon gedacht, aber warum funktioniert es nicht über die Font-Datei?
      Im Headerbereich der Font-Datei ist beispielsweise die Angabe bei großen Zeichen mit ".db 8,40,320,0" vorhanden, was rechnerisch bei Font 40x64 passt. Hier vermutete ich, dass der Wert "320" nicht korrekt eingelesen werden kann. Ich bin aber mit einem Direkteintrag in die Variable ebenfalls nicht weitergekommen.
      Bei Beispiel-Fonts habe ich an dieser Stelle Werte bis zu 520 gesehen.

      Leider habe ich auch erfolglos an den Deklarationen und den Stackeinstellungen "geschraubt" und das Programm auf ein Minimum reduziert :-(.
      Was meist Du mit einer "Verdopplung", existiert dafür in Bascom ein Befehl für die Größendarstellung?
    • Amatronik schrieb:

      sichtbar langsamer
      Er hat ja auch "Hölle"-Arbeit. Doppelte Größe = Vierfache Pixelmenge.
      Das "A" ist schon Word? Im Simulator sehen die ersten Pixel richtig aus. Jedoch würde es den ganzen Tag(?) dauern bis ein Zeichen vollständig ist.
      Ich würde ein Zeichen mittig mit anderer Hintergrundfabre setzen.
      Vor jedem Next (Pixel-,Colum-,Rowcount) ein Wait 1. Dann sollte deutlich werden wo es hängt .

      Amatronik schrieb:

      dass die Symmetrie zwischen Spalten und Zeilen komplett durcheinander gerät
      Klingt wie ein Config Base Problem. Werden Indexe verwendet?
      Oder ein verlorenes Byte in der Font Data?

      Offset as Word wäre auch zu klein für 140kByte?
      Die Verdopplung ist kein Bascom Befehl sondern ein weiterer Parameter in einem von HKipnik's Codes.
      Dummerweise finde ich gerade nicht den Richtigen ;( Variable-Name "bold"? bei einem sw-Oled?
      Das müsste noch angepasst werden - im besten Fall nur eine weitere Schleife?
    • > Bisher habe ich die eingangs erwähnte Bibliothek verwendet und die funktioniert prima - bis etwas Pixelbreite 40, dann wird es chaotisch!
      > Bascom ist auf dem aktuellen Stand
      > Fontgröße: zur Datenreduzierung mit einer verkürzten ASCII-Anzahl (bis Ziffer 3), obwohl ich in der "Sub" gesehen habe, dass man den
      Startwert von 32 auch erhöhen könnte, um direkt mit der "0" starten zu können

      Zunächst habe ich den hier im Forum von Peer Gehrmann vorgestellten Editor eingesetzt (youtube.com/watch?v=qECnSqFtIKc). Danach den MCS Fonteditor benutzt und da dies auch nicht zum Ziel führte, mich mit der Demoversion des "Font Converter für Bascom AVR" (daschke-ltd.de/product_info.php?products_id=266) beschäftigt.
      Ich denke nicht, dass es an der Struktur der Fontdatei liegt. Bleibt eingentlich nur die "Sub" übrig?

      Es wird m. M. auch nicht helfen, zusätzliche Pausen einzusetzen, da schon der für das Symbol vorgesehene Bereich nicht angesprochen wird.


      Hier zwei Bilder, die das Problem verdeutlichen:

      Font 1 - Pixelchaos
      Font1.jpg
      Font 2 - ok
      Font2.jpg



      Bei Font 1 hatte ich auch schon die Darstellung über die gesamte Breit mit etwa 15er Höhe.
      Es ist egal, welches Ziffer bei Font 1 angesteuert wird, die Darstellungsbreite bleibt konstant!



      Ich möchte gerne einen Font einsetzen, bei dem maximal drei Zeichen in der Breite dargestellt werden können (128 Pixel - 8 Rand = 3x 40).
      Dazu eine Höhe von 68 (ca. Verhältnis beim Goldenen Schnitt).


      Die Frage bleibt, warum Breite 36 problemlos möglich ist, 40 aber schon nicht; und wenn 40 funktioniert, sollte auch mehr möglich sein, oder?
    • Amatronik schrieb:

      da schon der für das Symbol vorgesehene Bereich nicht angesprochen wird.
      Das Pixelchaos ist auch eine 5 die in der Mitte stehen soll? Dann stimmt schon mal ein bisschen. Mit den Pausen würde man erkennen ab wann es schief läuft. Auch eine andere Hintergrundfarbe hilft. Denkbar das er doch den gesamten Bereich beschreibt (nur mit 0). Stimmt die "verbrauchte" Zeit? (viermal länger)
      Der Bascom Editor kommt mit Deiner font klar, da würde ich jetzt auch keinen Fehler sehen.
      Sicher das die Breite und nicht die Höhe das Problem ist. Funktioniert ein 16x64 Font?
    • > Blocksize As Byte: Sollte man annehmen, dass hier "Word" benötigt wird, aber funktioniert nicht :(

      Ich habe einen abgespeckten Font 16x64 (Ak_Segment01.zip) beigelegt. Die belegte Displayfläche scheint ok zu sein, aber angezeigt wird nur Müll mit zwei Ausnahmen.
      Bis auf den Code bei den Zeichen 1 und 2, wo korrekt links bzw. rechts oben ein kleines Quadart angezeigt wird.
      Soweit, so gut. Aber der Code für das Zeichen "2" ist auch für Zeichen "0" hinterlegt. Hier wird über den gesamten Pixelbereich 16x64 nur ein Chaos angezeigt.
      Wieso werden überhaupt Pixel aktiviert, wenn in den Datenreihen nur Nullen für den restlichen ASCII-Code eingetragen sind?
    • Nun, es geht nicht um den Bereich hinter dem beschriebenen Datenbereich, sondern den Werten im Datenbereich, die nicht angezeigt werden. Bei eingetragenenen Nullen sollte das Display dunkel bleiben, oder?
      Warum werden die selben Daten (1 und 2) korrekt angezeigt, die Daten für ASCII "0" aber nicht?
      Solange, wie keine Daten mit einem höherenm ASCI-Wert benötigt werden, erfolgt auch kein Zugriff, der ins Leere führt.
    • Amatronik schrieb:

      erfolgt auch kein Zugriff, der ins Leere führt.
      Schön wärs aber der Zugriff ist "Ducheinander" Die For's habe ich noch nicht unter Kontrolle aber das Lookup schon:

      Quellcode

      1. Sub Lcd_text(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Forecolor As Word , Backcolor As Word )
      2. Local Tempstring As String * 1 , Temp As Word 'Dim local the variables
      3. Local A As Word , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
      4. Local Row As Byte , Block As Byte , Byteseach As Byte , Blocksize As Word , Dummy As Byte
      5. Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
      6. Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
      7. Local Offset As Word
      8. Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
      9. Select Case Fontset
      10. Case 1 :
      11. Restore Font8x8 'Add or remove here fontset's that you need or not,
      12. Case 2 :
      13. Restore Arial_65x72
      14. End Select
      15. '(
      16. Select Case Fontset
      17. Case 1 :
      18. Block = Lookup(0 , Font8x8) 'Add or remove here fontset's that you need or not,
      19. Byteseach = Lookup(1 , Font8x8)
      20. Blocksize = Lookup(2 , Font8x8 )
      21. Dummy = Lookup(3 , Font8x8)
      22. Case 2 :
      23. Block = Lookup(0 , Arial_65x72)
      24. Byteseach = Lookup(1 , Arial_65x72)
      25. Blocksize = Lookup(2 , Arial_65x72)
      26. Dummy = Lookup(3 , Arial_65x72)
      27. ''(
      28. Case 3 :
      29. Block = Lookup(0 , Font8x12)
      30. Byteseach = Lookup(1 , Font8x12)
      31. Blocksize = Lookup(2 , Font8x12)
      32. Dummy = Lookup(3 , Font8x12)
      33. Case 4 :
      34. Block = Lookup(0 , Font6x10)
      35. Byteseach = Lookup(1 , Font6x10)
      36. Blocksize = Lookup(2 , Font6x10)
      37. Dummy = Lookup(3 , Font6x10)
      38. Case 5 :
      39. Block = Lookup(0 , Font10x16)
      40. Byteseach = Lookup(1 , Font10x16)
      41. Blocksize = Lookup(2 , Font10x16)
      42. Dummy = Lookup(3 , Font10x16)
      43. ' )
      44. End Select
      45. ')
      46. Read Block : Read Byteseach : Read Blocksize : Read Dummy 'Read the first 4 bytes from the font file
      47. Colums = Blocksize / Block 'Calculate the numbers of colums
      48. Row = Block * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
      49. Row = Row - 1 'Want to start with row=0 instead of 1
      50. Colums = Colums - 1 'Same for the colums
      51. For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
      52. Temp = Carcount + 1 'Cut the text string in seperate caracters
      53. Tempstring = Mid(s , Temp , 1)
      54. Offset = Asc(tempstring) - 32 'Font files start with caracter 32
      55. Offset = Offset * Blocksize
      56. If Blocksize < 256 Then
      57. Offset = Offset + 4
      58. Else
      59. Offset = Offset + 5
      60. End If
      61. Temp = Carcount * Byteseach
      62. Temp = Temp + Xoffset
      63. For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
      64. A = Rowcount + Yoffset
      65. Xpos = Temp
      66. For Columcount = 0 To Colums 'Loop for numbers of Colums
      67. '(
      68. Select Case Fontset
      69. Case 1 : Pixels = Lookup(offset , Font8x8)
      70. Case 2 : Pixels = Lookup(offset , Arial_65x72)
      71. ' Case 3 : Pixels = Lookup(offset , Font8x12)
      72. ' Case 4 : Pixels = Lookup(offset , Font6x10 )
      73. ' Case 5 : Pixels = Lookup(offset , Font10x16 )
      74. End Select
      75. ')
      Alles anzeigen
      Noch unklar ob das auch mit kleinen Fonts geht

      Local Colums müssen auch Word sein . Die werden zwar nicht so groß aber "Colums = Blocksize / Block" funktioniert nicht richtig wenn sie Byte sind.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Hiermit stimmt die Ausgabegröße 5385Pixel? und der 8x8 Font (64Pixel)

      Quellcode

      1. Sub Lcd_text(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Forecolor As Word , Backcolor As Word )
      2. Local Tempstring As String * 1 , Temp As Word 'Dim local the variables
      3. Local A As Word , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
      4. Local Row As Byte , Block As Byte , Byteseach As Byte , Blocksize As Word , Dummy As Byte
      5. Local Colums As Word , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
      6. Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
      7. Local Offset As Word
      8. Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
      9. Select Case Fontset
      10. Case 1 :
      11. Restore Font8x8 'Add or remove here fontset's that you need or not,
      12. Case 2 :
      13. Restore Arial_65x72
      14. End Select
      15. Read Block : Read Byteseach : Read Blocksize
      16. If Blocksize < 256 Then Read Dummy 'Read the first 4 bytes from the font file
      17. Colums = Blocksize / Block 'Calculate the numbers of colums
      18. Row = Block * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
      19. Row = Row - 1 'Want to start with row=0 instead of 1
      20. Colums = Colums - 1 'Same for the colums
      21. For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
      22. Temp = Carcount + 1 'Cut the text string in seperate caracters
      23. Tempstring = Mid(s , Temp , 1)
      24. Offset = Asc(tempstring) - 32 'Font files start with caracter 32
      25. Offset = Offset * Blocksize
      26. If Blocksize < 256 Then
      27. Offset = Offset + 4
      28. Else
      29. Offset = Offset + 5
      30. End If
      31. Temp = Carcount * Byteseach
      32. Temp = Temp + Xoffset
      33. For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
      34. A = Rowcount + Yoffset
      35. Xpos = Temp
      36. For Columcount = 0 To Colums 'Loop for numbers of Colums
      37. Select Case Fontset
      38. Case 1 : Pixels = Lookup(offset , Font8x8)
      39. Case 2 : Pixels = Lookup(offset , Arial_65x72)
      40. End Select
      41. Ypos = A
      42. For Pixelcount = 0 To 7 'Loop for 8 pixels to be set or not
      43. Pixel = Pixels.0 'Set the pixel (or not)
      44. If Pixel = 1 Then
      45. Call Lcd_set_pixel(xpos , Ypos , Forecolor)
      46. Else
      47. If Backcolor <> Transparent Then
      48. Call Lcd_set_pixel(xpos , Ypos , Backcolor)
      49. End If
      50. End If
      51. 'Print "X:" ; Xpos ; " , Y:" ; Ypos ; " ; " ; Pixel
      52. Shift Pixels , Right 'Shift the byte 1 bit to the right so the next pixel comes availible
      53. Incr Ypos 'Each pixel on his own spot
      54. Next Pixelcount
      55. Incr Offset
      56. Incr Xpos 'Do some calculation to get the caracter on the correct Xposition
      57. Next Columcount
      58. Next Rowcount
      59. Next Carcount
      60. End Sub
      Alles anzeigen
      Versuch mal, ich hab gerade kein 7735 zur Hand
    • Ich hab einen gefunden. Die Font sieht aber nicht sehr schön aus :/ (wie mein Bild ;( )

      ein "!" IMG_20221101_101024_9.gifein " §" IMG_20221101_103712_1.gif

      Sie ist vermutlich als True Type ausgelegt? Ein "W" sähe wohl besser aus.
      PS Pixelsalat - Der Font beginnt mit einem Leerzeichen, das ! ist schon das zweite und ein " kann man nicht als chr(34) übergeben. Daraus werden 5 Zeichen die dann so richtig schreddern :D
      Aber der 7735 nimmt das gelassen er läuft nur über ohne dabei Probleme(Absturz) zu bekommen.
    • Lösungsansatz gefunden!


      01.jpg 02.jpg 03.jpg

      Hi in die Runde,
      es hat zwar eine Weile gedauert, aber wenn das Ergebnis stimmt ;-).

      Das Hauptproblem bei der Darstellung großer Symbole ist, wenn im Kopf der Font-Datei eine Zahl > 255 (Blockanzahl) eingetragen ist, beispielsweise .db 8,40,320,0. Da der vierte Wert nicht benötigt wird, habe ich den Code dahingehend verändert, dass die Blockgröße aus den letzten beiden Werten per Multiplikation errechnet wird (db. 8,40,160,2). Die daran beteiligten Variablen wurden für den größeren Datenbereich mit "Word" deklariert.
      Um die Datenmenge in Grenzen zu halten, folgt nach den Kopfdaten sofort die Kodierung für eine "0", was ebenfalls eine Codeanpassung erforderlich machte. Danach kann man selbst entscheiden, bis zu welchem ASCII-Zeichen der Code im Datenfeld hinterlegt werden soll. In meinem Beispiel sind es die Zeichen 0-9 und der :, der als Trennzeichen eingesetzt werden soll.
      Für Testzwecke habe ich das angepasste Datenfeld direkt im Code eingebunden, was bei den sich daraus ergebenden langen Zeilen etwas problematisch beim Einfügen ist. Es kam vor, dass nicht die kompletten Zeilen eingetragen wurden.
      Daher sollte dieses ebenfalls über eine separate Datei eingebunden werden, ggf. mit einem veränderten Suffix (.font > .xfont), da man die Kopfdaten anpassen muss und ggf. nicht der komplette ASCII-Satz vorhanden ist. Start und Länge des Satzes könnten ebenfalls in den Kopfdaten eingebunden werden.

      Fazit:
      Auch ohne den Einsatz von Bildern ist es möglich, die mit einem der Fonteditoren erzeugten Datenfelder so anzupassen, dass supergroße Fonts - egal welcher Schrifttyp als Basis gewählt wird - darzustellen.

      Vielleicht gibt es ja noch ´ne intelligentere Methode, ich bin gespannt!
    • Hallo,

      hattest Du den Font irgendwie beigelegt, ich konnte nichts finden. Es ist m. M. auch nicht das Problem mit dem Font, da stehen eh nur Nullen und Einsen drin. Das korrekte Auslesen ist das Problem gewesen und die bereits von Dir erwähnte Division.

      Nun, alles was kodiert wird, muss zum Gebrauch wieder decodiert werden. Ich weiß nicht, ob sich das bei den paar Zeichen, die ich einsetzen wollte, Sinn macht. Einsparen kann man einiges, wenn man sich die Font-Datei so "hinbiegt", wie man sie benötigt, da der Aufbau nicht so kompliziert ist.
    • Ich habe mit Deinem Font "48" (Arial_65x72 aus #1) versucht. Mit einen Mega8. Der besteht nun nur noch aus zwei Zeichen (-und 2) damit der mega nicht "platzt" :D
      Das hinbiegen geht bei wenigen Zeichen, muß aber dann je von dem Programm unterstützt werden.
      Nun sehe ich gar keine Chance das zu "Standardiesieren" Evt das Dummy (das 4.Byte im Heather) mit dem Offset zu beschreiben? Welche Aufgabe hat das normal?
    • Der Atmega8 ist für solche Aufgaben sicherlich überfordert; bei meinem ATmeg32 gab es stets "Grenzüberschreitungen".
      Datenfelder (Arrys) lassen sich anders deklarieren, wenn man mit Integer oder Long arbeiten möchte, aber für "Word" ist mir nichts bekannt.
      Vielleicht kann man mit zwei Dateien oder Heather arbeiten, um Zahlen >255 einlesen zu können. Vielleicht ein Zusatzdatenfeld nur mit den zu erwartenden Dimensionen? Dies weicht allerdings immer von den .font-Standard ab :-(.
      Ich habe Hkipnik angefragt, mal sehen, was er antwortet.
      Ist vielleicht noch keiner auf die Idee gekommen, dass wertvolle Display nur mit einem Symbol zu beschreiben ...
      DATA
      'Note that integer values (>255 or <0) must end with the %-sign
      'also note that the data type must match the variable type that is used for the READ statement

      'Note that LONG values must end with the &-sign
      'Also note that the data type must match the variable type that is used for the READ statement

      Für das Eintragen des zusätzlichen Symbols sollte sich jede PR-Sprache eignen, aber irgendwie soll ja alles in den MC passen oder man liest aus einer Speicherkarte, was weiteren Aufwand und Zeit bedeutet.