Guten Tag, Ich bin auf der Suche nach einem funktionierenden Projekt in C um einfache Strings und Messwerte in ein .txt zu schreiben welches auf einer SD Karte gespeichert werden soll. dazu wird ein fertiges microSD-Modul verwendet. Ich habe mittlerweile leider schon Tage mit der Recherche verbracht und mir auch das im Forum vorgestellte Projekt angesehen. Wäre jemand so nett und würde mir ein funktionierendes Projekt zu Verfügung stellen? Danke!
Gerhard H. schrieb: > Ich bin auf der Suche nach einem funktionierenden Projekt in C um > einfache Strings und Messwerte in ein .txt zu schreiben welches auf > einer SD Karte gespeichert werden soll. Such mal nach "openLog"
Danke Wolfgang für deine Antwort! sieht sehr interessant aus, werde ich mir ansehen. für mich wirkt ELM Chan's SD library auch interessant. leider bin ich mit der programmiersprache C noch am Anfang. Für mich ist die Auswertung, welche in EXCEL ausgeführt werden soll interessant. daher würde ich nur gerne einfache Temperaturwerte von meinem uController aufnehmen und diese auf eine SD-Karte speichern. Vielleicht hat ja schon mal jemand ähnliches gemacht. Ich würde dann gerne das Programm auf meine Bedürfnisse anpassen. Sämtliche Projekte die ich gefunden habe sind sehr umfangreich. LG
Gerhard H. schrieb: > Sämtliche Projekte die ich gefunden habe > sind sehr umfangreich. Das ist ja auch ein umfangreiches Vorhaben. - ADC Messungen durchführen - Vermutlich mit Zeitstempel anreichern - Messwerte linearisieren - Messwerte in Grad Celsius umrechnen - Auf eine SD Karte speichern - In einem definierten Dateiformat (z.B. csv) Dein Ansatz, ein vorhandenes Projekt umzuschreiben, würde ich nur für gut halten, wenn du umfangreiche Programmiererfahrung hast. Denn fremde Quelltexte zu verstehen ist oft viel schwieriger, als etwas eigenes zu schreiben. https://www.mikrocontroller.net/articles/AVR_FAT32 Ich hatte diese Library zweimal benutzt und bin damit sehr gut klar gekommen.
> dazu wird ein fertiges microSD-Modul verwendet. Welches? > Ich habe mittlerweile leider schon Tage mit der Recherche verbracht und > mir auch das im Forum vorgestellte Projekt angesehen. Dein 328p sitzt bekanntermaßen auf jedem Arduino Nano Board drauf. Wenn man nach "Arduino Nano SD-Card temperature logger" sucht, so findet man dutzende Projekte. Allerdings scheint mir das so einfach, dass Du da sicherlich auch schon selbst drauf gekommen bist. Ich vermute daher, Du willst ein Projekt, welches kein Arduino-Framework verwendet? Andererseits lese ich gerade in Deinem zweiten Post, dass Du C-Anfänger bist. Dann wäre ein Einstieg via Arduino vielleicht doch nicht der Schlechteste. > Wäre jemand so nett und würde mir ein funktionierendes Projekt zu > Verfügung stellen? Ich empfehle, Deine Anforderungen hier nochmals viel genauer zu beschreiben. Es gibt hier dutzende Forenmitglieder, die Temperatur- logger gebaut haben (ich selbst mit eingeschlossen), aber auf die Anforderungen im Detail kommt's halt an. Beispiel: - Der Logger soll min. 3 Monate mit 3x1,5V Batterien funktionieren - Der Logger soll max. alle 10 Minuten einen Wert aufnehmen und direkt auf SD-Karte schreiben - Der Temperatursensor ist vom Typ XYZ und hat eine I2C-Schnittstelle. Der Link zum Datenblatt lautet: ... URL ... - Das micro-SD-Modul ist dieses hier: ... URL ... - Ich habe in XYZ-Board mit einem ATmega328p (URL: ...) Kurzum: je genauer Deine Beschreibung desto bessere Antworten darfst Du erwarten. Wenn die Leute merken, dass Du Dir Mühe mit der Beschreibung und Deinen ersten C-Gehversuchen gibst, so erlebe ich hier in diesem Forum oft beispiellose Hilfe. Viele Grüße Igel1
Gerhard H. schrieb: > Ich würde dann gerne das Programm auf meine Bedürfnisse anpassen. > Sämtliche Projekte die ich gefunden habe sind sehr umfangreich. Wenn du Spaß dran hast ... Was sind denn deine Bedürfnisse? OpenLog schreibt einfach das, was du ihm über die serielle Schnittstelle zuschiebst, auf die SD-Karte. Falls du lieber I2C verwendest, gibt es auch dafür einer fertige Lösung namens Qwiic OpenLog.
Hier ein Arduino-Projekt, das alle Deine Anforderungen erfüllt: http://www.electronics-lab.com/project/simple-arduino-data-logger/
Danke für all eure Antworten! Verwendet wird ein ELEGOO UNO R3 da dieser schon vorhanden war. (denke mal der ist baugleich mit einem Arduino uno) LINKT ZU ELEGOO UNO R3: https://www.amazon.de/Entwicklungsplatine-ATmega328P-ATmega16U2-USB-Kabel-Arduino/dp/B01EWOE0UU Ebenfalls verwendet wird ein SPI micro-SD-Karten-Mudul von AZ-Delivery. (Foto davon im Anhang) LINK ZUM SD-Modul: https://www.amazon.de/AZDelivery-Reader-Speicher-Memory-Arduino/dp/B077MCQS9P/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1NLGID8W560D0&keywords=sd+karten+modul+arduino&qid=1558177689&s=computers&sprefix=sd+karten+modul+ard%2Ccomputers%2C190&sr=1-3 PINBELEGUNG: SD-Modul zu ELEGOO UNO R3 GND - GND VCC - 5V (da levelshifter bereits am Modul) MISO - PB4 MOSI - PB3 SCK - PB5 CS - PB2 Sollte so möglich sein, oder? Ich möchte wenn möglich ein Atmel-Studio Programm verwenden. (möchte mit Atmel Studio vertrauter werden) Ein funktionierender Zeitstempel mittels i2c RTC ist vorhanden und sollte dann miteingebunden werden. Zu den Aufzeichnung: Der uController wird vorraussichtlich um die 24h laufen und wenn möglich jede sekunde einen Messwert inklusive Zeitstempel aufzeichnen. Die genaue Auswahl des temperatursensors ist noch nicht erfolgt. vermutlich werde ich einen DHT11 verwenden, da dieser bei einem Übungskit dabei war. LINK ZUM Temperatursensor: https://www.amazon.de/AZDelivery-%E2%AD%90%E2%AD%90%E2%AD%90%E2%AD%90%E2%AD%90-Temperatursensor-Luftfeuchtigkeitssensor-Arduino/dp/B078S7FCZ9/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=dht11&qid=1558177765&s=gateway&sr=8-3 Diese aufgezeichneten Werte sollen dann von mir in Excel ausgewertet werden. Beste Grüße!
:
Bearbeitet durch User
Gerhard H. schrieb: > Die genaue Auswahl des temperatursensors ist noch nicht erfolgt. > vermutlich werde ich einen DHT11 verwenden, da dieser bei einem > Übungskit dabei war. warum nicht den besseren DHT22 oder einfacher DS18B20? Der DHT11 ist einfach nur Schrott, so hat wohl jeder mal angefangen (ich auch) und gelernt das es rausgeworfenes Geld war. Aber solange das noch nicht jeder weiss verkauft sich dieser "Schrott" wohl gut.
:
Bearbeitet durch User
Joachim B. schrieb: > Gerhard H. schrieb: >> Die genaue Auswahl des temperatursensors ist noch nicht erfolgt. >> vermutlich werde ich einen DHT11 verwenden, da dieser bei einem >> Übungskit dabei war. > > warum nicht den besseren DHT22 oder einfacher DS18B20? > > Der DHT11 ist einfach nur Schrott, so hat wohl jeder mal angefangen (ich > auch) und gelernt das es rausgeworfenes Geld war. > > Aber solange das noch nicht jeder weiss verkauft sich dieser "Schrott" > wohl gut. Danke für deinen "Einwand" werde mich in diesem fall dann klar für einen der beiden, von dir vorgeschlagenen temperatursensoren entscheiden. Ich find eure Hilfe hier wirklich bemerkenswert. Danke schonmal (:
Gerhard H. schrieb: > Danke für deinen "Einwand" > werde mich in diesem fall dann klar für einen der beiden, von dir > vorgeschlagenen temperatursensoren entscheiden. der DHT22 ist innen in meinem Wäscheaufhängzimmer um die Luftfeuchte online abzufragen, Lüften wenn zu feucht und wenn trocken Wäsche wegpacken. der DS18B20 hängt an 2-Draht parasitär gepeist an 10m Leine aus dem Fenster im Schatten und dem macht Feuchtigkeit schön in Schrumpfschlauch verpackt zu den Drähten nichts aus.
okay danke, werde mir diese mal bestellen. bis dahin werde ich den DHT11 verwenden, da für mich die genaue temperatur derzeit noch nicht wichtig ist. wichtiger ist mir zurzeit die Einbindung der SD-Library. lg
Gerhard H. schrieb: > Der uController wird vorraussichtlich um die 24h laufen und wenn möglich > jede sekunde einen Messwert inklusive Zeitstempel aufzeichnen. Du solltest prüfen, ob bei dieser Messfolge die Eigenerwärmung des von dir gewählten Temperatursensors nicht zu hoch wird.
Wolfgang schrieb: > Du solltest prüfen, ob bei dieser Messfolge die Eigenerwärmung des von > dir gewählten Temperatursensors nicht zu hoch wird. ja, jede Sekunde ist heftig, alle 2 Sekunden reichten im Allgemeinen, wenn sich die Temperatur im Zimmer innerhalb von Sekunden um 10°C erhöht brennt die Bude, dann braucht man es eh nicht mehr wissen.
Joachim B. schrieb: > ja, jede Sekunde ist heftig, alle 2 Sekunden reichten im Allgemeinen, Gewöhnlich ist es sinnvoll, die Abtastrate an der thermischen Zeitkonstanten des Sensors zu orientieren. Sonst schreibt man sich den Großteil der Speicherkarte mit gut korrelierten Datenpunkten voll.
Danke Wolfgang und Joachim, ich werde eure Tipps berücksichtigen. Habt ihr vielleicht ein Projekt für mich, bei dem die SD-Karten Funktion schon integriert ist, damit ich mir darüber keine gedanken mehr machen muss? Danke schonmal!
Gerhard H. schrieb: > PINBELEGUNG: > SD-Modul zu ELEGOO UNO R3 > GND - GND > VCC - 5V (da levelshifter bereits am Modul) > MISO - PB4 > MOSI - PB3 > SCK - PB5 > CS - PB2 > Sollte so möglich sein, oder? Habe gerade einmal Deine Pin-Belegungen mit folgenden Internet-Quellen gegengeprüft: - https://lastminuteengineers.com/arduino-micro-sd-card-module-tutorial/ - https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf SD-Modul-Pin SD-Modul Arduino Uno R3 PIN PORT ------------------------------------------------------ 1 GND GND 2 VCC 5V 6 CS SS 10 PB2 4 MOSI MOSI 11 PB3 3 MISO MISO 12 PB4 5 SCK SCK 13 PB5 Fazit: Deine Pinbelegung scheint korrekt zu sein und Deine Überlegungen zu den Levelshiftern erscheinen mir ebenfalls korrekt zu sein. Mit der richtigen Library solltest Du nun halbwegs geradeaus zum Ziel kommen können - Stefanus hatte Dir weiter oben ja bereits einen guten Link zugeschickt: https://www.mikrocontroller.net/articles/AVR_FAT32 Einfach ausprobieren und bei Problemen Code hier posten und Fehler/Problem hier so gut und genau wie möglich beschreiben. Und nur keine Scheu - jeder hier hat mal klein angefangen. Viele Grüße Igel1
Gerhard H. schrieb: > Habt ihr vielleicht ein Projekt für mich, bei dem die SD-Karten Funktion > schon integriert ist, damit ich mir darüber keine gedanken mehr machen > muss? > Danke schonmal! Du willst, dass Dir die Hähnchen gebraten in den Mund fliegen. Aber eigentlich tun sie das in Form der o.g. Library ja schon. Jetzt musst nur nur alles in kleinen Schritten zusammenfügen und schon werden Dir die Elektronik-Götter hold sein: 1.) Deinen Arduino Uno R3 gemäß obiger Tabelle mit dem SD-Card-Modul verbinden. 2.) Atmel Studio 7 installieren 3.) Rudimentäres Programm (vielleicht ein Blinky) schreiben oder irgendwo aus dem Internet kopieren 4.) Dein Blinky-Programm in Studio kompilieren, linken und auf das Board flashen 5.) Freuen, wenn's blinkt. Dann hast Du die grundsätzliche Abfolge in Atmel Studio verstanden. 6.) Die von Stefanus verlinkte SD-Card Bibliothek zu Deinem Programm dazustricken 7.) Schritt für Schritt die einzelnen Funktionen der Bibliothek aufrufen und ausprobieren. 8.) Wieder freuen, wenn's funktioniert. Solltest Du bei irgendeinem dieser Schritte Probleme haben, so werden Dir die Leute hier im Forum sicher helfen. Nur Mut und ran ans Werk! Viele Grüße Igel1
So Freunde, ich habe gestern ein neues Projekt erstellt, im main habe ich mir den Beispielcode aus dem Forum reinkopiert und dann alle notwendigen .h dateien in den Projektordner kopiert und eingefügt. scheinbar habe ich beim Einbinden dieser Dateien einen Fehler gemacht. Ich bekomme 35 Meldungen mit "undefined reference to ... " hier zu meiner Vorgehensweise: 1) - Neues Projekt erstellt 2) - im Main den Beispielcode von mikrocontroller.net kopiert 3) - danach die .h und .c Dateien (mmc. fat. fil. usw) in das Projektverzeichnis kopiert 4) - Mittels Rechtsklick im Solution-Explorer auf "Add" - "Existing Item" und dann die nötigen headerdateien ausgewählt. -so hat es zumindest auch bei bisherigen programmen funktioniert. habe ich hier etwas falsch gemacht bzw. braucht man hierfür noch etwas? Beste Grüße
hier noch ein kleiner Nachtrag: C:\Users\ccc\Desktop\TryOuts\SD\SD-Write-Tryout\SD-Write-Tryout\main.c(2 7,1): error: undefined reference to `uinit' lg
Hier mal mein Projekt. Scheitert derzeit noch am kompielieren. LG
Gerhard H. schrieb: > Scheitert derzeit noch am kompielieren. Du musst schon alles nehmen was in dem Beispiel vorkommt. Auf die Schnelle sehe ich bei dir keine globale Variable <TimingDelay> und die zugehörige Timer-Initialisierung. Also alles von vorne, erst nur das Testbeispiel erfolgreich compilieren und dann deine Änderungen hinzufügen.
Gerhard H. schrieb: > habe ich hier etwas falsch gemacht bzw. braucht man hierfür noch etwas? Nein, Du hast nichts falsch gemacht, aber die Autoren der MC-Seite, auf die wir Dich gelockt haben, die haben Dich in die Wüste geschickt: Du hattest vermutlich das dortige Beispiel 1:1 in Deine main.c kopiert: https://www.mikrocontroller.net/articles/AVR_FAT32#Einfaches_Code-Beispiel Leider fehlten darin ein paar wichtige Dinge (evtl. aus didaktischen Gründen?) und dieses Beispiel kompiliert daher nicht sauber. So kommst Du aus der Zwickmühle heraus: Im Zip-Paket ("AVR-mmc-0.6.4.zip") ist die Datei "main_simple.c" enthalten. Wenn Du den Inhalt Deiner main.c durch deren Inhalt ersetzt, so kompiliert der Code und Du hast ein schönes Beispiel. Kannst ja mal schreiben, ob der Code dann auch wirklich auf Deiner Hardware funktioniert hat - das kann ich hier leider nicht testen, weil ich hier in der Grabbelkiste auf die Schnelle kein SD-Modul finde. Viele Grüße Igel1
:
Bearbeitet durch User
Danke vielmals (: das Projekt lässt sich nun compilieren. Werde jetzt mal herausfinden, wie ich nun auf die SD schreiben kann. Ich finde eure Hilfe bemerkenswert! Danke!
Gerhard H. schrieb: > Werde jetzt mal herausfinden, wie ich nun auf die SD schreiben kann. Und? Hattest Du Erfolg? Viele Grüße Igel1
Leider noch nicht. Über das HTerm wird nur der Status "Boot" geschrieben. Nicht wie erhofft "Boot OK" Bin gerade dabei den Code zu verstehen. Sehe aber noch nicht wirklich wie ich nun meinen Messwert auf die SD schreiben kann. Werde mich aber auf jeden Fall melden, sobald es läuft. LG
Kleines Update meinerseits.... Initialisierung funktioniert! lag wohl an einer schlechten China-Strippe. ärgerlich, dass soetwas einem Stunden an Zeit kosten kann.
Gerhard H. schrieb: > lag wohl an einer schlechten China-Strippe. > ärgerlich, dass soetwas einem Stunden an Zeit kosten kann. In solchen Fällen lässt sich die Suchzeit erheblich reduzieren, indem man einen Billig-China-Logikanalysator (z.B. https://www.ebay.de/itm/202437260818) für die systematische Fehlersuche einsetzt.
Gerhard H. schrieb: > Kleines Update meinerseits.... > Initialisierung funktioniert! > lag wohl an einer schlechten China-Strippe. > ärgerlich, dass soetwas einem Stunden an Zeit kosten kann. auf dem Steckbrett altbekannt, ich lege ja alle Leitungen stets doppelt! Seit dem nie mehr Probleme!
Joachim B. schrieb: > ich lege ja alle Leitungen stets doppelt! > Seit dem nie mehr Probleme! Ich glaube Dir das, aber das ist doch gaga. Kann man keine Steckbretter mehr kaufen, die normal funktionieren?
Stefanus F. schrieb: > Ich glaube Dir das, aber das ist doch gaga. Kann man keine Steckbretter > mehr kaufen, die normal funktionieren? bestimmt, aber die beiden die besser sind kosteten das 10 bis 100 - fache und sind schwer zu bekommen, die billigen taugen halt mit etwas Mehraufwand. Die genauen Lieferquellen finde ich nicht mal mehr, es waren genau 2 gute Bretter mit blauem Plastikuntergrund. so z.B. https://rn-wissen.de/wiki/images/3/3b/Avrtutorial_steckbrett_max232.jpg
Joachim B. schrieb: > Die genauen Lieferquellen finde ich nicht mal mehr, es waren genau 2 > gute Bretter mit blauem Plastikuntergrund. Ha! Genau so sieht meins aus, allerdings in Schwarz. Das ist schon 20 Jahre alt und immer noch gut (außer ein paar einzelne Kontate die ich vergewaltigt habe). Ich glaube, meins hatte damals etwa 50 DM gekostet.
Gerhard H. schrieb: > Initialisierung funktioniert! Glückwunsch Gerhard! Gut gemacht! Viele Grüße Igel1
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.