www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7-Segment, was weiß ich wie ich es nennen soll :)


Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hole mir die Zeichen für das 7-Segment aus einer Tabelle.
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:
test = eeprom_read_byte(&eeFooByte);
if (nKeyPress == test)
{
  SEGMENT_PORT = pgm_read_byte(&Tabelle[nKeyPress])+127;
}

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?

Autor: abraxas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moment, das heißt ein LOW-Bit bedeutet "segment leuchtet"? dann solltest 
du eher || 128 nehmen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred W. schrieb:

>
> test = eeprom_read_byte(&eeFooByte);
> if (nKeyPress == test)
> {
>   SEGMENT_PORT = pgm_read_byte(&Tabelle[nKeyPress])+127;
> }
> 
>
> 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

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leuchtet der Punkt wenn am entsprechenden Portpin eine 0 im Register 
liegt?
Dann sollte anstelle von "+127" "&127" zum Erfolg führen: MSB wird 
gelöscht, alle anderen nehmen den Wert aus dem EEPROM an.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.