Forum: Mikrocontroller und Digitale Elektronik AVR Ladekurvendisplay


von Michael K. (mmike)


Lesenswert?

Hallo Leute,

ich hab mir vor kurzem nen Orbit Pocketloader (Ladegerät für den 
Modellbau) besorgt und das Ding hat eine SIO (Seriell - In - Out, also 
RS232) Schnittstelle. Am Oszi kamen brav 5V (TTL) raus und damit bin ich 
dann direkt auf meinen AVR. Daten kommen und ich kann sie auswerten und 
lesen. Jetzt würde ich gerne die die Ladekurve graphisch auf einem 
128x64px Display darstellen. Display ist auch vorhanden und läuft. Jetzt 
zu meinem "Problem".

Die Darstellung der Ladekurve soll über die Zeitachse dynamisch 
verlaufen (Skalierung: von 30min bis 2h). Jede Sekunde wird ein 
Datensatz vom Ladegerät ausgegeben mit Zeit, Spannung und Ladestrom. Die 
Daten werden natürlich im Display permanent angezeigt.
Für die Ladekurve stehen 120 Pixel in der Breite zur Verfügung. Also:

120px -> 30min -> Pixel jede 15s
120px -> 60min -> Pixel jede 30s
120px -> 90min -> Pixel jede 45s
120px -> 120min -> Pixel jede 60s

soweit so gut. Jetzt ist nur das Problem, wenn ich die Zeitachse 
umschalte von beispielsweise 30min auf 60min und das Display neu 
aufgebaut wird, dann müssen die bereits gemessenen Werte (Spannung und 
Strom) ja noch vorhanden sein. Die kleinste Zeitbasis ist ja 15s. Also 
lege ich alle 15 Sekunden einen Datensatz im Speicher ab. Und genau hier 
ist die Frage welcher Speicher.

2h (max Logzeit) = 120min = 7200s

7200s / 15s = 480 Datensätze

Speicherbedarf: 480 * 4 bytes = 1920 bytes.

Das ist leider schon zu viel für meinen ATMega32. Jetzt war der Ansatz 
entweder die Daten in einem EEProm (AT24C128 mit 128k) abzulegen, aber 
der macht "nur" 100.000 Schreibzyklen, dann ist er hin. Eine Alternative 
wäre der ATMega644 mit 4k SRAM. Wenn ich dann sparsam mit Variablen 
umgehe sollte es eigentlich reichen.

Gibts sonst noch "schicke" Alternativen, Ideen oder Anregungen ?

Grüße
Michael

PS: Externer SRAM wäre auch noch ne Variante, aber schon ganz schön 
"heftig" von der Software - Seite her ....

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Du brauchst ja nicht alle 480 Datensätze zu speichern, 120 genügen dir 
ja.
Und wozu brauchst du 4 Bytes pro Datensatz?

von D. W. (dave) Benutzerseite


Lesenswert?

Wieviel Bit bekommst du von deinem Lader?

Ich glaube auch, dass 16Bit zu viel sind. Wenn du jeweils 8Bit nehmen 
würdest, wärs ja nurnoch die Hälfte vom Speicher.

von Simon K. (simon) Benutzerseite


Lesenswert?

> Jede Sekunde wird ein Datensatz vom Ladegerät ausgegeben mit Zeit,
> Spannung und Ladestrom.

Vermutlich bekommt er 2 byte Zeitstempel, und jeweils 8 Bit Spannung und 
Strom?

16 Bit Zeitstempel wären knapp 18h Ladezeit.

PS: Den Zeitstempel kannst du doch auch weglassen, wenn du weißt, dass 
du immer alle 15 Sekunden einen Messwert nimmst.

von Michael K. (mmike)


Lesenswert?

@Ralf: Speicher muss ich leider schon, denn wenn ich die Zeitachse neu 
skaliere und das Display lösche um neu zu zeichnen, dann muss ich die 
Daten ja noch verfügbar haben um sie neu zeichnen zu können.
120 .... ja stimmt ! Mehr wird eh nie angezeit ! Cool ...danke ! Muss 
halt dann im Moment der Skalierung immer den 2. Wert "entsorgen" und das 
Array neu sortieren.


@D. W.:
Der Lader gibt ASCII aus und zwar Spannung in mV und Strom in mA
Ein Datensatz sieht folgendermassen aus:

#N00125,12455,+2500

#: Beginn der Übertragung
N: Ladeprogramm (in diesem Fall Normalladen)
00125: Zeit - 2min 5sec
12455: Spannung [mV] also 12,455V
+2500: Ladestrom [mA] also laden (+) mit 2,5A

Spannung und Strom werden als uint16 gespeichert. 8 bit sind mir da eher 
zu wenig. Zudem müsste ich intern die Werte noch skalieren.

Spannung geht maximal bis 30V, also könnte ich bei der uint16 ein Bit 
einsparen, wenn ich bis 32768 speichere oder wenn ich die Genauigkeit 
nur auf 10mV setzte bis 3276 (12 bit, 4096) dann könnte ich 4 Bit 
einsparen. Selbiges beim Strom. Aber dann wird wieder umständlicher beim 
speichern der Daten .... so nen schönes Array ist halt simple zu handeln 
...

Danke für Eure Beiträge,

Michael

von Michael K. (mmike)


Lesenswert?

@Simon K.: Zeit wird nicht gespeichert !

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael K. wrote:
> @Simon K.: Zeit wird nicht gespeichert !

Ich hab jetzt gedacht, dass die 4 Bytes aus dem Ladegerät kommen. Kann 
ich ja nicht ahnen, dass es gar nicht so ist.

von Michael K. (mmike)


Lesenswert?

@ Simon K.: Stimmt das Protokoll hätte ich gleich im "Intertialbeitrag" 
beschreiben sollen.... sorry

von Stefan S. (energizer)


Lesenswert?

Ich würde in einem festen Byte-Array (sollte reichen, mehr brauchst du 
für die y-Achse nicht) das 128 Bytes Größ ist die Werte nacheinander 
speichern. Du fängst z.B. mit 30 s / Pixel an, und merkst Dir nur die 
"Pixelrate". Wenn Dein Array voll ist (beim ersten mal also nach 128 * 
30 s = 64 min) schaltest du um auf 60s / Pixel und "stauchst" das Array 
zusammen, indem du entweder jeden 2. Wert löschst, oder jeweils 
Mittelwert von 2 Werten nimmst:
[0] = AVG([0]/[1])
[1] = AVG([2]/[3])
...
Ab nun schreibst du nur noch alle 60 s einen Messwert, beginnend bei der 
Arraymitte. Während diesen 60 s kannst du einen Mittelwert aus den in 
dieser Zeit eingehenden Messwerten bilden. Ist das Display wieder voll 
(nach weiteren 64 min, das Display zeigt nun 128 min über die gesamte 
Breite), geht das Spiel von vorne los: Array stauchen, Pixelrate auf 240 
s / Pixel.

Gruß
Stefan

von Oberlehrer (Gast)


Lesenswert?

> "Intertialbeitrag"

LOLz

Wenn dann "Initialbeitrag".

Statt mit irgendwelchem Zeug rumzuspielen, solltest Du noch mal den 
Deutschkurs belegen.

von Hannes (Gast)


Lesenswert?

>Speicherbedarf: 480 * 4 bytes = 1920 bytes.

>Das ist leider schon zu viel für meinen ATMega32.

warum?

von Michael K. (mmike)


Lesenswert?

@Stefan: Du hast wahrscheinlich Recht mit den 8 Bit für die y - Achse da 
die Displayauflösung sowieso nur max. 64px beträgt und hier sowieso 
skaliert werden muss. Somit ist es wahrscheinlich sinnvoller "vor" der 
Speicherung zu skalieren um SRAM zu sparen als "hinterher" bei der 
Anzeige. Die Organisation des Arrays hab ich mir genauso gedacht! Nur 
dass ich anfangs alle 15 Sekunden einen Messwert speicher (30min 
Zeitskalierung).

@Oberlehrer: Vielen Dank für Deinen wertvollen Beitrag. Schreiben wollte 
ich "Inertialbeitrag", aber so Korinthenkacker wie Du können wohl nur 
meckern, haben aber selbst nichts auf dem Kasten ...

@Hannes: Im Endeffekt reichts zum reinen speichern der Daten wohl schon, 
aber die Displayfunktionen brauchen ja auch noch ein wenig SRAM ... 
zudem soll noch nen Servotester, Empfängerausgangspulsmessung, 
Strommessung, opt. Drehzahlmesser,  schönes Menü, 4 Taster ... und und 
und in das Ding rein ...

Danke an alle bis auf Oberlehrer !

Grüße,

Michael

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Wie wäre es damit ?

http://www.logview.info/cms/d_orbit-pocketlader.phtml

Gruß Sascha

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael K. wrote:
> @Oberlehrer: Vielen Dank für Deinen wertvollen Beitrag. Schreiben wollte
> ich "Inertialbeitrag", aber so Korinthenkacker wie Du können wohl nur
> meckern, haben aber selbst nichts auf dem Kasten ...

lateinisch iners „untätig, träge“

von Michael K. (mmike)


Lesenswert?

@Sascha: Das Tool kenn ich schon ! Ist wirklich klasse fürs Logging zu 
Hause, aber am Flugfeld brauchts was kleines Portables.

@Simon K.: okok. Hatte nie Latein. Ist keine Entschuldigung, aber ich 
denke Ihr wisst, was gemeint war. Ich lese lieber Datenblätter als Duden 
und Lateinbücher ....

Grüße,
Michael

von Oberlehrer (Gast)


Lesenswert?

> @Oberlehrer: Vielen Dank für Deinen wertvollen Beitrag. Schreiben wollte
> ich "Inertialbeitrag", aber so Korinthenkacker wie Du können wohl nur
> meckern, haben aber selbst nichts auf dem Kasten ...

Inertialbeitrag wär auch falsch gewesen :-)

von Oberlehrer (Gast)


Lesenswert?

P.S.:

@Oberlehrer: Vielen Dank für Deinen wertvollen Beitrag. Schreiben wollte
ich "Inertialbeitrag", aber so Korinthenkacker wie Du können wohl nur
meckern, haben aber selbst nichts auf dem Kasten ...

Für das Logging von Zellenspannungen hab ich mir mal einen Logger
mit einem MSP430F2012 + 24C64 gebaut.
Grafische Auswertung geht unter anderem mit einem Palm.

Das mit Deutschkurs würde ich trotzdem aufrecht erhalten.

von Michael K. (Gast)


Lesenswert?

> Für das Logging von Zellenspannungen hab ich mir mal einen Logger
> mit einem MSP430F2012 + 24C64 gebaut.
> Grafische Auswertung geht unter anderem mit einem Palm.

Dann hast Du ja richtig viel zu meinem Beitrag beigetragen !

> Das mit Deutschkurs würde ich trotzdem aufrecht erhalten.

Ist schon recht. Mein Deutsch hat mich bis jetzt durchs Abi und das 
Studium gebracht. Also von daher bin ich gut versorgt. Warum suchst Du 
Dir nicht ein Germanistenforum, wo Du sicherlich besser aufgehoben bist 
! Und immer anonym schreiben ist feig.

Grüße,
Michael

von Oberlehrer (Gast)


Lesenswert?

> Ist schon recht. Mein Deutsch hat mich bis jetzt durchs Abi und das
> Studium gebracht. Also von daher bin ich gut versorgt. Warum suchst Du
> Dir nicht ein Germanistenforum, wo Du sicherlich besser aufgehoben bist
> ! Und immer anonym schreiben ist feig.

