PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Printbefehl verkürzen



Picht
02.09.2006, 19:41
Hallo,
habe eine Bargraphanzeige deren Balken-Data ich mit Prinbin ausgebe.
nun müsste ich bei 10 Balken wohl schreiben:
Printbin Bar ; Bar ; Bar ; usw. Bar ;(Also 10 mal Bar)
Das geht auch einfacher.Aber wie?
In meinen Code-Auszug wurde für jede Balkenlänge eine Data eingerichtet.
Das frisst zu viel Speicher.



Elseif Poti < 100 Then
Restore Bar10
For Count = 1 To 13
Read Bar:
Printbin Bar ;
Next

PicNick
03.09.2006, 08:26
Naja, 10 Outputs sind auch 10 Aktionen mit 10 Werten, so oder so.
WAS genau meinst du, daß zu lange/kompliziert wäre ?

Picht
03.09.2006, 09:31
Hallo PicNick
Beim ersten "Entwurf" wurde 10 mal der o.g. Code geschrieben.
Also Ist Poti 10 dann Lese und Schreibe Bar 1
Ist Poti 20 dann lese und Schreibe Bar 2
usw.
Ich habe 10 Data hinterlegt (Bar1-Bar10).Nun wird der Speicher knapp.
Ich wollte nur 1 Data hinterlegen und dann sollte es so aussehen.
Ist Poti 10 dann Lese und Schreibe Bar1
Ist Poti 20 dann Lese Und Schreibe 2 mal Bar1
Ist Poti 30 dann Lese und Schreibe 3 mal Bar1
usw.
Es soll aus den Wert Poti 10 bis 200 die Baranzahl errechnet werden.
Also allas wird eine Bargraphanzeige bis 10 Balken.
Es ist ein Beispiel in Bascom,ich kann aber rechnen soviel ich will
klappt nicht.

Vitis
03.09.2006, 10:42
dim x as byte
dim y as byte
x=poti/10
for y=1 to x
printbin Bar1
next y

Picht
03.09.2006, 11:16
danke,
in Bascom wurde der Anfangswert ,Endwert,Wertstaffelung und Balkenanzahl berücksichtigt.
.Ich dachte auch ich muss runden.Jetzt bin ich
aber schon ein Schritt weiter.

Vitis
03.09.2006, 14:56
Das Runden ergibt sich aus der Dimensionierung der Werte
Bytes sind nur ganze Zahlen zwischen 0-255

Picht
03.09.2006, 17:03
Hallo Vitis,
die Idee ist gut .Der Speicher ist wieder frei,aber es darf der Wert
nur einmal in der Schleife ausgegeben werden.Deine Version gibt
mehrmals den Wert aus .Irgend etwas habe ich falsch gemacht.
Anbei mal den Code



Wait 1
Graphic
Wait 3
Loschen
Waitms 500 'Interrupts global zulassen
Do
Screen
Waitms 25
Datenpunkt
If Poti =< 80 Then
Portd.3 = 1
Else
Portd.3 = 0
End If

Dim X As Byte
Dim Y As Byte
X = Poti / 5
For Y = 1 To X
Call Balken
Next
Loschen
Waitms 70
Loop

Sub Graphic
Restore Graph
For Count = 1 To 14
Read Bar : Printbin Bar;
Next
End Sub

Sub Screen
Restore Scre
For Count = 1 To 18
Read Bar : Printbin Bar ;
Next
End Sub

Sub Datenpunkt
Restore Datenp
For Count = 1 To 5
Read Bar : Printbin Bar ;
Next
End Sub

Sub Balken
Restore Bar1
For Count = 1 To 4
Read Bar : Printbin Bar;
Next
End Sub

Sub Loschen
Restore Los
For Count = 1 To 3
Read Bar : Printbin Bar:
Next
End Sub

Picht
03.09.2006, 21:05
Hallo Vitis,
ich noch mal. Das Programm läuft jetzt. Habe die Datenpakete
mit einer kleinen Zeitverzögerung getrennt.Es wird über RS 232
ein Terminal angesteuert.Aber jedes Ding hat seinen Preis
Die Rechenleistung wird jetzt langsamer.Jetzt muss ich mir
was einfallen lassen, das ein Löschen nur bei Wertänderung
erfolgt und nicht in jeder Schleife

Vitis
04.09.2006, 07:37
Das die Rechenleistung runter geht ist klar,
Du hast ja ne Menge Waits verbaut. In dem Befehl
wartet der µC und macht konkret NIX ausser ner
Schleife runter zählen. Wenn er aber nebenbei
noch was Anderes machen soll währs sinnvoll die
Timer und deren Interrupts zu verwenden
für verzögerte Anzeigen.

Das der Wert dann x-mal geschrieben wird ist auch logisch,
aber genau so hast Du die Funktion ja beschrieben:


Ist Poti 10 dann Lese und Schreibe Bar1
Ist Poti 20 dann Lese Und Schreibe 2 mal Bar1
Ist Poti 30 dann Lese und Schreibe 3 mal Bar1

Was genau soll Dein Programm denn insgesamt machen ? Was solls am Ende werden?

Picht
04.09.2006, 09:47
Hallo Vitis,
Auf ein Nokia Display wird eine Balkenanzeige Realisiert.
Mein Code sendet Für jeden Balken eine Ziffernfolge über
RS 232 an ein Miniterminal, der dann das Display ansteuert.
Ich wollte einfach Speicher sparen und nicht 10x Balken
hinterlegen.Sondern bei Poti 10 schreibe 1Balken
Poti 20 schreibe 2Balken usw.Vorher war das so:Poti 10 schreibe
Balken1 Poti 20 schreibe Balken2 (10 Balken hinterlegt)
Der Vorteil der Aktion ist, das ich die RS232 Ausgabe des
Prozessors nutze und nicht viele Pins für eine Grafikausgabe brauche.

Vitis
06.09.2006, 00:37
wie sehen denn die Ziffernfolgen für die Bars aus?
Sind die immer anders, oder ists einfach nur das
gleiche Zeichen mehr oder weniger oft aneinandergereiht?

z.B.
dim x as byte
dim y as byte
x=poti/10
print
for y=1 to x
print "X";
next y

ergibt je nach Poti auf dem PC-Terminal ne unterschiedlich lange "X"-Reihe, weil durch den Semikolon hinterm Print kein CR und LF ausgelöst wird ... bzw. ASCII 10 und 13 nicht gesendet werden.