Forum: Mikrocontroller und Digitale Elektronik Messdaten in Atmega Speichern


von Bernd (Gast)


Lesenswert?

Hallo,
Ich möchte einen Datenlogger basteln, der mir drei Unabhänige 
Spannungsverläufe Aufzeichnet.
Die Messreihen sollten jeweils 2-3 Minuten Dauern, mit 10Hz sollen die 
Spannungswerte gespeichert werden.

Hat irgendjemand ne Ahnung wie ich sowas mache (Ich arbeite mit Bascom) 
und ob der Speicherplatz von 8kb dafür reicht? (Zum aufzeichnen der 
Daten)


Gruss

Alex

von Schlumpf (Gast)


Lesenswert?

10 Messungen / Sekunde * 180 Sekunden = 1800 Messungen

1800 Messungen / Kanal * 3 Kanäle = 5400 Messungen

und wenn 8kb Kilobyte bedeuten soll, dann passt das rein, wenn du pro 
Messergebnis maximal 1,4 Byte benötigst.

von Basti (Gast)


Lesenswert?

mit dem speicher kannst du doch ganz einfach rechnen:

10Hz also 10 Daten der größe x in einer sekunde

-> 600 daten in der minute

-> 1200 bzw 1800 in 2 bis 3 minuten

das ganze jetzt mal 3 wegen drei spannungsverläufen also 3600 bzw 5400

jetzt kommts noch an wie groß deine daten sind 8bit 0der 16 bit oder 
oder oder

von johnny.m (Gast)


Lesenswert?

In welchem Zahlenformat sollen die Werte denn gespeichert werden? Davon 
hängt es doch hauptsächlich ab. Und was für ein "ATMega" soll es sein? 8 
KB RAM haben nur einige der "dicken Dinger" (Mega640, 128x, 256x)...

Wenn Du z.B. 10 mal pro Sekunde z.B. drei 16-Bit-Werte speichern willst, 
und das 3 Minuten lang, dann brauchst Du 2*3*10*3*60 Bytes Speicher 
dafür. Das sind 10800 Bytes. Bei 8-Bit-Werten genügt die Hälfte, also 
5400 Bytes...

von Azrael (Gast)


Lesenswert?

30 Byte pro 1 sekunden => 1800 pro minute => 5400 für 3Minuten
8000 hast du => reicht alle mal für deine messung
insgesamt ca 4,5 minuten aufzeichnungsdauer

mfg Azrael

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

>(Ich arbeite mit Bascom)
Ist keine Entschuldigung, nicht rechnen zu können.

8KB sind 8192 Bytes

Eine Messfrequenz von 10Hz sind also 600 Messwertewerte pro Minute.
Bei drei Signalen sind das also pro Minute 1800 Messwerte.
Bei einer Auflösung von acht Bit sind das 1800 Bytes pro Minute.
Ergo:
8KB reichen für etwa 4,5 Minuten.

Kann aber auch sein, dass ich mich irgendwo verrechnet habe.

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Goil... Fünf Antworten in 4 Minuten...

von Frank N. (betafrank)


Lesenswert?

Wahrscheinlich willst Du dann doch etwas länger aufzeichnen... 
Unterstützt Bascom nicht auch MMC/SD-Karten relativ einfach?

von Bernd (Gast)


Lesenswert?

Hallo,
Naja, wie man es ausrechnet hättte ich mir ja denken können, trotzdem 
lieben Dank.
An SD Karten hatte ich auch schon gedacht..
Mit dem Speicherplatz sollte kein Problem sein.

Ich weiß allerdings nicht wie ich auf den Internen RAM zugreifen soll, 
und wie ich die Werte da Speichern kann? Und wie lese ich sie Wieder 
aus?

Noch eine Frage:
Wenn ich die Daten mit 8 Bit Speicher, wie viele Zeichen kann ich dann 
Speichern? Vier Nachkomma Stellen?

