PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Graphik Display als Schreiber verwenden



bd239
10.08.2007, 09:34
Hallo vielleicht hat ja jemand eine Idee,
versuch schon laengere Zeit einen Graphen zu prog. der wie ein einfacher Schreiber funktioniert.

Also aktueller Wert immer links, die alten werte sollen nach rechts verschoben werden.

Einen Graphen der von vorne nach hinten durchlaeuft und dann vorne wieder anfaengt ist kein problem, aber irgendwie fehlt es mir an der Intelligenz eine schreiber funktion zu verwirklichen.

Vielen Dank fuer eure Hilfe
Josef

Michael
10.08.2007, 11:53
Hallo bd239,


der wie ein einfacher Schreiber funktioniert.
beim dem das Blatt weiterläuft?

Ich hab es mal mit einem Array, daß so groß wie die Anzahl der X-Punkte war, gemacht.
Dann immer den ältesten Wert verworfen und den nächstjüngeren nach hinten kopiert. Der aktuelle Wert kommt dann ganz vorne rein.

Das Umkopieren kannst du auch mit einem Zeiger realisieren.

Gruß, Michael

Edit:
Ich hab einen alten Thread dazu gefunden:
http://www.elektronik-projekt.de/thread.php?threadid=3942
da gibt es auch ein Beispielprogramm.

bd239
10.08.2007, 12:11
Hallo Michael,

vielen Dank fuer deine Antwort.

Theoretisch hab ich mir das auch so gedacht, aber an der Umsetzung hapert's bei mir gewaltig.

"Dann immer den ältesten Wert verworfen und den nächstjüngeren nach hinten kopiert. Der aktuelle Wert kommt dann ganz vorne rein.

Den aeltesten verwerfen ist kein Problem, kann ich ja einfach ueberschreiben, den naechstjuengeren nach hinten kopieren da gehen meine Probleme los.

Vielleicht kannst du mir ja das noch genauer erklaeren
Vielen Dank
Josef

Michael
10.08.2007, 12:31
Hallo bd239,

les dir mal den Link durch, den ich oben noch angehangen habe.
Dort ist alles beschrieben, inkl. Beispielprogramm und Youtube-Video.

Gruß, Michael

bd239
10.08.2007, 14:29
Hallo Michael,

ich glaub da koennte das richtige dabei sein.
Muss alles noch in Ruhe durchgehen, aber erstmal


vielen, vielen Dank du hast mir durch deine freundliche Hilfe
sicher viel Aerger erspart.

ich melde mich nochmal ob,s geklappt hat.


=D> =D> =D>

Hessibaby
10.08.2007, 14:31
Die Hardwarelösung heißt Eimerkettenspeicher, d.h. bei jedem Clockpuls wird der Inhalt eines Registers einen Platz nach links verschoben.
Theoretisch gesehen brauchst Du also ein Byte- oder Wordweise organisiertes Schieberegister das Du intervallmäßig verschiebst, den Inhalt ausliest und visualisierst, verschiebst usw.
Gruß

bd239
10.08.2007, 17:27
Hallo Michael,

wahrscheinlich bin ich jetzt schon ganz bloed, aber ich kann deinen code
nicht runter laden.

Ich mein den ziemlich zum Schluss, mit dem Video.


Vielleicht kannst du nochmal schauen was los ist.

Danke Josef

Michael
10.08.2007, 18:51
Hallo bd239,

Vielleicht kannst du nochmal schauen was los ist.

stimmt, bei mir gab es auch eine fehlerhafte Datei.
Ich hab sie nochmal hochgeladen.
http://www.elektronik-projekt.de/thread.php?postid=34648

Gruß, Michael

bd239
11.08.2007, 00:39
Hallo Michael,

super kann was damit anfangen.

Obwohl ich das Program nicht ganz verstehe hab ich es so anpassen koennen dass es fuer mich verwendbar ist.

Was ich zum Beispiel nicht versteh ist diese Zuweisung

Temp3 = Werte(temp2)

Ich dachte das Array hat Nummern von z.B 1 - 100

Was fuer einen Wert lese ich durch diese Zuweisung aus? Auf was fuer eine Nummer greife ich da zu?

Hast mir sehr geholfen

nochmalsDanke
Josef

Michael
11.08.2007, 10:04
Hallo bd239,

zugegeben, Temp2 und Temp3 sind keine aussagekräftigen Variablen
Temp3 = Werte(temp2) ist aber aus dem Zusammenhang gerissen.
In der Zeile davor wird der aktuelle Schleifenzähler mit 1 addiert und in Temp2 gespeichert. Das dient nun als Arrayzeiger, während in Temp3 der aktuelle (Pixel-Y-)Wert steht.
Weiter unten wird dann die (alte) Linie mit
Line(i , Temp) -(temp2 , Temp3) , 0 gelöscht und mit
Line(temp1 , Temp) -(i , Temp3) , 1
neu geschrieben.


Ich dachte das Array hat Nummern von z.B 1 - 100
naja, in dem Fall werden nur die Werte von 100-199 genutzt, das ist dann gleich der X-Wert.


Was fuer einen Wert lese ich durch diese Zuweisung aus?

Der angezeigte Wert ist Y.
Einmal pro Durchlauf wird er verändert:
Y = Y + 1
If Y > 35 Then
Y = 15
End If
Da könnte dann auch die Ausleseroutine für den AD-Wandler stehen. Was halt angezeigt werden soll.


Gruß, Michael

Vitis
11.08.2007, 19:02
Also, ist doch ganz einfach. man nehme einen Ringspeicher mit einem Pointer.
z.B.

dim werte(100) as byte für eben 100 werte.
dann nehme man einen Pointer oder halt Zeiger, der sagt wo der aktuell
gemessene Wert hin kommen soll

also

dim pointer as byte.
Nun programmiere man eine routine, die bei jedem Aufruf den pointer um 1 erhöht und den wert abspeichert. ist das Ende des Daenfeldes erreichst soll er wieder an den Anfang springen. also

incr pointer
if pointer>100 then pointer = 1
werte(pointer) = messwert

nun sollen diese daten klaro ja auch ausgegeben werden in chronologischer reihenfolge

also

for byte_xy= pointer+1 to 100
anzeige=werte(byte_xy)
next
dann:
for byte_xy = 1 to pointer
anzeige=werte(byte_xy)
next

so in ungefähr

Picht
12.08.2007, 21:50
Hallo Vitis,
Deine Eingabe kann ich folgen.
Aber die Ausgabe kann ich nicht Nachvollziehen.

Der Pointer zählt von 1 bis 100.

müsste jetzt nicht
Anzeige = Wert(Pointer) stehen?
Oder sollen mit jeden Pointer mehrere Werte ausgegeben
werden.
krieg das nicht zum laufen.

Wigbert

Vitis
12.08.2007, 23:39
nö, der Wert direkt nach dem aktuellen zeiger ist ja automatisch der chronologisch älteste wert. von dem ausgehend dann halt einfach
bis zum ende hin die werte auslesen und dann vom anfang an bis zum aktuell letzten wert.

Picht
13.08.2007, 09:00
Hallo Vitis

jetzt beginne ich zu begreifen.
Du liest die Werte > Pointer <100 aus
und danach >1<= Pointer aus.
Ich dachte wenn ich ab Pointer+1 bis 100 hochzähle
findet die Ausgabe seinen Weg.


Wigbert

Vitis
13.08.2007, 23:23
vorteil der methode ist halt, dass man nicht bei jedem neuen wert die ganze matrize shiften muss, das spart rechenzeit.