Naja, fürs Germanistenforum tauge ich als Ing nicht.
Der unbekümmerte Umgang mit Lehnworten, so wie bei Dir,
löst bei mir dann trotzdem schon mal Heiterkeit aus.

Wieso brauchst Du eigentlich Hilfe?
Du kannst Rechnen, siehe Originalpost, kannst Lesen, warum fragst Du
dann hier nach Kleinigkeiten? :-)

EEPROMs gehen so schnell nicht kaputt und ob der EEPROM nun 1 Euro
oder wegen besonderer Größe nun 3 Euro kostet, ist für ein 
Einzelexemplar
nicht besonders relevant.

In dem Sinne,
Gutes Gelingen...

von Michael K. (mmike)


Lesenswert?

> Naja, fürs Germanistenforum tauge ich als Ing nicht.
> Der unbekümmerte Umgang mit Lehnworten, so wie bei Dir,
> löst bei mir dann trotzdem schon mal Heiterkeit aus.

Ah ein Kollege ;-). Momentan schreib ich grad an meiner Diss über die
Flugführung eines unbemannten Hubschraubers. Da die Kern - Avionik aus
der IMU (Inertial measurement unit) besteht war ich hier vllt. ein wenig
vorbelastet. Ich entschuldige mich hiermit nochmals in aller Form für
diesen Ausrutscher!

> Wieso brauchst Du eigentlich Hilfe?
> Du kannst Rechnen, siehe Originalpost, kannst Lesen, warum fragst Du
> dann hier nach Kleinigkeiten? :-)

Nun ja, immer alleine im Keller basteln und programmieren führt manchmal
eben in eine gedanklichen Sackgasse. Mit dem Thread, wollte ich einfach
mal anderen Meinungen zu dem Thema zu hören, die neue Wege und
Möglichkeiten aufzeigen bzw. neue Denkanstösse liefern.

> EEPROMs gehen so schnell nicht kaputt und ob der EEPROM nun 1 Euro
> oder wegen besonderer Größe nun 3 Euro kostet, ist für ein
> Einzelexemplar
> nicht besonders relevant.

Da geb ich Dir recht.

>
> In dem Sinne,
> Gutes Gelingen...

Besten Dank !

Grüße,
Michael

von Oberlehrer (Gast)


Lesenswert?

> Da die Kern - Avionik aus der IMU (Inertial measurement unit) besteht
Dann kann das natürlich schon mal passieren. :-)

> Nun ja, immer alleine im Keller basteln und programmieren führt manchmal
> eben in eine gedanklichen Sackgasse.
Das angenehme wenn man alleine werkelt ist, das da keiner drängelt.
Man hat also alle Zeit der Welt um die sich die Varianten durchs
Gehirn gehen zu lassen.

Was mir noch aufgefallen ist:
> EEProm (AT24C128 mit 128k)
Der hat 16 KByte.

Wie man Verläufe effizient wegspeichert, kann man sich sehr gut
beim MRTG-Paket angucken.

von Michael K. (mmike)


Lesenswert?

>> Nun ja, immer alleine im Keller basteln und programmieren führt manchmal
>> eben in eine gedanklichen Sackgasse.
> Das angenehme wenn man alleine werkelt ist, das da keiner drängelt.
> Man hat also alle Zeit der Welt um die sich die Varianten durchs
> Gehirn gehen zu lassen.

Das stimmt.

> Was mir noch aufgefallen ist:
>> EEProm (AT24C128 mit 128k)
> Der hat 16 KByte.

stimmt auch, oder eben 128kBit

>
> Wie man Verläufe effizient wegspeichert, kann man sich sehr gut
> beim MRTG-Paket angucken.

Das kannte ich noch nicht. Vielen Dank. Hab grad mal die sourcen gezogen 
und schau's mir mal an !

Besten Dank !

Grüße,
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.