7-Segment, was weiß ich wie ich es nennen soll :)

#1553614
Lesenswert?

Ich hole mir die Zeichen für das 7-Segment aus einer Tabelle.
1
const unsigned char Tabelle[] PROGMEM = {249, 164, 176, 153, 146, 130, 248, 128, 144};

Nun möchte ich gerne den Wert der im EEPROM gespeichert ist hervorheben.
Dazu nehme ich mir den Punkt auf dem Segment her.

D.h. Wird beim durchschalten der Ziffern eine Übereinstimmung mit dem 
Wert im EEPROM erziehlt soll der Punkt mitleuchten zur Ziffer.

Ich hatte mir das so gedacht:
1
test = eeprom_read_byte(&eeFooByte);
2
if (nKeyPress == test)
3
{
4
  SEGMENT_PORT = pgm_read_byte(&Tabelle[nKeyPress])+127;
5
}

Also nimm einfach den Wert für den Punkt (das wäre in dem Falle 127 - 
BIN=01111111) und addiere es zum aktuellen Wert.

Aber wie ihr euch ja jetzt sicher denken könnt, funktioniert das nicht.
Tja, nun frage ich mich, wie denn das nun lösen könnte.

Muß ich den Wert aus der Tabelle vielleicht in BIN umwandeln und dann 
das Bit dazuzählen?
Oder wie würdet ihr das machen?
#1553625
Lesenswert?

Manfred W. schrieb:

>
1
> test = eeprom_read_byte(&eeFooByte);
2
> if (nKeyPress == test)
3
> {
4
>   SEGMENT_PORT = pgm_read_byte(&Tabelle[nKeyPress])+127;
5
> }
6
>
>
> Also nimm einfach den Wert für den Punkt (das wäre in dem Falle 127 -
> BIN=01111111) und addiere es zum aktuellen Wert.

Das kann ich mir nicht vorstellen.
Ich will einfach nicht glauben, dass du 7 Leitungen auf 1 setzen musst, 
damit der Punkt an der 7-Segmentanzeige aufleuchtet.

> Muß ich den Wert aus der Tabelle vielleicht in BIN umwandeln und dann
> das Bit dazuzählen?
> Oder wie würdet ihr das machen?

Zunächst mal wäre es gut, wenn du aufschreiben könntest, welches Bit in 
einem Byte welchem Segment in der Anzeige entspricht. Dann wäre es gut 
zu wissen, ob du eine Leitung auf 0 oder auf 1 setzen musst, damit das 
entsprechende Segment aufleuchtet.

Und dann änderst du deine Schreibweise an dieser Stelle von Dezimal nach 
Binär. Denn in diesem Fall macht binär absolut Sinn, weil du tatsächlich 
auf Bitebene arbeitest.

Und dann studierst du den Artikel über Bitmanipulationen um zu lernen, 
wie man gezielt ein Bit setzt bzw. löscht.

http://www.mikrocontroller.net/articles/Bitmanipulation
#1553670
Lesenswert?

Achim schrieb:
> Hab ich es richtig verstanden das deine Segmente leuchten wenn der
>
> Ausgang auf Low ist? Um das Bit zu löschen kannst du ein Und nutzen:
>
>
>
> SEGMENT_PORT = pgm_read_byte(&Tabelle[nKeyPress]) & ~(1 << 7);
>
>
>
> ~(1 << 7) ist ne schönere schreibweise für deine 127 ;)

Was soll ich sagen... Genau das wars! Thanks!

Ja, das ist tatsächlich so, das LOW, lecuhten bedeutet.
Das liegt vermutlich daran das ich eine Segmentanzeige mit gemeinsamer 
Anode verwende. Das bedeutet die Segmentausgänge sind Masse.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren