INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
24.01.2016, 13:31
Beitrag #1
Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
Hallo allerseits,

mit meinem Bubble-Zähler-Projekt bin ich bereits sehr weit vorangeschritten. RTC, Gabellichtschranke und SD-Card sind angeschlossen und funktionieren prinzipiell auch, wie sie sollen. Eine Unterbrechung der Lichtschranke wird sauber erfasst und der Zeitpunkt dieser Unterbrechung auch sauber im Seriellen Monitor dargestellt und auf die SD-Karte geschrieben, so lange der Arduino Nano am USB-Port hängt.

Geplant ist allerdings, dass dies Mini-System autark läuft, deshalb ist alles auf einem Breadboard mit Power Supply Module und angeschlossenem 9V-Blockbatterie montiert. Die Module erhalten auch alle Strom, die Lichtschranke "arbeitet", nur auf die Karte wird nichts geschrieben.

Also vermute ich, dass ich beim Anpassen des Sketches auf mein Projekt noch einen Denkfehler drin habe. Selbst komme ich nicht drauf, deshalb möchte ich fragen: Weiss jemand, wo mein Fehler liegt?

Hier ist mein Sketch:
Code:
/*
Bubble catcher from wizbrewery

RTC auf Nano
RST - Digital 8
I/O - Digital 7
SCLK - Digital 6
GND - GND
VCC - 5V

Lichtschranke Nano
Pin D2 = Int0

SD-Karte auf Nano
CS - Digital 10
MOSI - MOSI D11
MISO - MISO D12
SCK - D13
*/
#define resolution 800000 //only capture pulse that are greater than this to avoid noise
#define sample 4 // sample size of pulses for average starts at 0

volatile unsigned long pulseThen;
volatile unsigned long pulseNow;
volatile unsigned long numPulses;
volatile unsigned long keeppulse[sample];
volatile int count=0;

#include <Time.h>
#include <TimeLib.h>
#include <DS1302.h>
#include <SD.h>

File myFile;
String dataString = "";       // Leerer Daten-String für das Abspeichern auf Karte

// Init the DS1302
DS1302 rtc(8, 7, 6);    // Change the pins here if you want

void isr()
{
unsigned long now = micros();
float pulselength;
pulseNow = now;
int averagepulse;
int totalsample = 0;

if ((pulseNow - pulseThen) > resolution)
{
/*  Auskommentiert, betrifft nur Ausgabe auf Seriellen Monitor
   Serial.print(rtc.getDateStr());  
  Serial.print(" - ");  
  Serial.print(rtc.getTimeStr());
   Serial.print(" - ");
   Serial.print(numPulses+1);
   Serial.print(" - "); */
  
   pulselength = (float)(pulseNow - pulseThen) /1000000;
  
/*  Auskommentiert, betrifft nur Ausgabe auf Seriellen Monitor
  Serial.print(pulselength);
//   Serial.print(" ");
//   Serial.print("keeppulse ");
//   Serial.print(count);
   Serial.print("\n"); */

   dataString = "";                                           // Datensatz für SD-Karte zusammenbasteln    
   dataString += String(rtc.getDateStr());  
   dataString += ";";  
   dataString += String(rtc.getTimeStr());
   dataString += ";";      
   dataString += String(numPulses+1);
   dataString += ";";
   dataString += String(pulselength);
   dataString += " Sek.";
  

    File dataFile = SD.open("datalog.txt", FILE_WRITE);       // Textfile öfnen
    if (dataFile) {                                           // String in Tetfile schreiben
      dataFile.println(dataString);
      dataFile.close();
      // Serielle Ausgabe
      Serial.println(dataString);
    }
    else {
      Serial.println("Fehler beim Öffnen von datalog.txt");   // Fehlermeldung, falls Schreiben fehlschlägt
    }    
  
   if( count < sample )                                       // if - else Betrifft Anzeige auf Seriellen Monitor
   {
    keeppulse[count] = pulselength;
    count++;
   }
   else
   {
    count = 0;
//    Serial.print("Durchschnittsgeschwindigkeit der letzten ");
//    Serial.print(sample+1);
//    Serial.print(" Blubs ist ");
    for( int x=0; (x<sample); x++ ) {
      totalsample += (int)keeppulse[x];
     }
    averagepulse = totalsample/sample;
//    Serial.print(averagepulse);
//    Serial.print(" Sekunden \n\n");
    }

   pulseThen = pulseNow;
   ++numPulses;
}
}

