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
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.
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
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...
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
>(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.
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
> 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...
>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).
>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 ;)
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)
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
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...
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)
>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.
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.
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
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?
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
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ö.
>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.
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
> 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.
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
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.
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
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!
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
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
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