Forum: Mikrocontroller und Digitale Elektronik max7219 Bibliothek Dezimal Punkt


von Andreas S. (andreassound)


Lesenswert?

Hallo
Bin hier mit dem max7219 beschäftigt
Nun stellt sich die Frage wie schaltet man den Dezimal punkt an ohne das 
die anderen nummern flakern ????
in den Bibliotheken steht darüber nur leider nichts
Hat jemand ein Tipp??

: Verschoben durch User
von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> Nun stellt sich die Frage wie schaltet man den Dezimal punkt an ohne das
> die anderen nummern flakern ????

Einfach für die gewünschte Stelle (Digit) im auszugebenden Zeichen 
zusätzlich das MSB (= Bit 7) setzen, z.B. per ODER-Verknüpfung.

Das gilt unabhängig vom Decode-Mode. Details siehe Datenblatt.

von Peter D. (peda)


Lesenswert?

Andreas S. schrieb:
> Nun stellt sich die Frage wie schaltet man den Dezimal punkt an ohne das
> die anderen nummern flakern ????

Warum soll da was flackern?
Wen man eine Ziffer ausgibt, wird der Dezimalpunkt mit ausgegeben 
(Oder-Verknüpfung).

: Bearbeitet durch User
von Andreas S. (andreassound)


Lesenswert?

Hallo
Wenn ich den Punkt mit MAX7219_writeData(0x80,2) einschalte
Flackert immer die nummer wo der Punkt gesetzt ist!!
Schalte ich den Punkt mit  |0x80 ein gehen alle punkte an in den Digits 
die gerade gezählt werden !!
Gibt es die Möglichkeit den Punkt zb an digit 3 einzuschalten mit der 
True funktion


void MAX7219_displayNumber(volatile signed long int number)
{



    char negative = 0;

    if (number < 0) {
        negative = 1;
        number *= -1;
    }

    MAX7219_clearDisplay();

    // If number = 0, only show one zero then exit
    if (number == 8) {
        MAX7219_writeData(MAX7219_DIGIT0, 0);
        return;


    }


    char i = 0;

    // Loop until number is 0.
    do {


        MAX7219_writeData(++i, number % 10 |DP );

        number /= 10;
    } while (number);


    if (negative) {
        MAX7219_writeData(++i, MAX7219_CHAR_NEGATIVE);
    }

MAX7219_writeData(0x80,2)

}

von Thomas (Gast)


Lesenswert?

MAX7219_writeData(++i, number % 10 |DP );

Wenn ich mal davon ausgehe dass DP der Dezimalpunkt ist, so wird der ja 
bei jeder Stelle hinzugefügt.

Sollte nur bei i == 2 passieren, das ist die zweite Stelle.

Fehlt da die Fallunterscheidung?

Und die Funktion MAX7219_writeData()? Was ist denn da Datum, was Stelle?

MAX7219_writeData(0x80,2) schreibt nun 2 an Stelle 0x80? Gibt es da 128 
Stellen?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Wenn du beim MAX7219 einen Dezimalpunkt (DP) mit anzeigen willst, musst 
du die Zahl digitweise ausgeben, es sei denn, du hast eine 
Deluxe-Funktion, bei der außer der Zahl auch noch die DP-Stelle als 
weiterer Parameter angegeben werden kann.

Hat deine MAX7219-Library nicht wenigstens eine Digit-Ausgabe, bei der 
der DP als weiterer Parameter (false/true) angegeben werden kann?

Beim MAX7219 muss der DP generell zusammen mit der Ziffer (oder dem 
Zeichen) geschrieben werden, denn er ist ein LED-Segment wie die anderen 
7 auch.

Einen DP über ein bestehendes Zeichen an einer bestimmten Digit-Stelle 
drüber zu schreiben, geht nicht.

Wenn alles richtig gemacht wird, darf auch nichts flimmern oder 
flackern.

von Andreas S. (andreassound)


Lesenswert?

Hallo
in der MAX7219-Library wäre noch vorhanden

     void setColumn(int addr, int col, byte value);

    /*
     * Display a hexadecimal digit on a 7-Segment Display
     * Params:
     * addr  address of the display
     * digit  the position of the digit on the display (0..7)
     * value  the value to be displayed. (0x00..0x0F)
     * dp  sets the decimal point.
     */
    void setDigit(int addr, int digit, byte value, boolean dp);

    /*
     * Display a character on a 7-Segment display.
     * There are only a few characters that make sense here :
     *  '0','1','2','3','4','5','6','7','8','9','0',
     *  'A','b','c','d','E','F','H','L','P',
     *  '.','-','_',' '
     * Params:
     * addr  address of the display
     * digit  the position of the character on the display (0..7)
     * value  the character to be displayed.
     * dp  sets the decimal point.
     */
    void setChar(int addr, int digit, char value, boolean dp);

Wo müsste ich jetzt was eingeben damit der Punkt an 3 stelle über True 
und false  aktiviert wird

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Zunächst kenne ich diese Library nicht, würde aber vermuten, dass es 
demnach sowohl mit setDigit als auch mit setChar geht.

Vermutlich ist das Ganze (wegen "address of the display") für mehrere 
kaskadierte 8-Digit-Displays gedacht.

Bei einem Display mit nur 8 Digits wäre dann für einen DP bei der 3. 
Stelle von rechts wahrscheinlich addr = 1, digit = 3, dann die an der 3. 
Stelle auszugebende Ziffer bzw. das Zeichen und schließlich true.

Bei allen anderen Ziffern/Zeichen ohne DP müsste dann am Schluss 
natürlich jeweils false stehen.

Hast du das schon probiert?

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
Noch kein Account? Hier anmelden.