void setup()
{
    // Set the clock to run-mode, and disable the write protection
    rtc.halt(false);
    rtc.writeProtect(false);
  
    Serial.begin(19200);  
    Serial.print("Initializing SD card...");  
    if (!SD.begin(10)) {
      Serial.println("initialization failed!");
      return;
    }
    Serial.println("initialization done.");
    
    pinMode(10, OUTPUT);                
    attachInterrupt(0, isr, RISING);
    numPulses = 0;                      // prime the system to start a new reading

  
    // open the file for reading:
    myFile = SD.open("datalog.txt");
    if (myFile) {
      Serial.println("datalog.txt:");
  
      // read from the file until there's nothing else in it:
      while (myFile.available()) {
        Serial.write(myFile.read());
      }
      // close the file:
      myFile.close();
    } else {
      // if the file didn't open, print an error:
      Serial.println("error opening datalog.txt");
    }

}

void loop()
{

}

Bin für jede Hilfe dankbar!
Viele Grüße,
Sylvia
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 13:38 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016 13:41 von hotsystems.)
Beitrag #2
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
Wie hast du denn den Nano und die anderen Boards mit Betriebsspannung versorgt?

Ich vermute hier einen Fehler.

Alle Boards auch mit GND verbunden?

Ups, ein nochmaliges Lesen deines Posts sagt mir, das Problem liegt an der 9 Volt-Batterie.

Da könnte der Strom nicht ausreichen, die sind nicht sehr leistungsstark und machen in Verwendung mit dem Arduino oft Probleme.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 13:58 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016 14:03 von Nathea.)
Beitrag #3
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
Hallo,

ich habe nun den 9-Volt-Block durch 4 x AA-Batterien ersetzt, leider mit gleichem Ergebnis.

Edit:
Auch ein Anschluss an ein USB-Lagederät brachte kein positives Ergebnis.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 14:26
Beitrag #4
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
Kannst du denn mal ei Foto deines Aufbaus posten.
Ich kann mir nur vorstellen, es liegt an den Verbindungen zur Spannung.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 15:35
Beitrag #5
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
mir ist im sketch aufgefallen, dass nicht alle seriellen ausgaben sauber auskommentiert sind.
kann es sein dass der sketch hängenbleibt wenn der usb-stecker gezogen ist.?
bereits im setup sind serielle ausgaben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 15:59
Beitrag #6
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
..und mir ist aufgefallen das der CS Pin 10 für den Chipselect der SD erst nach dem SD.begin(10) als Ausgang definiert wird.
Zudem hat es sich bei mir bewährt den CS Pin von Hand vor und nach jedem SD Zugriff zu setzen (LOW) oder zu deaktivieren (HIGH). Das war hier aber schon mal ein Thema. Suche mal nach "SelSD"...das könnte zielführend sein.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2016, 16:42
Beitrag #7
RE: Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt
(24.01.2016 15:35)Pit schrieb:  ...
kann es sein dass der sketch hängenbleibt wenn der usb-stecker gezogen ist.?
...
Leider weiss ich nicht, wie ich ein "hängenbleiben" sicher identifizieren könnte. Ist ja in dem Moment kein serieller Monitor mehr aktiv, in dem ich nachlesen kann.

(24.01.2016 15:59)Bitklopfer schrieb:  ..und mir ist aufgefallen das der CS Pin 10 für den Chipselect der SD erst nach dem SD.begin(10) als Ausgang definiert wird ...
Genau solche Details vermute ich als Fehlerursache.

Da ich als Basis einen fertigen Sketch von wizbrewery benutzt und "meinen" Sketch dazu noch aus mehreren anderen Bestandteilen aus den Beispielen nach bestem Wissen zusammengesetzt habe, könnte es gut sein, dass der Code nicht sauber ist. Ich bemühe mich aktuell, solche Fehler zu finden, bin aber noch am Anfang meiner spärlichen Programmierkenntnisse.

An welcher Code-Stelle wäre denn die Definition des CS Pins besser?

Das Thema "SelSD" schaue ich mir gleich an.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  TimerOne und I²C und Arduino Nano Mathias 0 22 Gestern 18:22
Letzter Beitrag: Mathias
  Daten Visualisieren MeisterQ 12 557 01.12.2016 19:36
Letzter Beitrag: MeisterQ
  Data Logger Daten auf SD Card schreiben Crichton 12 293 22.11.2016 18:32
Letzter Beitrag: Crichton
  I2C Daten übertragen Gandalf 3 211 04.11.2016 13:20
Letzter Beitrag: hotsystems
  Zahl von SD-Card Modul einlesen und Var. zuweisen Nafetz 13 296 28.10.2016 10:12
Letzter Beitrag: hotsystems
  Daten über USB verarbeiten Felix91 10 321 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Problem mit SD Card Library BennIY 4 189 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.533 01.09.2016 14:17
Letzter Beitrag: Clubsport
  Arduino hängt beim Upload deranda 11 500 12.08.2016 21:27
Letzter Beitrag: hotsystems
  Daten an mysql diode1990 24 1.302 31.07.2016 10:29
Letzter Beitrag: Gandalf

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste