[gelöst] Anzeige TFT flimmerfrei - Nachtrag - Netzteil ist fertig

Der Code ist von #23 - ich habe mal noch ein Foto gemacht.
So wie ich es sehe wandert die Null nicht.

Nee, die Null wandert nicht, aber der Ampere-Punkt wandert nach rechts und die Volt-Sieben wandert nach links.

Das ist aber ein unschöner* Font (jedenfalls für den Zweck).
Meiner bescheidenen Meinung nach sollten die Ziffern alle immer gleich breit sein; insbesondere wenn sie Siebensegmentanzeigen nachbilden sollen. Die sind ja auch immer gleich breit.

Da kannst Du aber nix für - ansonsten ein sehr schickes Teil, wäre doch mal was für diesen Thread!

* Meine wirkliche Meinung ist der Selbstzensur zum Opfer gefallen.

maik_s:
Der Code ist von #23

Achtung Quick & dirty. Das geht besser ... Aber zum testen

  // anzeigen
  if (strcmp (busstr, oldbusstr) != 0) // vergleicht die Zeichenketten
  {
    tft.fillRect(160, 15, 115, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_GREEN);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 60 );
    if (busvalue <= 9)
    {
      Serial.println("einstellig busstr");
      tft.print(" ");
    }
    tft.print(busstr); // gibt die Zeichenkette aus
    strcpy(oldbusstr, busstr); // speichert die Zeichenkette für späteren Vergleich
  }

  if (strcmp (curstr, oldcurstr) != 0)
  {
    tft.fillRect(160, 95, 115, 50, ILI9341_BLACK);
    tft.setTextColor( ILI9341_RED);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 140 );
    if (curvalue <= 9)
    {
      Serial.println("einstellig curstr");
      tft.print(" ");
    }
    tft.print(curstr); // show the new value current
    strcpy(oldcurstr, curstr);
  }

  if (strcmp (powstr, oldpowstr) != 0)
  {
    tft.fillRect(160, 175, 115, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_BLUE, ILI9341_BLACK);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 220);
    if (powvalue <= 9)
    {
      Serial.println("einstellig powstr");
      tft.print(" ");
    }
    tft.print(powstr); // show the value new power
    strcpy(oldpowstr, powstr);
  }
}

Alles ab Zeile 121 damit ersetzen.

Kennst Du einen anderen, frei skalieren Font ?
Der müsste allerdings zu der Adafruit GFX Lib passen.

Müsste ich suchen.

@my_xy_projekt: Wo hast Du den SevenSegment her? Bei meiner Adafruit_GFX kommt der nicht vor...
Man könnte den bei Bedarf ja ggf. modifizieren (wenn er nicht gleich breit ist).

wno158:
@my_xy_projekt: Wo hast Du den SevenSegment her?

Nicht ich ... war der TO...
Kommt in #23 vor und stammt offensichtlich von ada. Für den 24p7b:

Den Font findest Du nicht bei ada.
Das war etwas umständlich : ich hab einen freier ttf Font im Web gesucht und dann mit den Onlinetool :
https://rop.nl/truetype2gfx/
nach gfx umgewandelt und bei der ada Lib im Font Verzeichnis rein kopiert.
Die Fonts im Code bei #23 habe ich gegen Siebensegment Fonts ausgetauscht.

my_xy_projekt : powervalue etc. gibt es im Sketch nicht / sind nicht deklariert.
Ich habe diese daher gegen powerstr etc. ausgetauscht.
Leider jetzt mit dieser Fehlermeldung :

ISO C++ forbids comparison between pointer and integer [-fpermissive]

Anscheinend hat das was mit den Strings zu tun.
Geht der if Vergleich auch mit Strings ?

maik_s:
powervalue etc. gibt es im Sketch nicht / sind nicht deklariert.

Moment - der in #23:

  float busvalue = 0.0; // Zwischenvariable die berechnet wird
  float curvalue = 0.0;
  float powvalue = 0.0;

Ich prüfe auf:

    if (busvalue <= 9)
    if (curvalue <= 9)
    if (powvalue <= 9)

Der komplette code aus #23 ergänzt:

// Forensketch - ungetestet
// basiert auf https://forum.arduino.cc/index.php?topic=729138.msg4928931#msg4928931
#include <INA219.h>
#include <SPI.h>
#include <Wire.h>

#include <Adafruit_GFX.h>       // include Adafruit graphics library
#include <Adafruit_ILI9341.h>   // include Adafruit ILI9341 TFT library
#include <Fonts/FreeSerif24pt7b.h>
#include <Fonts/Seven_Segment30pt7b.h>

#define TFT_CS    14     // TFT CS  pin is connected to arduino pin 8
#define TFT_RST   13      // TFT RST pin is connected to arduino pin 9
#define TFT_DC    12   // TFT DC  pin is connected to arduino pin 10

// initialize ILI9341 TFT library
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

#define TFT_GREY 0x5AEB // New colour
#define TFT_Yellow 0xFFE0
#define TFT_AQUA 0x0000
#define TFT_GOLD 0xA508
#define TFT_SILVER 0xA510

/*
  A few colour codes:

  code  color

  #define ILI9341_BLACK 0x0000       ///<   0,   0,   0
  #define ILI9341_NAVY 0x000F        ///<   0,   0, 123
  #define ILI9341_DARKGREEN 0x03E0   ///<   0, 125,   0
  #define ILI9341_DARKCYAN 0x03EF    ///<   0, 125, 123
  #define ILI9341_MAROON 0x7800      ///< 123,   0,   0
  #define ILI9341_PURPLE 0x780F      ///< 123,   0, 123
  #define ILI9341_OLIVE 0x7BE0       ///< 123, 125,   0
  #define ILI9341_LIGHTGREY 0xC618   ///< 198, 195, 198
  #define ILI9341_DARKGREY 0x7BEF    ///< 123, 125, 123
  #define ILI9341_BLUE 0x001F        ///<   0,   0, 255
  #define ILI9341_GREEN 0x07E0       ///<   0, 255,   0
  #define ILI9341_CYAN 0x07FF        ///<   0, 255, 255
  #define ILI9341_RED 0xF800         ///< 255,   0,   0
  #define ILI9341_MAGENTA 0xF81F     ///< 255,   0, 255
  #define ILI9341_YELLOW 0xFFE0      ///< 255, 255,   0
  #define ILI9341_WHITE 0xFFFF       ///< 255, 255, 255
  #define ILI9341_ORANGE 0xFD20      ///< 255, 165,   0
  #define ILI9341_GREENYELLOW 0xAFE5 ///< 173, 255,  41
  #define ILI9341_PINK 0xFC18        ///< 255, 130, 198

*/

float shuntvoltage = 0.0;
float busvoltage = 0.0;
float current = 0.0;
float power = 0.0;

INA219 ina;

void setup(void)
{
  // Default INA219 address is 0x40
  ina.begin();
  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(ILI9341_BLACK);
  tft.drawRect(0, 0, 320, 80, ILI9341_WHITE );
  tft.drawRect(2, 2, 316, 76, ILI9341_WHITE );
  tft.drawRect(0, 80, 320, 80, ILI9341_WHITE );
  tft.drawRect(2, 82, 316, 76, ILI9341_WHITE );
  tft.drawRect(0, 160, 320, 80, ILI9341_WHITE );
  tft.drawRect(2, 162, 316, 76, ILI9341_WHITE );
  tft.setTextColor( ILI9341_YELLOW);
  tft.setFont(&FreeSerif24pt7b);
  tft.setTextSize(1); // For double sized fonts
  tft.setCursor(10, 50 );
  tft.print("Volt:"); // show the new value busvoltage
  tft.setCursor(10, 130 );
  tft.print("Amp.:"); // show the new value current
  tft.setCursor(10, 210 );
  tft.print("Pow.:"); // show the new value power



  // Configure INA219
  ina.configure(INA219_RANGE_16V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_1S);

  // Calibrate INA219. Rshunt = 0.1 ohm
  ina.calibrate(0.10, 2);

}

void loop(void)
{
  //Variablen festlegen
  float busvalue = 0.0; // Zwischenvariable die berechnet wird
  float curvalue = 0.0;
  float powvalue = 0.0;
  char busstr[8] = "\0"; // Zeichenkette für Wert
  static char oldbusstr[8] = "\0"; // Zeichenkette zum zwischenspeichern und vergleichen
  char current[8] = "\0";
  static char oldcurstr[8] = "\0";
  char powstr[8] = "\0";
  static char oldpowstr[8] = "\0";

  // Werte einlesen
  busvoltage = ina.readBusVoltage();
  current = ina.readShuntCurrent();
  power = ina.readBusPower();
  // berechnen
  busvalue = (busvoltage * 1.025);
  curvalue = (current * 1.11);
  powvalue = (power * 1.105);
  // umwandeln - wandelt float in Zeichenkette um, schneidet Nachkommastellen ab
  dtostrf(busvalue, 6, 2, busstr); // float, Gesamtstellen, davon Nachkommastellen, string
  strcat(busstr, " ");
  dtostrf(curvalue, 6, 2, curstr);
  strcat(curstr, " ");
  dtostrf(powvalue, 6, 2, powstr);
  strcat(powstr, " ");
  // anzeigen
  if (strcmp (busstr, oldbusstr) != 0) // vergleicht die Zeichenketten
  {
    tft.fillRect(160, 15, 115, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_GREEN);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 60 );
    if (busvalue <= 9)
    {
      Serial.println("einstellig busstr");
      tft.print(" ");
    }
    tft.print(busstr); // gibt die Zeichenkette aus
    strcpy(oldbusstr, busstr); // speichert die Zeichenkette für späteren Vergleich
  }

  if (strcmp (curstr, oldcurstr) != 0)
  {
    tft.fillRect(160, 95, 115, 50, ILI9341_BLACK);
    tft.setTextColor( ILI9341_RED);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 140 );
    if (curvalue <= 9)
    {
      Serial.println("einstellig curstr");
      tft.print(" ");
    }
    tft.print(curstr); // show the new value current
    strcpy(oldcurstr, curstr);
  }

  if (strcmp (powstr, oldpowstr) != 0)
  {
    tft.fillRect(160, 175, 115, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_BLUE, ILI9341_BLACK);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(170, 220);
    if (powvalue <= 9)
    {
      Serial.println("einstellig powstr");
      tft.print(" ");
    }
    tft.print(powstr); // show the value new power
    strcpy(oldpowstr, powstr);
  }
}

@Maik: Ah ja, danke.

Es sollte möglich sein, in den "Metadaten" der Ziffern die gleiche Breite herzustellen, ohne das Pixelmuster selbst anfassen zu müssen.
Traust Du Dir zu, mit Hilfe an dem Fontfile rumzubasteln?
Ich habe leider gerade kein System mit Display am Start; das würde dann etwas Ping/Pong werden.
Ansonsten mach ein ZIP draus und häng es hier an; dann versuche ich das mal trocken.

Ich habe das noch nie gemacht - keine Ahnung ob ich das schaffe.
Mein Fehler mit der Fehlermeldung - ich hatte den Code noch einmal angefasst und jetzt nicht mehr daran gedacht.
Das ist der aktuelle Code:

#include <INA219.h>
#include <SPI.h>
#include <Wire.h>

#include <Adafruit_GFX.h>       // include Adafruit graphics library
#include <Adafruit_ILI9341.h>   // include Adafruit ILI9341 TFT library
#include <Fonts/Seven_Segment30pt7b.h>
#include <Fonts/DS_DIGI35pt7b.h>

 
#define TFT_CS    14    // TFT CS  pin is connected to arduino pin 14
#define TFT_RST   13    // TFT RST pin is connected to arduino pin 13
#define TFT_DC    12    // TFT DC  pin is connected to arduino pin 12

// initialize ILI9341 TFT library
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

#define TFT_GREY 0x5AEB // New colour
#define TFT_Yellow 0xFFE0 
#define TFT_AQUA 0x0000
#define TFT_GOLD 0xA508
#define TFT_SILVER 0xA510

  float value1;
  float value2;
  float value3;

  float shuntvoltage = 0.0;
  float busvoltage = 0.0;
  float current = 0.0;
  float power = 0.0;

INA219 ina;
   
