Hallo zusammen! Ich habe hier ein Display, welches 160 Segmente besitzt. Auf dem LCD sind Zahlen und Symbole, welche wiederum aus ihren einzelnen Segmenten bestehen. Um das komplette Display zu aktualisieren, muss man also 160 Bit hinschicken und dann reinlatchen. Aber wie macht man das am besten? Also quasi eine Variable mit 160Bit... Mit einem Struct, welches man als Pointer einfach Bit für Bit abarbeitet? Ich habe momentan noch ein kleines Versätndnisproblem, wie es mit den Zahlen ist, also wenn ich beispeilsweise eine einzelne Zahl anzeigen will. Quasi so: Zahl 8 : X X X X X X X Segment: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... Wie kann ich denn jetzt am sinnvolsten genau disen Bereich in meinen 160Bit manipulieren? Hat da jemand schonmal was ähnliches gehabt?
Mit einem Byte-Array? Ein paar zusaetzliche Informationen bezueglich Plattform und verwendeter Sprache waeren vielleicht sinnvoll... ;) Volker
Hallo, es gibt (wie eigentlich überall) mehrere Möglichkeiten: A) Die Aufbereitung der Daten (Ziffern & Symbole) erfolgt im Hauptprogramm. Dann musst deine Routine (im Unterprogramm) nur noch die 160 Bits aus dem Speicher lesen (sorry, bin Assemblerprogrammierer) und zum Display übertragen. Dies hätte den Vorteil, dass die Daten schnell zum Display geschickt werden können und die Übertragungsroutine z.B. per Timerinterrupt aufgerufen werden könnte. Ich denke aber folgende Methode ist für dich geeigneter: B) Du legst dir einen Speicherbereich (ein Array) an, wobei jedes Element für eine komplette Ziffer steht (oder für 8 Symbole). Wenn du dann das Display updaten willst, dann kostet das etwas Rechenleistung, weil du für jedes Bit, welches du überträgst, nachsiehst, ob das entsprechende Segment an oder aus ist. Beispiel: Zahl 8 : X X X X X X X Segment: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... Du willst das Bit für das Segment 5 senden, also schaust du nach, ob in dem Speicher für diese Ziffer das entsprechende Bit für das Segment an oder aus ist. Und dann sendest du entsprechend eine 1 oder 0. Hoffe das hilft fürs Erste... Gruß, Thomas
Sprache ist C in IAR und es handelt sich um einen ML2002-IC. Byte-Array OK, aber eine Ziffer geht halt auch mal über ein Byte hinaus, daher die Frage, wie ich das realisieren könnte?
Einige Randbedinungen musst du schon festlegen. Deine Segmente unterteilst du in struct Arrays und legst dir einen passenden Schriftsatz an. Passend dazu schreibst du dir eine Funktion welche gezielt einen eingeteilten Segmentbereich mit einen beliebigen Zeichen beschreibt bzw. die entsprechenden Teile deines struct Arrays beschreibt. Gleichzeitig schreibst du dir eine Funktion welche das komplette Display aktualisiert. Aber: Was ist das eigentlich für ein Display? Vorallen, wie habe ich mir "160 Segmente" vorzustellen?
Deet schrieb: > Byte-Array OK, aber eine Ziffer geht halt auch mal über ein Byte hinaus, > daher die Frage, wie ich das realisieren könnte? In diesem Falle musst Du natuerlich die Bits in zwei Bytes manipulieren. Zu manipulierendes Bit = X Betrifft Byte Y = floor(X/8) Betrifft Bit Z = X-(8*Y) Es wird natuerlich jeweils bei 0 angefangen zu zaehlen. Und dann wird Bit Z in Byte Y durch eine bitweise Operation gesetzt oder nicht gesetzt. Volker
Nachtaktiver schrieb: > Was ist das eigentlich für ein Display? Vorallen, wie habe ich mir > "160 Segmente" vorzustellen? Das Display hat mehrere Zahlen und Zeichen. Jede Zahl teilt sich in 7 Segmente auf und die alphnumerischen haben halt entsprechend mehr. Insgesamt sind es 160 Segmente.
Ah... click Dann habe ich ein wenig Mist von mir gegeben. Hatte an ein Klassischen Graphisches LCD gedacht.
Nachtaktiver schrieb: > Dann habe ich ein wenig Mist von mir gegeben. Hatte an ein Klassischen > Graphisches LCD gedacht. Nee leider nicht :-( Und das Problem ist halt, dass es nicht eine Ziffer pro Byte ist, sondern die fortlaufend durchgehen von Segment 1 bis 160. Danke schonmal für eure Rückmeldungen, das muss ich mir jetzt mal zu Gemüte führen.
- leg ein Array von 20 Byte (= 160 Bit) an. - erstelle eine Funktion, die das Array ans LCD ausgibt - erstelle eine Funktion, die ein Segment in diesem Array setzt oder löscht Diese Funktion rufst Du dann entsprechend der Ziffer für jedes Segment auf. Dazu ist ein weiteres Array (im Flash) nötig, welches das Segmentmuster pro Ziffer oder Zeichen enthält. Oftmals sind die Segmente eines Digits in gleicher Order, dann kannst Du mit dem Digit-Offset auswählen, an welche Stelle die Ziffer kommt. Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.