Gruss

alex

von johnny.m (Gast)


Lesenswert?

> Ich weiß allerdings nicht wie ich auf den Internen RAM zugreifen soll,
> und wie ich die Werte da Speichern kann? Und wie lese ich sie Wieder
> aus?
Das sollte in der Dokumentation Deines Compilers stehen. Die musst Du 
Dir schon durchlesen.

> Wenn ich die Daten mit 8 Bit Speicher, wie viele Zeichen kann ich dann
> Speichern? Vier Nachkomma Stellen?
Und Grundlagen was Zahlendarstellungen angeht musst Du Dir auch noch 
aneignen. Vorher brauchst Du mit der Programmiererei gar nicht 
anzufangen.

Ist nicht bös gemeint, aber Du erfüllst praktisch alle 
Bascom-Programmierer-Klischees...

von Dirk (Gast)


Lesenswert?

Hi,

du koenntest auch ein 16Mbit Flashbaustein (SO8) nehmen kostet EK für 
Gewerbe knapp 1,40 Euro pro Stk. www.schukat.de

Gruß,
Dirk

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

>du koenntest auch ein 16Mbit Flashbaustein (SO8) nehmen kostet EK für
>Gewerbe knapp 1,40 Euro pro Stk. www.schukat.de

Du könntest die Wert auch in Stein meisseln (lassen).

von Dirk (Gast)


Lesenswert?

>du koenntest auch ein 16Mbit Flashbaustein (SO8) nehmen kostet EK für
>Gewerbe knapp 1,40 Euro pro Stk. www.schukat.de

>Du könntest die Wert auch in Stein meisseln (lassen).

Was willst du mir damit sagen? Du bist doch mein Nordlichtfreund ;)

von Bernd (Gast)


Lesenswert?

Moin
Auf Wikipedia steht dass ein Byte einem Zeichen entspricht.
Also wären das dann bei 5 Zeichen 40 Bit für jedes Messergebnis?

Gruss

Alex

von Schlumpf (Gast)


Lesenswert?

Wieviele Nnachkommastellen du dann hast, das ist interpretationssache.
Bei Festkommadarstellung setzt du einfach irgendwo den Punkt.
so könntest du z.B. 4 Stellen vor dem Komma und vier nach dem Komma 
haben.
(Allerdings natürlich in binärer Darstellung)


von Basti (Gast)


Lesenswert?

ein byte entspricht einem ASCII zeichen.

wenn du aber zum beispiel werte von 0 - 255 hast, dann kannst du sogar 
alle diese werte in einem byte speichern oder darstellen, ist dann aber 
eben nicht mehr ascii. nem controller ist ascii aber relativ egal weil 
ascii eben nur für uns menschen schön zu lesen ist

von johnny.m (Gast)


Lesenswert?

Die ganzen Vorschläge bringen gar nichts. Bernd braucht erst mal ein 
paar Grundlagen. Die muss er sich wohl oder übel anlesen. Wenn er dann 
noch Verständnisfragen hat, kann er das hier posten.

Das ist genau das, was mich oben zu der Aussage über 
BASCOM-Programmierer veranlasst hat: Viele (sicher nicht alle) glauben, 
man könne damit einfach, ohne irgendwelche Grundlagen, sofort und 
innerhalb von Minuten Projekte realisieren, die die Welt verändern. Und 
das geht meist gewaltig in die Hose.

Also bitte, Bernd: Jeder hat mal bei den Grundlagen angefangen und 
LED-Blinkprogramme etc. geschrieben. Damit solltest Du auch anfangen, da 
Du eine gewisse Kenntnis der Hardware und des Systems brauchst, um 
größere Sachen zu bauen. Aller Anfang ist schwer, aber ohne 
Schritt-für-Schritt-lernen geht es nicht.

P.S.: Was im Wikipedia (vermutlich unter "ASCII") steht, bezieht sich 
auf eine standardisierte Darstellung zur Anzeige von Textzeichen. Die 
ist aber sehr speicherintensiv und Du wirst Messwerte sicher nicht 
sofort in ASCII speichern, sondern als Binärwert und die Werte erst bei 
der Ausgabe in ASCII umformen. Das aber nur als Zusatztipp. Fange bei 
den absoluten Basics an. Die fehlen Dir nämlich...

von Schlumpf (Gast)


Lesenswert?

Bernd, 1 Byte = 1 Zeichen ist so, wenn du Ascii codieren willst:

Also z.B  der Wert 164 entspricht ASCII: 0x31 0x36 0x34 da jedes Zeichen 
(kann auch Buchstabe sein) durch ein Byte dargestellt wird.

Aber du wirst doch hoffentlich nicht deine Ergebnisse so ablegen 
wollen???

Leg das BINÄR ab!

164 Dez = 0xA4 (das ist EIN 8-Bit-Wert)


von unsichtbarer WM-Rahul (Gast)


Lesenswert?

>Was willst du mir damit sagen? Du bist doch mein Nordlichtfreund ;)

Dass diese Information für ihn vermutlich völlig unverständlich/sinnlos 
ist. Ihm fehlen einfach zu viele (alle?) Grundlagen.

von Pöhli (Gast)


Lesenswert?

für weitere sinnvolle Tipps wäre es hilfreich wenn du die größte Zahl 
inklusive der wirklich ERFORDERLICHEN Nachkommastellen nennen könntest.
zB 270,99V oder sowas. Dein Speicherbedarf sinkt erheblich wenn dein 
größter Zahlenwert beim weglassen des Kommas 65535 nicht überschreitet. 
Also 16bit Zahl. Kommastellen sind erst mal Nebensache da ja wohl 
Festkomma.


da du drei Datenreihen hast kann man sich auch Gedanken über eien 
sinnvolle Adressierung machen. Fortlaufend ist möglicherweise nicht 
optimal, hängt aber von deinem Anforderungsprofil ab.

von Bernd (Gast)


Lesenswert?

Moin,
Ich habe schon kleinere Programme geschreiben, allerdings musste ich da 
nie Werte Speichern, dass ist nun neu für mich.
Die Werte Binär zu speichern macht in der Tat sinn.
Kümmert mich das überhaupt wenn ich in Hochsprache programmiere?
Kann man die Werte auch im Flash speichern?

Gruss

Alex

von Bernd (Gast)


Lesenswert?

Hallo,
Die Messung wird 5 Volt nicht übersteigen.

Gruss

Alex

von Schlumpf (Gast)


Lesenswert?

Meine Güte Bernd! Befasse dich BITTE BITTE erstmal mit den Grundlagen 
oder programmier php-Skripts für Webseiten, denn da musst dir wirklich 
keine Gedanken machen..

Jedesmal wenn du ne Variable beschreibst, dann SPEICHERST du und zwar 
BINÄR, da bis dato alle Rechner und Speicher BINÄR funktionieren!

Du kannst die Werte auch im Flash speichern (auch BINÄR) aber lass davon 
bitte die Finger, denn, ohne dir nahe treten zu wollen, das schaffst du 
mit deinem Kentnissstand nicht!

Weisst du was ein Array oder ein Pointer ist?

von Schlumpf (Gast)


Lesenswert?

0.. 5V @ 8 Bit Auflösung = 20mV / Bit

Reicht dir eine Genauigkeit von 20mV? (Das sind 0,02V)

Mit 8 Bit hast du 2^8 Mögliche Kombinationen = 256 verschiedene Werte
Teilst du 5V (0...5V) durch 256 kommen 20mV raus.

Das heisst: für 20mV speicherst du ne 1
für 40 mV ne 2, für 60 mV ne 3 etc.