void setup(void)
{  
  
  Serial.begin(115200);
  ina.begin(); // Default INA219 address is 0x40
  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(ILI9341_BLACK);
  tft.drawRect(0, 0, 320, 80, ILI9341_WHITE );
  tft.drawRect(2, 2, 316, 76,ILI9341_WHITE );
  tft.drawRect(0, 80, 320, 80,ILI9341_WHITE );
  tft.drawRect(2, 82, 316, 76, ILI9341_WHITE );
  tft.drawRect(0, 160, 320, 80, ILI9341_WHITE );
  tft.drawRect(2, 162, 316, 76,ILI9341_WHITE );
  tft.setTextColor( ILI9341_YELLOW);
  tft.setFont(&DS_DIGI35pt7b);
  tft.setTextSize(1); 
  tft.setCursor(10, 60 );
  tft.print("VOLT"); 
  tft.setCursor(10, 138 );
  tft.print("AMPR"); 
  tft.setCursor(10, 218 );
  tft.print("POWR"); 
 
 
 
  // Configure INA219
  ina.configure(INA219_RANGE_16V, INA219_GAIN_160MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_1S);

  // Calibrate INA219. Rshunt = 0.1 ohm
  ina.calibrate(0.10, 2);
}

void loop(void)
{
  char busstr[8] = "\0"; // Zeichenkette für Wert
  static char oldbusstr[8] = "\0"; // Zeichenkette zum zwischenspeichern und vergleichen
  char curstr[8] = "\0";
  static char oldcurstr[8] = "\0";
  char powstr[8] = "\0";
  static char oldpowstr[8] = "\0";
  
  value1 = (ina.readBusVoltage() *0.995);  // Anzeigewerte abgleichen
  value2 = (ina.readShuntCurrent() * 0.95);
  value3 = (ina.readBusPower()*0.94); 
  
  float u =((int) (value1 * 100) / 100.0);
  float i =((int) (value2 * 100) / 100.0);
  float p =((int) (value3 * 100) / 100.0);

  
  dtostrf(u, 6, 2, busstr); // float, Gesamtstellen, davon Nachkommastellen, string
  strcat(busstr, " ");
  
  dtostrf(i, 6, 2, curstr);
  strcat(curstr, " ");
  
  dtostrf(p, 6, 2, powstr);
  strcat(powstr, " ");
  
 // anzeigen
  if (strcmp (busstr, oldbusstr) != 0) // vergleicht die Zeichenketten
  {
    tft.fillRect(160, 15, 150, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_GREEN);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(150, 60 );
    if (u <= 9)
    {
      Serial.println("einstellig busstr");
      tft.print(" ");
    }
    tft.print(busstr); // gibt die Zeichenkette aus
    strcpy(oldbusstr, busstr); // speichert die Zeichenkette für späteren Vergleich
  }

  if (strcmp (curstr, oldcurstr) != 0)
  {
    tft.fillRect(160, 95, 150, 50, ILI9341_BLACK);
    tft.setTextColor( ILI9341_RED);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(150, 140 );
    if (i <= 9)
    {
      Serial.println("einstellig curstr");
      tft.print(" ");
    }
    tft.print(curstr); // show the new value current
    strcpy(oldcurstr, curstr);
  }

  if (strcmp (powstr, oldpowstr) != 0)
  {
    tft.fillRect(160, 175, 150, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_BLUE);
    tft.setFont(&Seven_Segment30pt7b);
    tft.setTextSize(1); // For normal sized fonts
    tft.setCursor(150, 220);
    if (p <= 9)
    {
      Serial.println("einstellig powstr");
      tft.print(" ");
    }
    tft.print(powstr); // show the value new power
    strcpy(oldpowstr, powstr);
  }
}

Die Darstellung hat sich nicht geändert - sieht immer noch wie in #36 aus.
Also liegt es doch an den Font ?
In der zip Datei sind die beiden Fonts - kann man da noch was machen ?

Font.zip (14.1 KB)

Ich denke ja - Du müsstest es halt mal ausprobieren. Die Zeilen werden dann aber länger, da musst Du evtl. vorne was wegsparen.
Anbei der modifizierte SevenSegment-Font; Namen habe ich nicht geändert.

