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.
Wahrscheinlich willst Du dann doch etwas länger aufzeichnen... Unterstützt Bascom nicht auch MMC/SD-Karten relativ einfach?
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...
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
>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 ;)
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.