PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Diagrammproblem LCD Werte richtig umrechnen und Dimensionier



mirco99
01.11.2008, 17:57
Habe ein problem mit meinem Array und der LCD Anzeige.

Ich muss meinen Stromwert zB. 2,455 A in eine Pixelposition umrechnen.
Kann jemand mal über die Dimensionierung der Variablen schauen und die Machbarkeit meiner Berechnung bei Bascom? Mein Taschenrechner machts richtig.
Der Stromwert muss mal 7,5 gerechnet werden um in meinem Diagramm an der richtigen Stelle zu sein. Achja o Ampere ist bei mir bei der Pixelzeile 52. Den Wert habe ich dann mit mal minus 1 wieder positiv gedreht. da mein diagramm ja nicht auf dem kopf stehen soll. :-)
Das Diagramm Fängt bei Pixel 8 an. Deshalb schreibe ich auch erst bei Zeiger 8 in das Array.
Wenn noch nichts in das Array geschrieben worden ist, lese ich dann Nullen aus?

Die Pixel werden leider am oberen Rand des Displays angezeigt und auch nur jedes 2. Das Display oder der Atmega 168 stürzt ab.





Pixelzeiger = 8 'beim programmstart vor do
Dim Pixelpuffer(127) As Byte
Dim Pixelzeiger As Byte
Dim Pixelschreibzeiger As Byte
Dim Pixel As Single
Dim Pixel1 As byte

'Wird jede sekunde abgefragt
'----------------------------------Diagramm Pixelwerte speichern------------
Pixelzeiger = Pixelzeiger + 1
If Pixelzeiger => 127 Then
Pixelzeiger = 8
end if
Pixel = Strom * 7.5
Pixel = 52 - Pixel 'pixelposition 0 A
Pixel = Pixel1 ' single in byte umwandeln

Pixelpuffer(pixelzeiger) = Pixel1

End If

'auslesen auf Display

For Pixelschreibzeiger = 8 To 127
Pset Pixelschreibzeiger , Pixelpuffer(pixelschreibzeiger) , 1
Next

mirco99
02.11.2008, 08:32
hat keiner ne idee ?

mirco99
02.11.2008, 09:57
achtung habe selber noch fehler gefunden.
Programm stürzt jetzt auch nicht mehr ab. Fehler der gleiche.

Habe die Programmteile editiert!

for_ro
02.11.2008, 10:01
Ich war gerade dabei, dir diese Fehler auch zu sagen.
Übriggeblieben ist der in der Zeile
Pixel = Pixel1 ' single in byte umwandeln
Pixelpuffer(pixelzeiger) = Pixel1 'Müsste das evtl. anders herum sein???????

Pixel1 hast du nirgendwo benutzt oder gesetzt, wird also immer 0 sein.
Dein Programm ist ja sicherlich umfangreicher als nur der Ausschnitt hier.
Denn so für sich wird das sicherlich nicht gehen.

Gruß

Rolf

PicNick
02.11.2008, 10:12
Du mischt da ein paar datentypen, das mag der Bascom nicht so sehr


DIM pixelstring AS STRING * 4
DIM pixelzahl AS BYTE

Pixelstring = Fusing(pixel1 , "#.") ' fusing ergibt einen string
Pixelzahl = VAL(Pixelstring)
Pixelpuffer(pixelzeiger) = Pixelzahl

PicNick
02.11.2008, 10:16
ah ja.

kann das verkehrt sein ?

Pixel = Pixel1 ' single in byte umwandeln
soll wohl sein
Pixel1 = Pixel

mirco99
02.11.2008, 10:16
Hi for_ro,
habe mir gerade das Array in Text ausgeben lassen, kommt immer eine null raus. Da hast du recht. Was meinst du mit pixel 1 habe ich niergendwo benutzt oder gesetzt?
Pixel 1 ist nur für die byteumwandlung für das array un dort steht doch pixel1 drin!?
Pixelpuffer(pixelzeiger) = Pixel1

Liegt hier mein denkfehler? es müsste doch so richtig rum geschrieben sein. Ich möchte den wert pixel1 in das array schreiben.

Ich danke dir für deine mühe.

Ja mein Programm ist mittlerweile 13kb groß, da sieht man leicht den Wald vor lauter Bäumen nicht. :-)

mirco99
02.11.2008, 10:23
DDDDAAAANNNKKKEE
Pixel1 = Pixel war der Fehler.

Ich war gestern bestimmt 13 Stunden am programmieren.
Zuerst wollte ich mit fusing eine ganzzahl bekommen. Das hat mich 4 Stunden gekostet.

Ich bin happy......endlich, wenns nicht weiter geht, dann verliehrt man die Lust

Ich danke euch.

for_ro
02.11.2008, 10:26
Sorry, mein Kommentar war in die falsche Zeile gerutscht.
Ich meinte: Pixel = Pixel1 andersherum, du willst ja die single in eine Byte quetschen. Ob das so geht musst du mal sehen. Single benutzen bringt dir immer eine Menge Zusatzcode in dein Programm. Und du brauchst das hier nicht wirklich. Du könntest auch mit 15 multiplizieren und dann shiften (durch 2 teilen).

Gruß

Rolf

mirco99
02.11.2008, 10:33
Du meinst damit ich keine kommastellen benutzen brauch?
Aber mein Amperewert hat kommerstellen. 0,332 A z.B

Funktioniert das trotzdem?
Wie sollte ich dan Pixel dimensionieren?

for_ro
02.11.2008, 11:30
Na ja, die Anzeige in Pixeln ist mal definitiv ganzzahlig. Der ADC Wert auch. Wenn du also sonst keine Notwendigkeit hast mit Single zu arbeiten, würde ich versuchen es zu vermeiden.
Bei den Pixeln habe ich dir schon gesagt wie.
Wenn du 0,332 A als Text anzeigen lassen möchtest, dann kannst du z.B. auch "0," ausgeben und danach die Zahl 332 und dann " A". Sieht genauso aus. Hängt aber von deinem Wertebereich ab. Wenn es nur bis 0,999 A geht, würde es so funktionieren. Bis 9,999 A geht könntest du noch die Tausender abtrenne und dahinter das Komma setzen.
Wofür brauchst du denn sonst noch die Single?

Gruß

Rolf

mirco99
02.11.2008, 11:40
Tschuldigung war offline. meine Funkverbindung im Hobbykeller bricht manchmal ab und mein alter Rechner möchte dann auch nicht mehr.

also die single habe ich nur für die berechnung der Pixelausgabe.
werde mich mit deinem vorschlag mal auseinandersetzen.
zur zeit benutze ich ja nicht den ADC Wert, sondern den errechneten Stromwert.

Die optimierung des Programmes wird nach hinten verschoben bis alles funktioniert.

Jetzt kämpfe ich noch mit dem Datenerhalt und Pinstabilitäten wenn ich durch das Touchmenue gehe und ein paar anderen dingen.

Ist mein erstes großes Projekt.
Im Sommer habe ich noch kein eigenes Programm auf die Beine bekommen.
Achja die Stromstärke geht bis 6 ampere, das bringen meine selbstgebauten Solarzellen. Mit meine Schaltung kann ich grafisch die Batterieanzeige sehen, wann das Gerät von Batteriestrom (Inverter) auf Netzstrom wechselt. Wieviel Amperestunden Die Solarzellen gebracht haben und Wieviel Strom gerade Fliesst. Das Diagramm soll mir den Tagesverlauf in Ampere von den Solarzellen anzeigen.

Wenn ich fertig bin zeige ich mal ein Video oder fotos.