Wenn es (a) funktioniert und (b) interessiert kann ich auch gleich noch erklären, was ich da angestellt habe.

Seven_Segment30pt7b.zip (5.79 KB)

herzlichen dank - sieht schon besser aus (im Vergleich zu #40).
Ich weiß nicht ob man das auf den Foto sieht - der "Strich" der Eins ist Mittig zur Null.
Daher springt die Zahl noch etwas nach rechts wenn z.B. Zahlen ab Zwei dargestellt werden
Erst dann ist der rechte "Strich" komplett rechtsbündig zu den anderen Zahlen.
Ideal wäre es, wenn die Eins auch rechts in einer Flucht zu den anderen Zahlen stehen würde.
Aber da muss man schon sehr genau hinschauen - dass sind nur wenige Pixel Differenz.
Wie hasst Du dass hinbekommen bzw. ist es noch möglich das geringe nach rechts springen noch
"abzuschalten" ?
im prinzip kann es auch so bleiben - wie gesagt man muss sehr genau hinschauen.

wno158:
Wenn es (a) funktioniert und (b) interessiert kann ich auch gleich noch erklären, was ich da angestellt habe.

So, wie es aussieht ist a erfüllt, also sind wir an b interessiert :wink:

Gruß Tommy

Nun denn, war noch ein wenig Pixel-Schieberei nötig. '3' und '7' standen auch noch zu weit links. Das Ergebnis wieder im Anhang.

Also: In der Datei gxfont.h stehen zwei Strukturen, die erste ist die für uns interessante:

typedef struct {
  uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap
  uint8_t width;         ///< Bitmap dimensions in pixels
  uint8_t height;        ///< Bitmap dimensions in pixels
  uint8_t xAdvance;      ///< Distance to advance cursor (x axis)
  int8_t xOffset;        ///< X dist from cursor pos to UL corner
  int8_t yOffset;        ///< Y dist from cursor pos to UL corner
} GFXglyph;

Eine Font-Datei besteht aus einem ewig langen Byte-Array, der die zu setzenden Pixel für alle Zeichen enthält:

const uint8_t Seven_Segment30pt7bBitmaps[] PROGMEM = {

Dahinter ein Array aus eben diesen Strukturen - eine für jedes im Font enthaltende Zeichen (das jeweils dankenswerterweise im Kommentar aufgeführt ist - das sind die originalen Daten aus dem Font):

const GFXglyph Seven_Segment30pt7bGlyphs[] PROGMEM = {
...
  {  1692,  22,  42,  30,    4,  -41 },   // 0x30 '0'
  {  1808,   4,  42,  11,    4,  -41 },   // 0x31 '1'
  {  1829,  22,  42,  30,    4,  -41 },   // 0x32 '2'
  {  1945,  20,  42,  27,    4,  -41 },   // 0x33 '3'
  {  2050,  22,  42,  30,    4,  -41 },   // 0x34 '4'
  {  2166,  22,  42,  30,    4,  -41 },   // 0x35 '5'
  {  2282,  22,  42,  30,    4,  -41 },   // 0x36 '6'
  {  2398,  20,  42,  27,    4,  -41 },   // 0x37 '7'
  {  2503,  22,  42,  30,    4,  -41 },   // 0x38 '8'
  {  2619,  22,  42,  30,    4,  -41 },   // 0x39 '9'
...

Die Zeichen kommen nun folgendermaßen auf's Papier:
Der imaginäre Cursor wird um xOffset nach rechts verschoben, dann kommen die Pixel aus dem Byte-Array ab bitmapOffset in Breite width und am Ende noch eine Verschiebung um xAdvance. Die wird aber von der ursprünglichen Cursorposition aus gerechnet. Damit lässt sich leicht die Breite eines Textes errechnen.

In den Daten oben sind fast alle Zeichen 22 Pixel breit, 1, 3 und 7 sind schmaler - und vor allem sind die xAdvance auch kleiner.
Die Änderung ist dann naheliegend:
Alle xAdvance müssen gleich groß werden (30) und die horizontale Position des Zeichens in der Box wird über xOffset bestimmt. Hier in einer Art 'ASCII-Art' (bin jetzt zu faul, das schön auf Kästchenpapier zu malen):

30 Pixel Breite : 0123456789_123456789_123456789
je 4 frei li/re : ....                      ....
Lineal xOffset  :     0123456789_123456789_1
Zeichenbreite 22:     xxxxxxxxxxxxxxxxxxxxxx
Zeichenbreite  4:                       xxxx
Zeichenbreite 20:       xxxxxxxxxxxxxxxxxxxx

EDIT: Ich glaube, dass passt noch nicht ganz. Die vier freien Pixel links kommen bei den 22 Pixel breiten Ziffern vom xOffset, damit ist das Lineal falsch. Muss ich nochmal nachdenken - wenn die '1' jetzt an der richtigen Stelle steht. Wenn nicht: An der 18 drehen. /EDIT

Und zum guten Schluß die angepassten Werte im angehängten Font, der damit für die Ziffern ein "Monospace"-Font geworden ist:

 {  1692,  22,  42,  30,    4,  -41 },   // 0x30 '0'
  {  1808,   4,  42,  30,   18,  -41 },   // 0x31 '1'
  {  1829,  22,  42,  30,    4,  -41 },   // 0x32 '2'
  {  1945,  20,  42,  30,    6,  -41 },   // 0x33 '3'
  {  2050,  22,  42,  30,    4,  -41 },   // 0x34 '4'
  {  2166,  22,  42,  30,    4,  -41 },   // 0x35 '5'
  {  2282,  22,  42,  30,    4,  -41 },   // 0x36 '6'
  {  2398,  20,  42,  30,    6,  -41 },   // 0x37 '7'
  {  2503,  22,  42,  30,    4,  -41 },   // 0x38 '8'
  {  2619,  22,  42,  30,    4,  -41 },   // 0x39 '9'

Seven_Segment30pt7b.zip (5.79 KB)

Danke für die Erklärung.

Gruß Tommy

Danke für die Mühe und die super Erklärung !
Hast Du beruflich damit zu tun ?
Ich als "Selbstlerner" hätte das auf Anhieb nicht/nie geschafft.
Die Darstellung sieht jetzt so aus :

Ich mach für Heute Schluss - Morgen ist auch noch ein Tag.
Was sagen die "Anderen" zum Ergebniss ?

Okay - aber so ganz passt es noch nicht (mir jedenfalls)
Ich glaube, die 18 bei der '1' ist noch zu klein und sollte eine 22 werden (nochmal vier Pixel nach rechts).
Die 6 bei '3' und '7' dürfte wohl eine 7 werden.

Das kriegst Du jetzt selber hin.

Ich kann auch auf dem vergrößerten Bild nur begrenzt Pixel zählen - die schwarzen machen Probleme. Wenn Du die mit Hintergrundfarbe dunkelgrau etwas anschalten könntest und dann nochmal ein Bild (der untere rechte Teil mit rot 1.00 und blau 0.78 reicht) machen könntest wäre es perfekt. Dann schaue ich morgen früh oder spätestens morgen Abend nochmal drauf.

maik_s:
zum Ergebniss ?

Die rote 1 muss rechts rüber.

my_xy_projekt:
Die rote 1 muss rechts rüber.

Ja, und zwar um 4 Pixel:

@Maik:
Ich habe mal mit dem Excel von hier in den Font reingeschaut. Nur die '1' war noch falsch; '3' und '7' können bleiben.

Beruflich ist das 25 Jahre her, da habe ich mal Fonts für ein System aufbereitet, die im BDF-Format angeliefert wurden. Die Pixel-Pfriemelei überkommt mich gelegentlich wieder...

Jetzt sollte es fertig sein.

Seven_Segment30pt7b.zip (5.79 KB)

wno158:
Ja, und zwar um 4 Pixel:

Beruflich ist das 25 Jahre her, da habe ich mal Fonts für ein System aufbereitet,

Na sind meine Augen nicht ganz so schlecht :wink:
Schick gemacht! ++

Wir haben mal Schnitte für eine der ersten Coreldraw gemacht - aber ich glaub da gab es schon Software für, ohne selber rechnen zu müssen...
Man ist das her....