Hallo, versuche an einem LCD-Display in der 2. Zeile ein Balkendiagramm laufen zu lassen. Grund ist ich möchte eine Sinuskurve messen und am Display soll dann sowas herauskommen links oben der Wert im Klartext ______________________________________ |________________________________________| |________________________________________| -1 0 +1 Ich würde jetzt gerne die schwarzen Blöcke auftauchen lassen, weiß zwar das es der Wert 255 oder 0xFF bei dem Display ist, weiß aber nicht wie ich es bei dem Display anzeigen lasse. Benutze die Micro-SPS und habe dort das normale 2x16 Zeilen Display. danke docsneider
Kannst du normalen Text ausgeben? Was ist wenn du anstelle der Blöcke deinen Balken erst mal mit * malst, kriegst du es dann hin? (Sooo schwer ist das doch gar nicht. Ausgehend vom auszugebenden Wert, der im Bereich -1.0 bis +1.0 liegt, errechnet man sich, wieviele * man benötigt und wo, relativ gesehen zum linken Rand man mit der Ausgabe anfangen muss. Dann positioniert man am LCD den Cursor in diese Spalte und gibt die entsprechende Anzahl an Zeichen aus. Etwas Überlegung muss man noch in das Problem stecken, dass einmal auf das LCD ausgegebene * ja auch wieder verschwinden müssen, aber auch das ist eigentlich nicht so schwer wenn man das Problem einmal erkannt hat. Auf jeden Fall bewegt sich alles in einem Mathe-Bereich, der nicht mehr als den allgegenwärtigen Drei-Satz erfordert. Du weißt schon: 3 Äpfel kosten 2 Euro, wieviel kosten 7 Äpfel)
mein Vorschlag dazu:
1 | // zeigt einen Wert von -100 bis +100 auf einem 2x16-LCD an, und zwar
|
2 | // in der ersten Zeile als Bruchzahl, in der zweiten als Balken
|
3 | // (-100->"-1.00", -99->"-0.99" ...):
|
4 | void writeValue( int value ) |
5 | {
|
6 | // Zeilenlänge des LCD:
|
7 | const int LEN_ZEILE = 16; |
8 | |
9 | int iKlotz; |
10 | |
11 | // soviele Klötze sollen gemalt werden:
|
12 | // Man hat 16 Möglichkeiten für die Klötze, sowie 201 mögliche
|
13 | // Zahlenwerte (-100...+100).
|
14 | // Jeder Klotz steht also für 201/16 mögliche Werte, das sind 12 bis
|
15 | // 13 Werte je Klotz.
|
16 | |
17 | // so werden jeweils etwa gleich viele Werte auf einen Klotz
|
18 | //abgebildet, also:
|
19 | // value: nKloetze:
|
20 | // -100...-89 0
|
21 | // -88...-77 1
|
22 | // -76...-65 2
|
23 | // ...
|
24 | // 78...88 15
|
25 | // 89...100 16
|
26 | //int nKloetze = ( value+100 )*LEN_ZEILE/(201-(201/LEN_ZEILE));
|
27 | |
28 | // so dagegen haben 0 und 16 Klötze nur halb soviele Werte, also:
|
29 | // value: nKloetze:
|
30 | // -100...-94 0
|
31 | // -93...-81 1
|
32 | // -80...-69 2
|
33 | // ...
|
34 | // 83...95 15
|
35 | // 96...100 16
|
36 | int nKloetze = ( value+100+201/LEN_ZEILE/2 )*( LEN_ZEILE - 1 )/(201-(201/LEN_ZEILE)); |
37 | |
38 | lcd1.setCursor( 0, 0 ); |
39 | |
40 | // In erster Zeile den Wert ausgeben:
|
41 | |
42 | // Vorzeichen:
|
43 | if( value<0 ) |
44 | {
|
45 | lcd1.writeData( '-' ); |
46 | value = -value; |
47 | }
|
48 | else
|
49 | {
|
50 | lcd1.writeData( '+' ); |
51 | }
|
52 | |
53 | |
54 | // Wert begrenzen:
|
55 | if( value>100 ) |
56 | {
|
57 | value = 100; |
58 | }
|
59 | |
60 | if( value==100 ) |
61 | {
|
62 | lcd1.writeData( '1' ); |
63 | value = 0; |
64 | }
|
65 | else
|
66 | {
|
67 | lcd1.writeData( '0' ); |
68 | }
|
69 | |
70 | |
71 | lcd1.writeData( '.' ); |
72 | |
73 | // 1. Nachkommastelle:
|
74 | lcd1.writeData( '0'+(value/10) ); |
75 | |
76 | // 2. Nachkommastelle:
|
77 | lcd1.writeData( '0'+(value%10) ); |
78 | |
79 | |
80 | // Klötze ausgeben:
|
81 | lcd1.setCursor( 0, 1 ); |
82 | for( iKlotz=0; iKlotz<nKloetze; ++iKlotz ) |
83 | {
|
84 | lcd1.writeData( 0xff ); |
85 | }
|
86 | for( ; iKlotz<LEN_ZEILE; ++iKlotz ) |
87 | {
|
88 | lcd1.writeData( ' ' ); |
89 | }
|
90 | |
91 | }
|
(die lcd-Funktionen entsprechend durch deine eigenen ersetzen...)
Dann noch eine Idee dazu: Man könnte sich einen Zeichensatz definieren, in dem ein Zeichen die linke Pixelspalte gesetzt hat, das zweite Zeichen die linken beiden etc.; dadurch könnte man den Balken feiner auflösen.
das ist ja ne ausführliche Antwort, Danke. Nun das Prinzip verstehe ich schon, nur ich benutze die lib_sps Libary und habe dort habe ich " printf("%6d", irgendeine Zahl) " befehle. Da hatte ich jetzt versucht 0xFF oder 255 einzugeben um ein Klotz erscheinen zu lassen. Sorry wenn ich mich zu ungenau ausgedrückt habe !! Hab noch kaum Erfahrung mit MC, will es aber ändern. ;-)
Dessen http://www.gb97816.homepage.t-online.de/ Projekt KT88 macht so was, Sourcecode konnte ich aber auf die Schnelle nicht finden, Hab ich aber auch schon woanders gesehen. Man bracht halt 5 von den 8 frei definierbaren Bitmuster-zeichen.
Klaus Wachtler schrieb: > Dann noch eine Idee dazu: > Man könnte sich einen Zeichensatz definieren, in dem ein Zeichen die > linke Pixelspalte gesetzt hat, das zweite Zeichen die linken beiden > etc.; > dadurch könnte man den Balken feiner auflösen. Das finde ich eine gute Idee !!
MaWin schrieb: > Dessen > http://www.gb97816.homepage.t-online.de/ > Projekt KT88 macht so was, > Sourcecode konnte ich aber auf die Schnelle nicht finden, > > Hab ich aber auch schon woanders gesehen. > Man bracht halt 5 von den 8 frei definierbaren Bitmuster-zeichen. du brauchst 8. da er die balken in beide richtung will (wenn ich sein diagram richtig interpretiert hab Edit: Ich hab mal ein video gesehen, da haben welche ein text-display ion ihren PC eingebaut und da irre Effekte drauf gezeigt.
Man kann auf einem 2×16-Display mit einem geeigneten Zeichensatz auch vier Bargraphs übereinander mit jeweils bis zu 33 Abstufungen zeichnen (s. Bild). Da die horizontalen Zwischenräume zwischen den Zeichen bei den meisten Displays gerade 1 Pixel breit sind, haben die einzelnen Kästchen alle den gleichen Abstand zueinander, was ein homogenes Erscheinungsbild ergibt. Das sieht besonders gut aus, wenn man die einzelnen Balken schnell zappeln lässt, wie es bspw. bei einer Aussteuerungsanzeige der Fall ist. Der verwendete Zeichensatz belegt alle der acht frei definierbaren Zeichen des Display-Controllers. Im Bild ist zur Verdeutlichung eines dieser Spezialzeichen rot eingerahmt. Man kann natürlich wahlweise statt der vier Bargraphs nur zwei anzeigen und hat dann noch eine Zeile für Textinformationen frei. Leider können die Balken nur in eine Richtung (im Bild nach rechts) wachsen, da man sonst mit den acht Zeichen nicht auskommt. Wenn aber 17 horizontale Abstufungen ausreichen, kann man mit sieben Spezialzeichen sogar sechs Bargraphs (jeweils 2 Pixel hoch) übereinander darstellen und jeweils in beide Richtungen wachsen lassen.
Wenn die 8 frei definierbaren Zeichen nicht reichen, kann man auch das aktuell benötigte neu definieren; man braucht ja nie alle gleichzeitig :-)
Daniel Schneider schrieb: > das ist ja ne ausführliche Antwort, Danke. > > Nun das Prinzip verstehe ich schon, nur ich benutze die lib_sps Libary > und habe dort habe ich " printf("%6d", irgendeine Zahl) " befehle. Da > hatte ich jetzt versucht 0xFF oder 255 einzugeben um ein Klotz > erscheinen zu lassen. dann mal printf( "%c", 0xff ) und putchar( 0xff ) probieren > ...
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.