PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bargraph Anzeige mit selbstdefinierten Zeichen



Pöler
27.06.2005, 08:23
Hallo zusammen,

ich möchte gerne im Rahmen meines Projekts eine Füllstandsanzeige als Bargraph realisieren. Bisher habe ich das so gemacht:

Bar:
For I = 1 to Z ' Z <= 16 Max. Anzeigewert
Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' Zeichen „█“
Locate 2 , Z 'Position des Zeichens 2. Zeile
Lcd Chr(0)
Z = Z + 1
Next
Return

Das Ergebnis ist leider unbefriedigend, da das „Aufbauen“ der Bargraph Anzeige deutlich wahrnehmbar ist und als sehr unruhig empfunden wird. Ich suche nun nach einer Möglichkeit, den auszugebenen String vorher zusammenzubauen. Etwa so:

For I = 1 to Z ' Z <= 16 Max. Anzeigewert
Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' Zeichen „█“
L = L + Lcd Chr(0) ' Länge String 1 – 16 Zeichen
Lowerline
Lcd L
Next

Die Syntax um den String zusammenzubauen ist natürlich völlig daneben. Genau das ist mein Problem. Kann mir jemand sagen, wie man das in Bascom realisiert?

Anschließend noch eine kurze Frage zum Umgang mit der ISP Schnittstelle am Sisy Mega 8 Board.
Nach meiner Erfahrung laufen Programme auf dem Board entweder überhaupt nicht oder stürzen nach kurzer Zeit ab, wenn das Board per Parallelschnittstelle mit dem PC nach der Programmierung verbunden bleibt. Ist das Phänomen auf einen unzureichenden internen Pullup Widerstand an der Reset Leitung zurückzuführen?

Danke für Eure Hilfe

pebisoft
27.06.2005, 08:53
nimmst dir die beschreibung vom display und schreibst dir in asm (kannste in bascom einbinden) eine routine, was die 7 freien buchstaben belegt.
aber die bascom-routine die du anwendest, ist nicht wesentlich anders als dann dein asm-programm.
du kannst aber auch ein 4zeiliges oder mehrzeiliges display zulegen dieses hochkannt stellen und damit nur die balken z.b. darstellen.
mfg pebisoft

PicNick
27.06.2005, 08:59
Am besten sieht es aus, wenn du nicht den ganzen BAR frisch zeichnest, sondern nur die differenz zu vorher. Das heißt, die gehst mit "locate" an das erste zu ÄNDERNDE Zeichen und pinselst nur das raus (blank oder 31), was zu ändern ist.
Beispiel:
1 der wert ist eins größer als vorher--> du machst einen Block hinten drauf
2 der wert ist ein kleiner --> du überschreibst den letzten block mit 0,0,0,
3 der wert ist gleich--> du machst überhaupt nix

chr-mt
27.06.2005, 09:59
Hi,
das Zeichen mußt du nicht selbst bauen, das gibt's im Zeichensatz. (255 ?)
Du kannst deine "Auflösung" noch erhöhen, in dem du nur halbe Blöcke machst, oder nur Linien.
Das Problem dabei ist die Lücke zwischen den einzelnen "Hardware-Blöcken" auf dem Display. Das sieht halt nicht so schön aus.
Vielleicht kann man es aber so machen, daß man den Block in 2 Blöcke unterteilt, zwischen denen eine Lücke ist.
Dann hätte man 32 Stufen zur Verfügung.
Muß ich mal ausprobieren. ;)
Also so:
Deflcdchar 0 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24
Deflcdchar 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3

Gruß
Christopher

27.06.2005, 12:48
Hallo zusammen,

erstmal vielen Dank für die Antworten. Ich werde erstmal PicNicks Vorschlag ausprobieren, also beim ersten Mal die Anzeige Zeichenweise aufbauen und dann nur noch die Änderungen einblenden.
Christofer, das ASCII Zeichen bedeutet "", also nichts. Mit diesem Zeichen kann man bei verschiedenen Betriebssystemen unsichtbare User anlegen. Ich schaue mir die ASCII Tabelle aber noch einmal an.

Kann mir vielleicht doch jemand einen Tip geben, wie aus einem Zeichen ein String zusammengebaut werden kann?

Hat jemand eine Erklärung zu meiner 2. Frage bezüglich des Verhaltens der ISP Schnittstelle?

Danke und Gruß

Horst

PicNick
27.06.2005, 12:59
ISP Kommt bei mir auch vor. Wenn ich aus Stabilität wert lege, steck ich ab. Ich glaub', die Software resetted hin und wieder einfach so.

string & zeichen

DIM EinString as string *24
DIM Zeichen(24) as byte at Einstring overlay

Es ist dann jedesmal der gleiche Speicher, aber verschieden anzuquatschen

willst du z.B EIN Zeichen als String haben

Zeichen(1) = "X"
Zeichen(2) = 0

Print Einstring

logo ?

27.06.2005, 15:31
Hallo Robert,
danke für Deine Antwort bez. ISP. Was die Stringverarbeitung angeht, meine ich etwas anderes. Ich habe ein Zeichen, z.B.:
Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' Zeichen „¦“ .
Daraus möchte ich einen in der Länge variablen String zusammenbauen z.B. "¦¦¦¦¦¦¦¦", den ich in einem Zuge auf dem LCD ausgeben kann.

Gruß

Horst

PicNick
27.06.2005, 15:42
Da ich kein's habe, bin ich mit LCD schwach.
Vielleicht kann sich "chr-mt" nochmals begeistern, der scheint sich besser auszukennen
tut leid