PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Diagramm auf Grafik display anzeigen. Wie Werte speichern?



mirco99
27.10.2008, 13:40
Ich steuere ein 128x64 touch Display an und möchte in ein Untermenu, wo mir ein Diagramm angezeigt wird
alle 15 Minuten wird einen neuen Wert einlesen. Jeder Wert soll einen Pixel bekommen und der näxhse Wert wird daneben angezeigt.

Sekundentimer programmiert

if viertel = 900 then gosub Diagrammpixel ' 900= 15min.
end if


Diagrammpixel:
pix =pix +1
pset pix, amperepix,1

if pix = 30 then
pix =0
end if
return

So kann ich alle Pixel anzeigen, aber werden nur im Display gespeichert. Wie kann ich alle 15 Minuten einen Wert speichern da dieses Menu nur nach Aufforderung angezeigt werden soll.

Nach Aufruf des Menüs, sollen die gespeicherten Werte nacheinander eingelesen und zum Display gesendet werden.

Eprom kann man vergessen, da zu viele Schreibzyklen.
Es braucht auch nicht in den eprom.

Benutze bald den Mega 168, da der jetzige Mega 8 Rand voll ist.
Hat den Vorteil, das er pingleich ist und doppelt so viel Speicher hat.

Ich bin mal gespannt auf eure Anregungen

for_ro
27.10.2008, 18:18
Wenn du meinst, dass du 128 Werte abspeichern willst und du noch 128 Byte Platz im SRAM hast, dann mach dir doch ein Array und halte die eingelesenen Werte dort. In einer Variable (einem Zeiger) hältst du dir die aktuelle Position im Array, wo du als nächstes Schreiben willst.

Gruß

Rolf

mirco99
28.10.2008, 07:32
Morgen Rolf,

dein Vorschlag hört sich gut an. Habe aber noch nie mit einem Array gearbeitet. Ich werde mal die Suche bemühen.
Wenn jemand ein gut kommentiertes Beispielprogramm zeigen könnte -wäre toll.

mirco99
28.10.2008, 08:06
So, hab was gefunden.

Messwerte Array Dimensionieren
Dim Messwerte(100) as Long
'Dieses Array hätte 100 Einzelwerte(1 bis 100) oder
Dim Messwerte(5) as Long
'mit 5 Einzelwerten


In die Stellen Werte schreiben
Messwerte(1) = 10
...
Messwerte(100) = 1234

' und wieder auslesen

print Messwerte(78)


Kann man auch variablen in die Klammern schreiben ?
messwerte(zähler) = amperepix
Eine Long Variable hat 10 Stellen 32 Bit
Was muss ich beachten. Wieviele Stellen dürfen die Werte haben bei welcher Anzahl von verschiedenen Werten?

Vitis
28.10.2008, 10:11
ne long variable wirds nicht brauchen,
da er ja nur die pixelposition speichern braucht.
da reichen bytes locker.

ergo

dim pixelpuffer(100) as byte
dim pixelzeiger as byte
dim tempbyte as byte

if viertel = 900 then gosub Diagrammpixel ' 900= 15min.
end if


Diagrammpixel:
incr pixelzeiger
if pixelzeiger>30 then pixelzeiger=1
pixelpuffer(pixelzeiger)=pixelposition
return

graph_zeigen:
for tempbyte=pixelzeiger to 100
zeichnepixel = pixelpuffer(tempbyte)
next
for tempbyte=1 to pixelzeiger
zeichnepixel = pixelpuffer(tempbyte)
next
return

mirco99
28.10.2008, 10:40
Hi Vitis,
mit deiner doppelten for next schleife komme ich noch nicht so klar.
Die Pixelposition liest den Wert der gerade gelesen wurde
in deiner For nextschleife muss dann ja noch der Pset befehl eingebaut werden?

Müssen hier die Speiherstellen nicht auf 30 geändert werden?
dim pixelpuffer(100) as byte
for tempbyte=pixelzeiger to 100

Sorry ich kapier heut wohl nicht so viel.
Ich quäl mich gerade mit ner dicken Erkältung in der Firma rum.

for_ro
28.10.2008, 17:25
Müssen hier die Speiherstellen nicht auf 30 geändert werden?
dim pixelpuffer(100) as byte
for tempbyte=pixelzeiger to 100
Die Werte müssen alle gleich sein, eben so viele, wie du Pixel darstellen willst. Bei der 30 hat sich Vitis bestimmt nur verschrieben.
Evtl. willst du da links noch eine Y-Achse auftragen mit Bezeichnungen, dann entsprechend weniger als 128.
Ich würde auch den Zeiger immer auf der Position stehen lassen, auf die als nächstes geschrieben werden soll und nicht auf der Position, die zuletzt geschrieben wurde. D.h. also, in Diagrammpixel erst speichern und dann erhöhen und überprüfen.
Dann kannst du die erste Schleife so machen, wie Vitis geschrieben hat. Die zweite Schleife darf aber nicht mehr bis Pixelzeiger gehen, sonst hast du den Wert ja doppelt ausgegeben, als ersten und als letzten. Dann hast du ganz rechts den neuesten Wert stehen. Daneben den vorletzten usw.
Nicht vergessen, wenn viertel = 900 ist, viertel wieder auf 0 bzw. 1 zu setzen.

Gruß

Rolf

Vitis
28.10.2008, 21:42
stimmt, wenns 30 sein sollen dann halt nur 30 deklarieren
beim zweiten for kannste n

decr pixelzeiger davor
und n
incr pixelzeiger dahinter bauen, könnt schöner werden :)

zeichnepixel hab ich Platzhalter für Deine Zeichenfunktion
verwendet

mirco99
29.10.2008, 07:41
Ich danke euch,
ich denke ich habe es verstanden. Werde mich am Wochenende ransetzen.
Jetzt muss ich erstmal gegen meine Erkältung kämpfen.