Gespeicherter Wert * 20mV = gemessene Spannung

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Brauchst du eine Auflösung von mehr als 8 Bit (256 Werten; 0,02V)?
Controller sind ziemlich gut im Rechnen. Da könnte man nämlich einfach 
ein bis zwei Bytes im EEPROM speichern und bei der Ausgabe dann in die 
gewünschten Werte umrechnen lassen. Was bringt es, fertig formatierte 
Zahlen zu speichern, wenn es nur eine simple Umrechnung erfordert, um 
sie in das gewünschte Format zu bringen, dafür aber eine grosse Menge 
Speicher braucht?!

Interessant ist die Verbindung "Alex" und "Bernd" als Namen.
War das nicht Karl-Heinz spezieller "Kumpel"?

>Kann man die Werte auch im Flash speichern?
Ja, du aber vermutlich noch nicht.

Permanent (also dauerhaft) kannst du die Daten im internen EEPROM 
speichern (das meiner Meinung nach aber in meinem AVR 8KB groß ist).
Im RAM kann man Daten solange speichern, bis der Strom weg ist.
Da kann man dann aber auch kein 8KB speichern, da das Programm für 
Variablen, den Stack etc. auch noch etwas davon benutzt.

>Kümmert mich das überhaupt wenn ich in Hochsprache programmiere?
Nö.

von Frank N. (betafrank)


Lesenswert?

>Ich weiß allerdings nicht wie ich auf den Internen RAM zugreifen soll,
>und wie ich die Werte da Speichern kann? Und wie lese ich sie Wieder
>aus?

Dim bla as Byte*12  '12 Speicherzellen im RAM ;-)

bla[1]=88  'speichern im RAM
print("lesen von RAM");bla[1]


Syntax bestimmt nicht korrekt, aber vom Prinzip kannst Du Dir so 
Speicher für Deine Messwerte schaffen.

von Bernd (Gast)


Lesenswert?

Moin,
@ Schlumpf
Sicherlich bin ich kein Weltmeister im Programmieren, nein ich gebe zu, 
eigentlich kann ich es gar nicht, bzw kaum.
Allerdings sind gewisse Dinge mit Bascom dermaßen einfach dass man auch 
ohne große Kenntnisse zum Ergebnis kommt (Oder eben nicht, je nach dem 
was man sich für Ziele setzt)
Bis dato hat alles geklappt was ich wollte (PWM und popelige LEDs die 
Blinken)
Dein zweiter Beitrag hat mir überings mehr geholfen als der erste... und 
PHP interessiert mich auch nicht die Bohne ;-)
Kennst du eine Seite wo über Pointer und  Arrays berichtet wird?
Dann schau' ich es mir mal an.

Das Speichern im Ram wäre ja nicht Sinnvoll, da dieser wie beschrieben, 
wieder gelöscht wird sobald die Spannung weg ist.
Außerdem müsste ich dann mehrere Tausend Variablen deklarieren, die alle 
einen Wert bekommen sollen.


Gruss

Alex




von Karl H. (kbuchegg)


Lesenswert?

> Außerdem müsste ich dann mehrere Tausend Variablen deklarieren, die alle
> einen Wert bekommen sollen.

Besorg dir Literatur.
Du brauchst natürlich nicht tausende Variablen sondern
genau eine: ein Array.

Da dir das Ram eber sowieso nicht weiterhilft, weil es
bei Stromausfall die Daten verliert, bleibt dir nichts
anderes übrig als die Daten im EEprom zu speichern.
Hierzu verweise ich wieder auf das BASCOM Handbuch.

> Allerdings sind gewisse Dinge mit Bascom dermaßen einfach dass man
> auch ohne große Kenntnisse zum Ergebnis kommt (Oder eben nicht, je
> nach dem was man sich für Ziele setzt)

Und genau das ist das Problem, dass viele Leute in diesem
Forum (mich eingeschlossen) mit den meisten BASCOM-Fragestellern
haben: Sie wissen nicht wirklich was sie tun. Solange die
vorgefertigen BASCOM Komponenten ausreichen ist alles
in Butter. Aber wehe wenn nicht. Dann zeigen sich die Wissenslücken
extrem. Es ist wie wenn jemand einen Ölwechsel beim Auto
machen will, der noch nicht mal den Tankdeckel selbst findet.



von Herr M. (herrmueller)


Lesenswert?

Fürs Öl nachfüllen ist es der 710 er Deckel.

von Bernd (Gast)


Lesenswert?

Hallo,
Du hast sicherlich recht mit dem was du sagst, aber ich erwarte ja aus 
dem Grund keine Komplettlösung, sondern möchte nur ein paar Hinweise die 
mich weiterbringen.

Gruss

Alex

von Karl H. (kbuchegg)


Lesenswert?

Eben.
Der Hinweis ist: EEprom

von Schlumpf (Gast)


Lesenswert?

Da ich Bascom nicht kenne, sondern wenn, dann in C Programmiere, musst 
su schon selber schauen, wie du das mit den Array hinbekommst.
Tipp: Google doch mal "Bascom" "Array"
Ein Array ist letztendlich eine Aneinanderreihung von Variablen eines 
bestimmten Typs, die über einen Index angesprochen werden.
Und da Variablen im RAM angelegt werden, ahst du so eine "Feld" im RAM, 
auf dem Du schreiben und lesen kannst.

von Patrik (Gast)


Lesenswert?

Laut Bascom Hilfe:


Arrays

An array is a set of sequentially indexed elements having the same type. 
Each element of an array has a unique index number that identifies it. 
Changes made to an element of an array do not affect the other elements.


The index must be a numeric constant, a byte, an integer, word or long.
The maximum number of elements is 65535.
The first element of an array is always one. This means that elements 
are 1-based.
Arrays can be used on each place where a 'normal' variable is expected.

Example:

'create an array named a, with 10 elements (1 to 10)
Dim A(10) As Byte
'create an integer
Dim C As Integer
  'now fill the array
  For C = 1 To 10
    'assign array element
    A(c)= C
    ' print it
    Print A(c)
  Next
  'you can add an offset to the index too
  C = 0
  A(c + 1)= 100
  Print A(c + 1)
End

von Sonic (Gast)


Lesenswert?

Bei einem Datenlogger gehören die Daten mit Zeitstempel in ein externes, 
batteriegepuffertes SRAM. Ist schon wegen Geschwindigkeit (wenn auch 
hier nicht gefordert) und ausreichendem Speicherplatz geboten.
Allerdings - wie oben schon mehrfach gesagt - das ist ein Projekt für 
Fortgeschrittenene, Hard- und Softwaremäßig!

von Bernd (Gast)


Lesenswert?

Moin,
Mir hat jemand erzählt dass es fertige Bausteine gibt , die angelegte 
Spannungen "von alleine"  Speichern und die man dann auch entsprechend 
auslesen kann..
Das wäre eine denkbar einfachere Idee!

Kennt jemand sowas?

Alex

von beba (Gast)


Lesenswert?

Hallo

so was gabs mal von Dallas. Es gab auch mal Sockel (28polig DIL) in die 
man einfach SRAMs stecken konnte. War ne prima Sache als EPron Ersatz.
Schau mal bei Dallas vielleicht gibts auch heute noch was äÄhnliches in 
der SMD Weld

BB

von Bernd (Gast)


Lesenswert?

Moin,
Bei Conrad gibts jetzt USB Datenlogger, auch welche mit denen man für 70 
Euros die Spannung Speichern kann!
Jetzt muss man nur noch den Snsor anschließen -> fertig!

Gruss

Alex

von Bernd (Gast)


Lesenswert?

Hat sich erledigt,
Das Ding kann nicht mehr als mit 1Hz Messen!
Scheiss Ding!

Alex

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.