Forum: Mikrocontroller und Digitale Elektronik Arduino Sleepmode mit DS3231


von Lukas D. (programmierer12)


Lesenswert?

Hallo zusammen,
ich habe da ein "kleines" Problem. Ich habe einen Datenlogger, der per 
DS3231-Modul die Zeit bekommt und 3 mal täglich einen Temperaturwert auf 
eine SD-Karte speichert. Jetzt habe ich festgestellt, dass der Verbrauch 
dabei extrem hoch ist (ca. 36mA) und habe mir darüber Gedanken gemacht. 
Letztendlich bin ich zu dem Schluss gekommen, dass das ständige Aufladen 
des Akkus der RTC wahrscheinlich das Problem ist. Unteranderem habe ich 
gemessen, dass mein Atmega328 einen Verbrauch von ca. 10mA hat, was 
schon recht viel ist. Nun möchte ich den Atmega328 die meiste Zeit 
"schlafen legen" und nur zu den Bestimmten Zeiten aufwachen lassen, um 
die Daten zu schreiben. Ist das denn überhaupt möglich?

von Pete K. (pete77)


Lesenswert?

Mehr als 0,65mA sollte der DS3231 nicht ziehen (siehe DB). Aber die 
SD-Karte benötigt schon etwas mehr.
Du könntest die SD-Karte über einen Pin des ATMega mit einem Transistor 
ein/ausschalten.

Kannst Du das hier mal erklären:
"Letztendlich bin ich zu dem Schluss gekommen, dass das ständige 
Aufladen
des Akkus der RTC wahrscheinlich das Problem ist."

Schaltplan, Aufbau?

von Lukas D. (programmierer12)


Lesenswert?

Pete K. schrieb:
> Mehr als 0,65mA sollte der DS3231 nicht ziehen (siehe DB). Aber
> die
> SD-Karte benötigt schon etwas mehr.
> Du könntest die SD-Karte über einen Pin des ATMega mit einem Transistor
> ein/ausschalten.
>
> Kannst Du das hier mal erklären:
> "Letztendlich bin ich zu dem Schluss gekommen, dass das ständige
> Aufladen
> des Akkus der RTC wahrscheinlich das Problem ist."
>
> Schaltplan, Aufbau?

OK ich werde es mal versuchen;)
Erstmal möchte ich noch erwähnen, dass ich dieses http://amzn.to/1Rf0IFp 
Modul benutze. Ich habe sowohl das DS3231-Modul als auch das 
SD-Karten-Modul(http://amzn.to/1nVN6ne) direkt an 5v angeschlossen. Das 
Schalten der Spannung der Module habe ich bereits versucht, bin aber 
daran gescheitert, dass das Modul ja immer "angeschalten" sein muss um 
eine Uhrzeit zu liefern, und diese brauch ich ja um zu wissen, wann ich 
die Daten schreiben muss. Auf diese Erkenntnis bin ich gekommen, als ich 
das Modul einmal vom Strom getrennt habe und den Verbrauch gemessen 
habe, welcher danach drastisch gesunken ist, was für mich bedeutet, dass 
da recht viel verbraucht wird ;)

MFG
programmierer12

von Dieter S. (Gast)


Lesenswert?

Wenn du ein Problem mit dem Ladestrom hast, solltest du mal prüfen, ob 
tatsächlich ein Akku verbaut ist. Viele RTC werden mit Batterie 
geliefert.
Hast du die Led noch auf der RTC drauf?

von Philipp K. (philipp_k59)


Lesenswert?

Wie machst Du das genau?

Üblich wäre:

nur DS3231 läuft,der weckt durch den Interrupt den Atmega und der 
schmeisst den Rest an, setzt den Alarm der ds3231 neu auf den 
eingestellten Interval/Zeit+Interval und geht wieder in den Tiefschlaf.

ich weiß ja nicht wieviele Daten das sind.. auf nen 16MB SPI Flash oder 
EEPROM passen in Bytes auch ne Menge daten drauf.

von Lukas D. (programmierer12)


Lesenswert?

Dieter S. schrieb:
> Wenn du ein Problem mit dem Ladestrom hast, solltest du mal prüfen, ob
> tatsächlich ein Akku verbaut ist. Viele RTC werden mit Batterie
> geliefert.
> Hast du die Led noch auf der RTC drauf?

Ich habe das nochmal geprüft, und ja es ist laut Conrad ein 
Akku(LIR2032) verbaut. Und ja die LED habe ich noch auf den Modul drauf.

von Lukas D. (programmierer12)


Lesenswert?

Philipp K. schrieb:
> Wie machst Du das genau?
>
> Üblich wäre:
>
> nur DS3231 läuft,der weckt durch den Interrupt den Atmega und der
> schmeisst den Rest an, setzt den Alarm der ds3231 neu auf den
> eingestellten Interval/Zeit+Interval und geht wieder in den Tiefschlaf.
>
> ich weiß ja nicht wieviele Daten das sind.. auf nen 16MB SPI Flash oder
> EEPROM passen in Bytes auch ne Menge daten drauf.

Das ist ja genau mein Problem, ich weiß nicht genau wie ich das umsetzen 
soll! Angenommen ich baue statt der SD-Karte einen EEPROM ein, wie viele 
Datensätze könnte ich darauf speichern, wenn ich 3 mal täglich Datum, 
Uhrzeit und Temperatur abspeichern möchte. Und wie bekomme ich diese 
Daten denn dann bequem auf einen PC um sie auszuwerten?

von Philipp K. (philipp_k59)


Lesenswert?

Ich habe so ein Projekt als Arduino Projekt gemacht, glaube das war wie 
folgt..

Das speichert die Unixtime in unsigned long und Temperatur in Float.

Das macht 8 byte pro messung .. ein 16MB EEPROM hat also Speicher für 
2.000.000 Messungen, je nachdem kann man den also für Preis/Leistung 
kleiner wählen ;)

Ich habe dann ein Serielles Menü mit dem ich für Copy&Paste CSV 
vorbereitete Daten für bestimmte Zeitbereiche ausgeben lassen kann. Du 
kannst ja mal austesten wieviel die SD mit EnableOff zieht.. ich habe 
die SDs leider noch nie benutzt.

von Jan L. (ranzcopter)


Lesenswert?

Lukas D. schrieb:
> Ich habe das nochmal geprüft, und ja es ist laut Conrad ein
> Akku(LIR2032) verbaut. Und ja die LED habe ich noch auf den Modul drauf.

Inwiefern jetzt 'laut Conrad'? Dein Link oben verweist auf das typische 
Chinamodul - bei denen steht in der 'Produktbeschreibung' zwar oft auch 
noch was von 'Akku', die allermeisten werden aber mittlerweile wegen 
Zollproblemen mit CR2032 oder ganz ohne Bat. geliefert.
Da ist es dann ratsam, die 'Ladeschaltung' zu deaktivieren.
Auf dem Modul ist übrigens auch noch ein 32k Eeprom zur freien 
Verwendung drauf - da passen schon etliche Messwerte rein...

von Lukas D. (programmierer12)


Lesenswert?

Jan L. schrieb:
> Inwiefern jetzt 'laut Conrad'? Dein Link oben verweist auf das typische
> Chinamodul - bei denen steht in der 'Produktbeschreibung' zwar oft auch
> noch was von 'Akku', die allermeisten werden aber mittlerweile wegen
> Zollproblemen mit CR2032 oder ganz ohne Bat. geliefert.

Ja das ist schon klar, aber in meinem Modul ist eine Zelle mit der 
Aufschrift 3,6V LIR2032 Lithium Ion battery, wenn ich jetzt nach der 
Bezeichnung suche kommt dabei raus, dass es sich um einen Akku handeln 
müsste.
Jetzt habe ich aber immer noch das gleiche Problem. Wie reduziere ich 
jetzt meinen Stromverbrauch und wie kann ich bei einer bestimmten Zeit 
den Conroller wieder "aufwecken" bzw. Wie bekomme ich ihn so weit, dass 
er in den Sleepmode geht?

von Lukas D. (programmierer12)


Lesenswert?

Philipp K. schrieb:
> Ich habe so ein Projekt als Arduino Projekt gemacht, glaube das
> war wie
> folgt..
>
> Das speichert die Unixtime in unsigned long und Temperatur in Float.
>
> Das macht 8 byte pro messung .. ein 16MB EEPROM hat also Speicher für
> 2.000.000 Messungen, je nachdem kann man den also für Preis/Leistung
> kleiner wählen ;)
>
> Ich habe dann ein Serielles Menü mit dem ich für Copy&Paste CSV
> vorbereitete Daten für bestimmte Zeitbereiche ausgeben lassen kann. Du
> kannst ja mal austesten wieviel die SD mit EnableOff zieht.. ich habe
> die SDs leider noch nie benutzt.

Danke für deine Hilfe! Also denkst du, dass ein EEPROM die bessere Wahl 
ist?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Lukas D. schrieb:
> soll! Angenommen ich baue statt der SD-Karte einen EEPROM ein, wie viele
> Datensätze könnte ich darauf speichern, wenn ich 3 mal täglich Datum,
> Uhrzeit und Temperatur abspeichern möchte. Und wie bekomme ich diese
> Daten denn dann bequem auf einen PC um sie auszuwerten?

 Da ist doch 4K Eeprom dabei, wenn du wie folgt speicherst:

 Datum - 2 Byt
 Zeit  - 2 Byt
 Temp  - 2 Byt

 passen da beguem 7 Monate drauf.

von Philipp K. (philipp_k59)


Lesenswert?

Marc V. schrieb:
> Da ist doch 4K Eeprom dabei, wenn du wie folgt speicherst:

So ist noch besser..

bzw unixtime 4byte und Temp 2Byte ist sinnvoller..

Rundet man Float auf zwei nachkommstellen und macht*100 als 
uin16_t/arduino int. Glaub so hab ich das sogar gemacht.

Worauf programmierst Du das?

von Lukas D. (programmierer12)


Lesenswert?

Marc V. schrieb:
> Da ist doch 4K Eeprom dabei, wenn du wie folgt speicherst:
>
>  Datum - 2 Byt
>  Zeit  - 2 Byt
>  Temp  - 2 Byt
>
>  passen da beguem 7 Monate drauf.

Wo soll denn der EEPROM dabei sein schäm? Und wie beschreibe ich den 
mit meinem Arduino-Aufbau. Die Übertragung dürfte auch nicht ganz so 
einfach sein, da ich nur eine ISP-Schnittstelle habe über die ich ja 
keine Daten Seriell hin und her schicken kann, oder?

Philipp K. schrieb:
> Worauf programmierst Du das?

Ich habe einen Atmega328 als standalone-Arduino und programmiere den 
natürlich auch mit der "Arduino-IDE", und spiele den Sketch dann mit 
einem USBasp auf den Chip.

von google (Gast)


Lesenswert?

Hast Du die LEDs auf den Modulen gekappt? Was ist das für ein Arduino? 
(z. B. beim Nano USB-Teil stilllegen)

Guck Dir mal an, wie der das gemacht hat:

https://edwardmallon.wordpress.com/2014/10/07/the-diy-data-logger-v2-with-low-power-shut-down-capability/

von Philipp K. (philipp_k59)


Lesenswert?

> Wo soll denn der EEPROM dabei sein schäm? Und wie beschreibe ich den
> mit meinem Arduino-Aufbau. Die Übertragung dürfte auch nicht ganz so
> einfach sein, da ich nur eine ISP-Schnittstelle habe über die ich ja
> keine Daten Seriell hin und her schicken kann, oder?

müsste at24c32 oder so draufstehen.. ist nur nen 8Pin und benutzt 
zusammen mit dem ds3231 die i2C Schnittstelle als Bus.. gibts genügend 
Libs die auf beides eingehen.

> Ich habe einen Atmega328 als standalone-Arduino und programmiere den
> natürlich auch mit der "Arduino-IDE", und spiele den Sketch dann mit
> einem USBasp auf den Chip.

Ich würde das nächste mal nen 6 pin kompatiblen FTDI Header benutzen.
Dann kann man den mit dem hier programmieren und immer angeschlossen 
lassen.. so hat man dann auch eine serielle Verbindung zum Rechner um 
die daten abzurufen.

https://drive.google.com/file/d/0BxOStC_q23RWcTFLMzE1MFBXNWs/view?usp=sharing

So ein FDTI Header kostet einmalig 5€ und den stecke ich dann zwischen 
den Boards um.

von Lukas D. (programmierer12)


Lesenswert?

google schrieb:
> Hast Du die LEDs auf den Modulen gekappt? Was ist das für ein Arduino?
> (z. B. beim Nano USB-Teil stilllegen)

Nein die LEDs gehen noch(habe ich schon mal geschrieben ;) ). Das ist 
gewissermaßen der Arduino UNO nur als standalone auf meiner Platine und 
den anderen Sachen wie es hier https://www.arduino.cc/en/Main/Standalone 
gezeigt wird.

von Lukas D. (programmierer12)


Lesenswert?

Philipp K. schrieb:
> Ich würde das nächste mal nen 6 pin kompatiblen FTDI Header benutzen.
> Dann kann man den mit dem hier programmieren und immer angeschlossen
> lassen.. so hat man dann auch eine serielle Verbindung zum Rechner um
> die daten abzurufen.

Ja das ist eigentlich ne gute Idee, aber zum Testen tuns auch ein Paar 
Breadboardkabel, müssten ja die gleichen Pins sein oder?

von Jan L. (ranzcopter)


Lesenswert?

Lukas D. schrieb:
> Jetzt habe ich aber immer noch das gleiche Problem. Wie reduziere ich
> jetzt meinen Stromverbrauch und wie kann ich bei einer bestimmten Zeit
> den Conroller wieder "aufwecken" bzw. Wie bekomme ich ihn so weit, dass
> er in den Sleepmode geht?

Die RTC kann so programmiert werden, dass bei einem Alarm der INT-Pin 
getriggert wird - der dann wieder einen Atmega aufwecken könnte, falls 
richtig beschaltet und programmiert...
Ich würde das aber erstmal einfacher probieren, und zwar mit den 
Sleepmodes, aus denen die Atmegas selbst wieder aufwachen können. Hier 
gibt's eine kleine Lib dazu:
https://code.google.com/archive/p/narcoleptic/

Ohne LED sollte ein 328 damit unter 1mA laufen...
Für 'Knopfzelle' sicherlich immer noch zuviel, für'n Akkupack aber 
nicht. Was du benutzt, hast du nicht geschrieben...

von Lukas D. (programmierer12)


Lesenswert?

Jan L. schrieb:
> Die RTC kann so programmiert werden, dass bei einem Alarm der INT-Pin
> getriggert wird - der dann wieder einen Atmega aufwecken könnte, falls
> richtig beschaltet und programmiert...

Ja ok aber wie programmiere ich die RTC und was für ein INT-Pin ist denn 
da gemeint?

Jan L. schrieb:
> Ich würde das aber erstmal einfacher probieren, und zwar mit den
> Sleepmodes, aus denen die Atmegas selbst wieder aufwachen können. Hier
> gibt's eine kleine Lib dazu:
> https://code.google.com/archive/p/narcoleptic/

Und was bringt mir das, ich muss ja extern den Atmega aufwecken oder? 
Oder muss ich die Lib in Verbindung mit dem RTC verwenden?

Jan L. schrieb:
> Was du benutzt, hast du nicht geschrieben...

Sorry habe ich vergessen zu schreiben, ich benutze einen Akkupack aus 3 
AAA-Akkus mit je 1,2V also 3,6V. Ich möchte aber irgendwann auf Lipo 
oder Li-Ion umsteigen um eine höhere Laufzeit zu erreichen.

von google (Gast)


Lesenswert?

Ich wiederhole mich:

"the-diy-data-logger-v2-with-low-power-shut-down-capability"

https://edwardmallon.wordpress.com/2014/10/07/the-diy-data-logger-v2-with-low-power-shut-down-capability/

Der hat genau Dein Problem gelöst.

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

Lukas D. schrieb:
> Hallo zusammen,
> ich habe da ein "kleines" Problem. Ich habe einen Datenlogger, der per
> DS3231-Modul.... Nun möchte ich den Atmega328 die meiste Zeit
> "schlafen legen" und nur zu den Bestimmten Zeiten aufwachen lassen, um
> die Daten zu schreiben. Ist das denn überhaupt möglich?

ist möglich habe ich schon gemacht

Philipp K. schrieb:
> Üblich wäre:
> nur DS3231 läuft,der weckt durch den Interrupt den Atmega und der
> schmeisst den Rest an, setzt den Alarm der ds3231 neu auf den
> eingestellten Interval/Zeit+Interval und geht wieder in den Tiefschlaf.

ganz genau, man muss sich nut Routinen schreiben um in der DS3231 die 
Alarmregister zu setzen, den Atmel in deep sleep zu schicken, nach dem 
wakeup, per /INT vom DS3231 an /INT1 vom Atmel, den Alarm zu löschen und 
neu zu setzen vor dem weiteren Tiefschlaf

Man sollte zu EEPRO Datenspeicherung die I2C EEPROM vom RTC EEPROM 
nutzen, wenn das mal verbraucht ist wechselt man nur das Uhrmodul statt 
den Atmel.

Ich hatte das mal in einem Cam Timer genutzt, ist nie ganz fertig 
geworden weil es nun mein Handy kann, aber die RTC und wakeup 
funktioniert.

Musst dich halt durch den halbwegs dokumentierten Code wühlen und mit 
I2C vertraut machen, mit den RTC Register und mit dem Atmel.

von Jan L. (ranzcopter)


Lesenswert?

Lukas D. schrieb:
> Und was bringt mir das, ich muss ja extern den Atmega aufwecken oder?
> Oder muss ich die Lib in Verbindung mit dem RTC verwenden?

Ich zitiere mich mal selbst: 'Sleepmodes, aus denen der Atmega selbst 
wieder aufwacht'.
Siehe verlinkte Lib - das Ding ist total simpel, und es ist ein Beispiel 
dabei. Man sagt dem Atmega 'gehe X Sekunden/Minuten/Stunden schlafen' - 
und danach wacht er wieder auf. Ohne irgendwelchen Abhängigkeiten zur 
RTC. Oft legt man das Teil dann nicht gleich für Stunden in den 
Tiefschlaf, sondern für kürzere Intervalle - in denen man z.B. dann 
prüft, ob eine Aktion ansteht, Taster gedrückt ist o.ä. - wenn nicht, 
wird wieder geschlafen.

von Lukas D. (programmierer12)


Lesenswert?

Jan L. schrieb:
> Ich zitiere mich mal selbst: 'Sleepmodes, aus denen der Atmega selbst
> wieder aufwacht'.
> Siehe verlinkte Lib - das Ding ist total simpel, und es ist ein Beispiel
> dabei. Man sagt dem Atmega 'gehe X Sekunden/Minuten/Stunden schlafen' -
> und danach wacht er wieder auf. Ohne irgendwelchen Abhängigkeiten zur
> RTC. Oft legt man das Teil dann nicht gleich für Stunden in den
> Tiefschlaf, sondern für kürzere Intervalle - in denen man z.B. dann
> prüft, ob eine Aktion ansteht, Taster gedrückt ist o.ä. - wenn nicht,
> wird wieder geschlafen.

Ich habe die Lib gerade mal mit meinem Arduino Mega getestet, und ich 
verbrauche im "Stromsparmodus" satte 53mA und mit blinkender LED also im 
"Arbeitsmodus" 103mA. angegeben sind aber von 15mA auf 7µA da dürfte 
doch die zusätzliche Beschaltung auf dem Arduino nicht so viel ausmachen 
oder?

von Philipp K. (philipp_k59)


Lesenswert?

Lukas D. schrieb:
> Ich habe die Lib gerade mal mit meinem Arduino Mega getestet, und ich
> verbrauche im "Stromsparmodus" satte 53mA

Du musst das in der endschaltung testen.. das meiste verbrennt sich 
irgendwo wo es nicht sein muss.. wenn Du sowieso standalone gehst 
kannste auch gleich mit internen 8Mhz auf 3.3V arbeiten.. dann nimmste 
nen 3.3V Regler mit Enable und eine kleine schaltung die den 3.3V Regler 
anschmeisst und so den atmega bootet.. dann kannste guten gewissens nen 
liion 400mah oder so nehmen und kannst so auch vernünftig messen.

: Bearbeitet durch User
von Jan L. (ranzcopter)


Lesenswert?

Lukas D. schrieb:
> Ich habe die Lib gerade mal mit meinem Arduino Mega getestet, und ich

siehe mein Vorredner; kein Sleepmode kann olle Linearregler 
beeinflussen. Ein halbwegs gescheiter LDO ist bei einem Akkupack sowieso 
Pflicht. 8MHz und 3.3v dann die Kür... :)

von Lukas D. (programmierer12)


Lesenswert?

Also ich bin gerade dabei zu verstehen wie das mit den Interrupts 
funktioniert und versuche das jetzt umzusetzen.
Vielen Dank für eure Hilfe!!!

von Dieter S. (Gast)


Lesenswert?

Ich habe das Gefühl, du solltest dich erstmal um die Basics kümmern.
Aus deinen Fragen entnehme ich, dir fehlen einfach die wichtigsten 
Grundlagen.
Auch kannst du sehr viel im Netz darüber finden.

von Lukas D. (programmierer12)


Lesenswert?

Dieter S. schrieb:
> Ich habe das Gefühl, du solltest dich erstmal um die Basics kümmern.
> Aus deinen Fragen entnehme ich, dir fehlen einfach die wichtigsten
> Grundlagen.
> Auch kannst du sehr viel im Netz darüber finden.

Da hast du das richtige Gefühl, leider :( ! Aber ich bin ja gerade dabei 
mich da ein einzulesen um es zu verstehen. Wichtig ist mir aktuell das 
ganze mal zum laufen zu kriegen :)

von Philipp K. (philipp_k59)


Lesenswert?

Wenn man das Quick&Simple richtig ausreizen möchte wäre ein LDO(0.01 μA 
OFF) mit Enable am INT des ds3231 mit nem 9V Block davor auch eine 
langlebige Alternative.

Der dS3231 macht den LDO an, Atmega bootet Superfix ohne Bootloader, 
hält den Enable zusätzlich, setzt das AlarmRegister zurück, der Int/sqw 
geht aus.
Zuguterletzt geht der Atmega nach der Messung in den Powerdown und der 
LDO geht somit auch aus.

Das hatte ich so mal geplant aber nie umgesetzt.

von Lukas D. (programmierer12)


Lesenswert?

Ich will euch ja nicht belästigen, aber ich habe mir da ein bisschen 
Code zusammenkopiert. Kann das denn gehen oder habe ich da grundlegende 
Fehler drin?
1
#include <DS3232RTC.h>
2
#include <Streaming.h>
3
#include <Time.h>
4
#include <Wire.h>
5
#include "TSIC.h"
6
#include <SPI.h>
7
#include <SD.h>
8
9
#define SQW_PIN 3
10
11
TSIC Sensor1(4, 2);
12
13
uint16_t temperature = 0;
14
float Temperatur_C = 0;
15
16
File myFile;
17
18
void setup() {
19
20
  Serial.begin(115200);
21
22
  digitalPinToInterrupt(3);
23
24
  pinMode(4, INPUT);
25
26
  setSyncProvider(RTC.get);
27
  Serial << "RTC Sync";
28
  if (timeStatus() != timeSet) {
29
    Serial << " FAIL!";
30
  }
31
  Serial << endl;
32
33
  printDateTime( RTC.get() );
34
  Serial << " --> Current RTC time." << endl;
35
36
  //Disable the default square wave of the SQW pin.
37
  RTC.squareWave(SQWAVE_NONE);
38
39
  //Attach an interrupt on the falling of the SQW pin.
40
  //digitalWrite(SQW_PIN, HIGH);    //redundant with the following line
41
  pinMode(SQW_PIN, INPUT_PULLUP);
42
  attachInterrupt(INT0, alarmIsr, FALLING);
43
44
  //Set an alarm at every 20th second of every minute.
45
  RTC.setAlarm(ALM1_MATCH_SECONDS, 20, 0, 0, 1);    //daydate parameter should be between 1 and 7
46
  RTC.alarm(ALARM_1);                   //ensure RTC interrupt flag is cleared
47
  RTC.alarmInterrupt(ALARM_1, true);
48
49
  //Set an alarm every minute.
50
  RTC.setAlarm(ALM2_EVERY_MINUTE, 0, 0, 0, 1);    //daydate parameter should be between 1 and 7
51
  RTC.alarm(ALARM_2);                   //ensure RTC interrupt flag is cleared
52
  RTC.alarmInterrupt(ALARM_2, true);
53
54
  if (!SD.begin(5)) {
55
    Serial.println("initialization failed!");
56
    return;
57
  }
58
59
  else Serial.println("initialization completed");
60
61
  myFile = SD.open("DATA.CSV", FILE_WRITE);
62
63
}
64
65
volatile boolean alarmIsrWasCalled = false;
66
67
68
void loop() {
69
70
  if (alarmIsrWasCalled) {
71
    if (RTC.alarm(ALARM_1)) {
72
73
      if (Sensor1.getTemperature(&temperature)) {
74
        Serial.print("uint_16: ");
75
        Serial.println(temperature);
76
        Temperatur_C = Sensor1.calc_Celsius(&temperature);
77
        Serial.print("Temperature: ");
78
        Serial.print(Temperatur_C);
79
        Serial.println(" °C");
80
      }
81
82
      myFile = SD.open("DATA.CSV", FILE_WRITE);
83
84
      if (myFile) {
85
        Serial.println("DATA.CSV:");
86
87
        String str = String(RTC.get()) + "," + String(RTC.get()) + "," + String(Temperatur_C);
88
89
        Serial.println(str);
90
91
        myFile.println(str);
92
93
        myFile.close();
94
95
        //digitalWrite(1, LOW);
96
97
      } else {
98
        Serial.println("error opening DATA.CSV");
99
      }
100
101
    }
102
    if (RTC.alarm(ALARM_2)) {
103
104
      if (Sensor1.getTemperature(&temperature)) {
105
        Serial.print("uint_16: ");
106
        Serial.println(temperature);
107
        Temperatur_C = Sensor1.calc_Celsius(&temperature);
108
        Serial.print("Temperature: ");
109
        Serial.print(Temperatur_C);
110
        Serial.println(" °C");
111
      }
112
113
      myFile = SD.open("DATA.CSV", FILE_WRITE);
114
115
      if (myFile) {
116
        Serial.println("DATA.CSV:");
117
118
        String str = String(RTC.get()) + "," + String(RTC.get()) + "," + String(Temperatur_C);
119
120
        Serial.println(str);
121
122
        myFile.println(str);
123
124
        myFile.close();
125
126
        //digitalWrite(1, LOW);
127
128
      } else {
129
        Serial.println("error opening DATA.CSV");
130
      }
131
132
    }
133
    alarmIsrWasCalled = false;
134
  }
135
136
}
137
138
void printDateTime(time_t t)
139
{
140
  Serial << ((day(t) < 10) ? "0" : "") << _DEC(day(t)) << ' ';
141
  Serial << monthShortStr(month(t)) << " " << _DEC(year(t)) << ' ';
142
  Serial << ((hour(t) < 10) ? "0" : "") << _DEC(hour(t)) << ':';
143
  Serial << ((minute(t) < 10) ? "0" : "") << _DEC(minute(t)) << ':';
144
  Serial << ((second(t) < 10) ? "0" : "") << _DEC(second(t));
145
}
146
147
void alarmIsr() {
148
149
  if (Sensor1.getTemperature(&temperature)) {
150
    Serial.print("uint_16: ");
151
    Serial.println(temperature);
152
    Temperatur_C = Sensor1.calc_Celsius(&temperature);
153
    Serial.print("Temperature: ");
154
    Serial.print(Temperatur_C);
155
    Serial.println(" °C");
156
  }
157
158
  myFile = SD.open("DATA.CSV", FILE_WRITE);
159
160
  if (myFile) {
161
    Serial.println("DATA.CSV:");
162
163
    String str = String(RTC.get()) + "," + String(RTC.get()) + "," + String(Temperatur_C);
164
165
    Serial.println(str);
166
167
    myFile.println(str);
168
169
    myFile.close();
170
171
    //digitalWrite(1, LOW);
172
173
  } else {
174
    Serial.println("error opening DATA.CSV");
175
  }
176
177
}

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> #include <DS3232RTC.h>

echt?

für eine DS3231?

man beachte 32 zu 31 !

von Dieter S. (Gast)


Lesenswert?

Joachim B. schrieb:
> Lukas D. schrieb:
> #include <DS3232RTC.h>
>
> echt?
>
> für eine DS3231?
>
> man beachte 32 zu 31 !

Ja, die library sind abwärtskompatibel.

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> Lukas D. schrieb:
>> #include <DS3232RTC.h>
>
> echt?
>
> für eine DS3231?
>
> man beachte 32 zu 31 !

Mist das hab ich ja überhaupt nicht gesehen, dass das für DS3232 ist, 
wobei auf der Github-Seite(https://github.com/JChristensen/DS3232RTC) 
steht "Arduino Library for Maxim Integrated DS3232 and DS3231 Real-Time 
Clocks " was für mich bedeutet, dass es auch mit DS3231 funktionieren 
sollte

: Bearbeitet durch User
von Dieter S. (Gast)


Lesenswert?

Allerdings ist der Sketch einigermaßen komplex und ohne richtige 
Kommentierung ist das schwer zu durchschauen.
Versuche einfach mal zu kompilieren und wenn es klappt hochzuladen.
Wir können es ohne entsprechende Hardware sowieso nicht testen.

von Dieter S. (Gast)


Lesenswert?

Lukas D. schrieb:
> Joachim B. schrieb:
> Lukas D. schrieb:
> #include <DS3232RTC.h>
>
> echt?
> für eine DS3231?
> man beachte 32 zu 31 !
>
> Mist das hab ich ja überhaupt nicht gesehen, dass das für DS3232 ist,
> wobei auf der Github-Seite(https://github.com/JChristensen/DS3232RTC)
> steht "Arduino Library for Maxim Integrated DS3232 and DS3231 Real-Time
> Clocks " was für mich bedeutet, dass es auch mit DS3231 funktionieren
> sollte

Das ist kein Problem.

von Lukas D. (programmierer12)


Lesenswert?

Dieter S. schrieb:
> Allerdings ist der Sketch einigermaßen komplex und ohne richtige
> Kommentierung ist das schwer zu durchschauen.
> Versuche einfach mal zu kompilieren und wenn es klappt hochzuladen.
> Wir können es ohne entsprechende Hardware sowieso nicht testen.

Ja ich habe das mal kompiliert und hochgeladen, hat auch alles 
funktioniert. Jetzt habe ich ein paar Minuten gewartet und geschaut ob 
jetzt Werte auf der SD-Karte sind - gähnende Leere :( . Mit meinem Oszi 
konnte ich auch nicht erkennen, dass es z.B. einen Peak gibt oder 
Ähnliches.

von Dieter S. (Gast)


Lesenswert?

Mein Tipp.
Teste die einzelnen Funktionen bzw. Module einzeln.
Das ist für dich einfacher und besser überschaubar.

von Jan L. (ranzcopter)


Lesenswert?

Genau; von null auf 100 (mit ISR) ist vielleicht etwas gewagt...
Ansonsten würde ich in einer ISR alles weglassen, was selber Interrupts 
braucht - weil, die tun's dort nämlich nicht...
Serial.println gehört da auch zu, was SD.xy macht - k.A.
Jedenfalls wird sich der Arduino so einfach weghängen.

von Lukas D. (programmierer12)


Lesenswert?

Ich habe jetzt ein FTDI-Modul angeschlossen und darüber mal geschaut wie 
weit er denn überhaupt kommt im Code. Die Serial Sachen habe ich aus der 
Stelle mit dem Interrupt gelöscht. Wie kann ich denn testen, ob die RTC 
ein Interrupt liefert und ob der Atmega das richtig verarbeitet? Ich 
konnte bis jetzt nicht beobachten, dass ein Interrupt stattgefunden hat, 
da keine neuen Daten auf der SD-Karte sind. Und wie könnte ich das denn 
lösen wenn die SD... Befehle auch Interrupts auslösen, innerhalb meines 
Interrupts von der RTC diese Befehle zu benutzen?

von Joachim B. (jar)


Lesenswert?

Dieter S. schrieb:
> Mein Tipp.
> Teste die einzelnen Funktionen bzw. Module einzeln.
> Das ist für dich einfacher und besser überschaubar.

Lukas D. schrieb:
> Wie kann ich denn testen, ob die RTC
> ein Interrupt liefert und ob der Atmega das richtig verarbeitet?

siehe oben

du schickst den Atmega in den Tiefschlaf, weckst ihn mit einem /INT0 
oder /INT1 per Taster nach GND ohne RTC auf, dann sollte ein 
Testprogramm von dir laufen LED blinken lassen.

Wenn nun statt Taster die RTC das übernimmt weisst du das du es richtig 
gemacht hast.

Immer kleine Schritte, so wie du das willst alles auf einmal von o auf 
100 klappt nicht.

: Bearbeitet durch User
von Lukas D. (programmierer12)


Lesenswert?

Ich habe jetzt den Controller in der Setup-Funktion in den Sleepmode 
geschickt und versuche bei jedem Interrupt einen Wert auf die SD-Karte 
zu schreiben. Der Verbrauch liegt zu Beginn bei ca. 26mA und steigt nach 
den 20 Sekunden, nach denen von der RTC ein Interrupt kommen sollte auf 
ca. 40mA an. Das ist für mich ein Zeichen, dass das Interrupt 
funktioniert! Sobald das Interrupt eintritt sollte er ja einen Wert 
schreiben, was er aber nicht tut! Woran kann denn das liegen?

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Ich habe jetzt

das ist mir zu durcheinander!

Kannst du da mal Ordnung reinbringen?

wie kann ein tiefschlafender AVR 26mA verbraten? da stimmt doch was 
vorne und hinten nicht.

Lukas D. schrieb:
> in den Sleepmode
> geschickt

in welchen?

Lukas D. schrieb:
> versuche bei jedem Interrupt einen Wert auf die SD-Karte
> zu schreiben

aber erst nach dem korrekten Aufwachen und Betrieb aufnehmen!

Lukas D. schrieb:
> und steigt nach
> den 20 Sekunden,

??? wieso und warum 20s

Das passt alles nicht zusammen und ist unverständlich, so kann keiner 
helfen.

Lukas D. schrieb:
> Sobald das Interrupt eintritt sollte er ja einen Wert
> schreiben,

kann er überhaupt auch ohne Interrupt schreiben?

Lukas D. schrieb:
> Woran kann denn das liegen?

An deiner Unordnung, Dinge der Reihe nach zum Laufen zu bringen und das 
in Worte, Ablaufdiagramme und Schaltbilder zu kleiden.

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> das ist mir zu durcheinander!

Tut mir echt leid wenn ich da zu unüberlegt schreibe!! Ich versuch mal 
Ordnung rein zu bringen und deine Fragen zu beantworten!

Joachim B. schrieb:
> wie kann ein tiefschlafender AVR 26mA verbraten? da stimmt doch was
> vorne und hinten nicht.

Das ist ja nicht nur der AVR der versorgt werden muss, sondern auch das 
SD- und RTC-Modul. Diese sind (im Moment noch) fest mit der 
Versorgungsspannung (5V) verbunden. Ich habe den Verbrauch der gesamten 
Schaltung gemessen und nicht nur den Verbrauch des µC.

Joachim B. schrieb:
> Lukas D. schrieb:
>> in den Sleepmode
>> geschickt
>
> in welchen?

Ich habe den "Arduino" mit dieser Zeile :
1
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 in den "Power-Down"-Modus geschickt.

Joachim B. schrieb:
> aber erst nach dem korrekten Aufwachen und Betrieb aufnehmen!

Was bedeutet nach dem korrekten Aufwachen? Ich habe zwar gesehen, dass 
der µC nicht sofort bereit ist, jedoch bin ich mir nicht sicher wie 
lange ich im Code eine Pause machen muss. Reichen da 100 Millisekunden? 
(Das habe ich bis jetzt nicht berücksichtigt ;) )

Joachim B. schrieb:
> ??? wieso und warum 20s

Weil ich, wie oben schon im Code erwähnt, die RTC dazu gebracht habe 
alle 20 Sekunden ein Interrupt auszulösen um zu testen ob es 
funktioniert.
1
//Set an alarm at every 20th second of every minute.
2
  RTC.setAlarm(ALM1_MATCH_SECONDS, 20, 0, 0, 1);    //daydate parameter should be between 1 and 7
3
  RTC.alarm(ALARM_1);                   //ensure RTC interrupt flag is cleared
4
  RTC.alarmInterrupt(ALARM_1, true);

Joachim B. schrieb:
> kann er überhaupt auch ohne Interrupt schreiben?

Also, wenn ich den Controller immer an lasse und dauerhaft die Zeit 
überprüfe kann er bei einer bestimmten Uhrzeit die Aktuelle Temperatur 
mit Datum und Uhrzeit auf die SD-Karte Schreiben. Diese Funktion habe 
ich 1 zu 1 aus meinem ersten Sketch ohne Sleepmode und Interrupt 
übernommen.


Ich hoffe jetzt ist zumindest ein kleiner Teil besser verständlich und 
es kann mir hoffentlich auch jemand helfen.


PS.: Habt ein bisschen Verständnis für meine Unordnung und für meine 
teilweise blöden Fragen!

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Ich hoffe jetzt ist zumindest ein kleiner Teil besser verständlich und
> es kann mir hoffentlich auch jemand helfen.

wird schwer, mache mal einen Ablaufplan!


Lukas D. schrieb:
> Ich habe jetzt den Controller in der Setup-Funktion in den Sleepmode
> geschickt

ist mir merkwürdig!

Ein normaler µC Start sollte doch so aussehen,

er startet, entweder aus powerON oder aus Reset!

Dann kommt die Startroutine oder Setup, dort werden die Register gesetzt 
für IRQ, Ports, usw.

In der Setuproutine würde ich doch nie einen AVR in den sleep schicken!

Dann folgt nach dem Setup normalerweise eine while(1){} Schleife, bei 
Arduino loop{}

in dieser Schleife findet doch alles statt, Zeiten und Ereignisse prüfen 
und darauf Aktionen auszulösen, auch schlafen gehen.

Beispiel hatte ich ja gepostet
Und genau da wacht er auch wieder auf

steckt alles in
UBYTE shutdown(UBYTE _sleep_mode)

wobei UBYTE auf neudeutsch nun uint8_t heissen sollte.

von Lukas D. (programmierer12)


Lesenswert?

Ich habe meinen Code jetzt nochmals überprüft und nach dem Aufbau des 
Sleep-Examples von Arduino.cc geändert. Jetzt funktioniert es soweit! 
Die Schaltung verbraucht jetzt insgesamt 10,4 mA mit kurzen Peaks von 
ca. 14-16 mA beim Schreiben. Sind diese Werte denn einigermaßen in 
Ordnung?

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Das ist ja nicht nur der AVR der versorgt werden muss, sondern auch das
> SD- und RTC-Modul.

Lukas D. schrieb:
> Die Schaltung verbraucht jetzt insgesamt 10,4 mA mit kurzen Peaks von
> ca. 14-16 mA beim Schreiben.

mit SD dauerhaft versorgt und RTC hört sich das plausibel an.

Man könnte vor dem Sleep auch die SD abschalten und die RTC, wer Strom 
sparen will sollte das machen.
Die RTC sollte dann nur aus ihrer backup Zelle laufen
Eine SD nach dem Speichern und überprüfen der geschriebenen Daten kann 
auch abgeschaltet werden.

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> mit SD dauerhaft versorgt und RTC hört sich das plausibel an.
>
> Man könnte vor dem Sleep auch die SD abschalten und die RTC, wer Strom
> sparen will sollte das machen.
> Die RTC sollte dann nur aus ihrer backup Zelle laufen
> Eine SD nach dem Speichern und überprüfen der geschriebenen Daten kann
> auch abgeschaltet werden.

Da bin ich aber beruhigt, dass wenigstens meine Werte plausibel 
erscheinen!!
Die Module nur zum Schrieben bzw. Lesen mit Strom zu versorgen wäre 
jetzt der nächste Schritt. Ich denke die Module lassen sich recht 
einfach per Transistor schalten. Ein Einschalten sobald der Interrupt 
erkannt wird sollte eigentlich reichen oder?

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Ich denke die Module lassen sich recht
> einfach per Transistor schalten

Die RTC kann direkt aus einem Port versorgt werden, da brauchts bei dem 
geringen Strom keinen Transistor.

Nur sollte der Port vor dem sleep ausgeschaltet werden.
Erst auf low (dann wer mag auf Input)
nach dem wakeup auf Output und high

Bei der SD bin ich unsicher, bis 20mA geht ja auch locker aus dem Port, 
aber wenn die mehr braucht? Es gibt sehr große stromhungrige SD und 
deiner 10-20mA Messung traue ich nicht, du siehst nur Mittelwerte, je 
nach Messgerät um 100ms bis 330ms und keinen Echteffektivwert!
Die Peaks können bis über 40mA reichen.

Eine SD könnte man sogar aus einem Emitterfolger +Diode speisen wenn der 
Atmel mit 5V läuft, spart die VCC SD Spannungsanpassung

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> Die RTC kann direkt aus einem Port versorgt werden, da brauchts bei dem
> geringen Strom keinen Transistor.

Da habe ich aktuell keine Infos drüber aber da meine beiden Module 
direkt miteinander verbunden sind macht es finde ich Sinn beide gleich 
über einen Transistor zu schalten nur um auf Nummer sicher zu gehen :) .

Joachim B. schrieb:
> Nur sollte der Port vor dem sleep ausgeschaltet werden.
> Erst auf low (dann wer mag auf Input)
> nach dem wakeup auf Output und high

Danke für den Tipp, wahrscheinlich hätte ich das ganz vergessen. Ich 
werde das auf jeden Fall morgen so umsetzen, dann werde ich mich nochmal 
melden, wie es gelaufen ist. Da werden bestimmt noch Probleme auftauchen 
;)

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Da habe ich aktuell keine Infos drüber aber da meine beiden Module
> direkt miteinander verbunden sind macht es finde ich Sinn beide gleich
> über einen Transistor zu schalten nur um auf Nummer sicher zu gehen :) .

zusammen aus einem Port schalten wäre OK, aber je nach dem welches RTC 
Modul ist es nicht sinnvoll über einen Trnasistor zu gehen.

Die evtl. vorhandene Ladeschaltung für LiR2032 braucht 5V, da würde der 
Transtor ja klauen, aber wenn der Arduino mit 5V läuft speist der Port 
die RTC direkt, und am gleichen Port die Basis vom NPN, der Collector 
nauch VCC, der Emitter bekommt noch eine Diode in Durchlassrichtung und 
dannn an VCC von der SD.

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> Lukas D. schrieb:
>> Da habe ich aktuell keine Infos drüber aber da meine beiden Module
>> direkt miteinander verbunden sind macht es finde ich Sinn beide gleich
>> über einen Transistor zu schalten nur um auf Nummer sicher zu gehen :) .
>
> zusammen aus einem Port schalten wäre OK, aber je nach dem welches RTC
> Modul ist es nicht sinnvoll über einen Trnasistor zu gehen.
>
> Die evtl. vorhandene Ladeschaltung für LiR2032 braucht 5V, da würde der
> Transtor ja klauen, aber wenn der Arduino mit 5V läuft speist der Port
> die RTC direkt, und am gleichen Port die Basis vom NPN, der Collector
> nauch VCC, der Emitter bekommt noch eine Diode in Durchlassrichtung und
> dannn an VCC von der SD.

Ich habe jetzt die RTC durchgehend immer verbunden und schalte das 
SD-Modul über einen BC337 Transistor mit 10k Widerstand an der Basis. Da 
kommen am Modul dann noch 4v an, die aber nicht ausreichen um das Modul 
zu betreiben, da die SD-Karte nicht initialisiert wird. Wenn ich den 
VCC-Pin direkt an 5v halte klappt es wunderbar. Was kann ich denn da 
tun? Oder soll ich die SD-Karte direkt über einen Pin vom AVR speisen?

von Joachim B. (jar)


Lesenswert?

Lukas D. schrieb:
> Ich habe jetzt die RTC durchgehend immer verbunden und schalte das
> SD-Modul über einen BC337 Transistor mit 10k Widerstand an der Basis. Da
> kommen am Modul dann noch 4v an, die aber nicht ausreichen um das Modul
> zu betreiben, da die SD-Karte nicht initialisiert wird.

Die Schaltung möchte ich gerne von dir gemalt sehen und auch als Bild

SD Karten werden normnalerweise mit 3,3V betrieben, warum es mit 4V 
nicht gehen soll wenn es angeblich mit 5V geht ist mir ein Rätsel, oder 
sind da schon Pegelanpassungen dabei?

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> SD Karten werden normnalerweise mit 3,3V betrieben, warum es mit 4V
> nicht gehen soll wenn es angeblich mit 5V geht ist mir ein Rätsel, oder
> sind da schon Pegelanpassungen dabei?

Auf dem Modul ist eine Pegelanpassung von 5v auf 3,3v mit drauf. Ich 
habe jetzt den Transistor nochmal umgangen und die SD-Karte wieder fest 
verbunden. Jetzt brauche ich im Sleepmode ca. 9mA und während des 
Schreibens ca. 15-20mA. Wie kann ich denn ausrechnen wie groß mein Akku 
sein muss, damit er eine Woche oder länger hält?

von Freakazoid (Gast)


Lesenswert?

Ich hab mal gelesen dass es auch möglich ist 2 Ports zusammenschalten. 
Stimmt das?
Dann hättest er 5V/40mA sicher.

Sonst nimm statt dem Transistor einfach einen kleinen Mosfet.

--
Alle ströme addieren und ausrechnen?

von Lukas D. (programmierer12)


Lesenswert?

Jetzt habe ich noch ein viel größeres Problem .... Meine Serielle 
Schnittstelle gibt nur noch S von Start und dann € Zeichen aus und das 
die ganze Zeit. Im Klartext es geht nix mehr :(
Ich habe lediglich die LED von der RTC entfernt, was ja kein Problem 
darstellen sollte. Außerdem musste ich die Zeit neu einstellen, wonach 
dann nichts mehr ging!

von Joachim B. (jar)


Lesenswert?

verbastelt?

liest sich so.....

von avr (Gast)


Lesenswert?

Freakazoid schrieb:
> Dann hättest er 5V/40mA sicher.

40mA reichen aber nicht. SD-Karten können auch kurzzeitig 100mA und mehr 
ziehen. Und dann bricht die Spannung an den Avr-Ports ein.

> Sonst nimm statt dem Transistor einfach einen kleinen Mosfet.

Oder einfach die richtige Schaltung mit einem PNP-Transistor. NPN ist 
hier nicht wirklich geeignet.

von Lukas D. (programmierer12)


Lesenswert?

Joachim B. schrieb:
> verbastelt?
>
> liest sich so.....

Was heißt hier verbastelt? Klar kann das sein aber ich wüste nicht wo! 
Ich habe ja baulich eigentlich nix relevantes verändert!

von Freakazoid (Gast)


Lesenswert?

Hey Danke. Wieder was gelernt. :)

--
Also an der ausgelöteten led kann es kaum liegen. Ist doch bestimmt nur 
wieder einer von diesen facepalm Momenten die wohl jeder Bastler 
kennt.
Geh nochmal alles durch.

von Philipp K. (philipp_k59)


Lesenswert?

Gehe nicht über den Plan..Besorg Dir nen 32khz Quarz, geh in den 
Powersave, zähle die Sekunden selbst und nicht über ds3231.. wenn alles 
funktioniert hat,zeigt Dein Multimeter nix mehr an weil es nicht genau 
genug ist.

von Lukas D. (programmierer12)


Lesenswert?

Philipp K. schrieb:
> Gehe nicht über den Plan..Besorg Dir nen 32khz Quarz, geh in den
> Powersave, zähle die Sekunden selbst und nicht über ds3231.. wenn alles
> funktioniert hat,zeigt Dein Multimeter nix mehr an weil es nicht genau
> genug ist.

Wie stellst du dir das vor? Soll ich den Atmega328 nehmen und statt des 
16MHz Quarzes einen 32kHz Quarz dranhängen und dann einfach per delay 
oder so die Sekunden zählen bis ich einen Wert schreibe? Da fehlt doch 
dann der Interrupt, der den µC wieder aus dem Powersave/Sleepmode hohlt 
oder?
Ich bin aber für jede Möglichkeit offen, es sollte jedoch ein Datum und 
eine passende Uhrzeit zu jeder Messung zugeordnet werden!

von Philipp K. (philipp_k59)


Lesenswert?

Nein, Du hast das Sleepmode Tutorial also nicht durchgelesen.. erwischt!

Dadrin nennt sich das PowerSave Mode und steht im dritten Absatz oder 
so.

Du arbeitest auf ausreichenden 1-4Mhz internem Takt und haust den 32.768 
an den richtigen Port.. Dann kannst Du das komplette Beispiel aus dem 
Tutorial nehmen und nen long hochzählen anstatt eine Led blinken 
zulassen.

Ich meine es gibt eine Variable im AVR da steht das Flashdatum/Zeit 
drin.. bei der Ausgabe kannst du die in eine Unixtime umrechnen und auf 
deine gespeicherten sekunden draufrechnen. Laut dem "Sleepmode Artikel" 
sind das nur 10μA auf dauer ohne extras.

Steht da im Prinzip alles drin.. ist aber nur Theorie denn ich habe mir 
die 32khz Teile erst heute bestellt.

: Bearbeitet durch User
von DokuLeseVerweigerer (Gast)


Lesenswert?

Lukas D. schrieb:
> Da fehlt doch
> dann der Interrupt, der den µC wieder aus dem Powersave/Sleepmode holt
> oder?
Nöö...
Der geschickte Programmierer kann das schon so einrichten!

von Joachim B. (jar)


Lesenswert?

Philipp K. schrieb:
> Du arbeitest auf ausreichenden 1-4Mhz internem Takt und haust den 32.768
> an den richtigen Port.. Dann kannst Du das komplette Beispiel aus dem
> Tutorial nehmen und nen long hochzählen anstatt eine Led blinken
> zulassen.

warum sollte er das tun wenn er schon eine DS3231 hat?

von DokuLeseVerweigerer (Gast)


Lesenswert?

Joachim B. schrieb:
> warum sollte er das tun wenn er schon eine DS3231 hat?
z.B. Weil dessen Akku bei 3,6V nicht vernünftig geladen wird?

von Joachim B. (jar)


Lesenswert?

DokuLeseVerweigerer schrieb:
> z.B. Weil dessen Akku bei 3,6V nicht vernünftig geladen wird?

das Problem wäre keines, D1 und R5 raus und CR 2032 einstzen, aber
@DokuLeseVerweigerer

auch den Thread nicht gelesen?

er hat doch 5V, wie käme er sonst auf die Idee seine SD Karte mit einer 
Pegelanpassung zu betreiben?

Lukas D. schrieb:
> Auf dem Modul ist eine Pegelanpassung von 5v auf 3,3v

von DokuLeseVerweigerer (Gast)


Lesenswert?

Joachim B. schrieb:
> auch den Thread nicht gelesen?
>
> er hat doch 5V,

Auch den Thread nicht gelesen?

Lukas D. schrieb:
> ich benutze einen Akkupack aus 3
> AAA-Akkus mit je 1,2V also 3,6V.
5V sehen anders aus.

von Joachim B. (jar)


Lesenswert?

DokuLeseVerweigerer schrieb:
> Auch den Thread nicht gelesen?
>
> Lukas D. schrieb:
>> ich benutze einen Akkupack aus 3
>> AAA-Akkus mit je 1,2V also 3,6V.
> 5V sehen anders aus.

was kann ich dafür wenn er an anderer Stelle anders schreibt, ich bin 
raus hier solange der TO keinen echten Plan und genaue Beschreibung 
vorlegt.

Kann doch nicht sein, erst hü und dann hott, wo san mer denn

: Bearbeitet durch User
von DokuLeseVerweigerer (Gast)


Lesenswert?

Joachim B. schrieb:
> Kann doch nicht sein, erst hü und dann hott, wo san mer denn

Doch doch, genau so ist das Leben!
Ein Zirkus....

Zum Problem an sich:
1. Irgendeinen AVR beschaffen
2. Irgendeine Spannungsquelle beschaffen
3. Irgendeine SD Karte mit Halter
4. Irgendeine Uhr

Und jetzt soll der ganze Kram zusammen spielen!
Leider erweist es sich dabei oft, dass ein paar winzige Randbedingungen 
nicht ausreichend beachtet wurden.
Die kommen natürlich hier nicht sofort zum Vorschein...
Wie auch, wenn Lukas D. um die Wichtigkeit der Randbedingungen gewusst 
hätte, hatte er vermutlich anderes Material beschafft.

Aber jetzt haben wir einen Teil der Probleme ja immerhin schon mal 
benannt!
Inclusive einigen Lösungsansätzen.

von Lukas D. (programmierer12)


Lesenswert?

Tut mir jetzt wirklich leid, dass hier ein paar Sachen nicht 
zusammenpassen ...
Ihr habt mir mit meinem ursprünglichen Problem echt weitergeholfen. Es 
hat ja soweit funktioniert und mit dem Verbrauch war ich auch recht 
zufrieden, doch jetzt geht Garnichts mehr. Wenn ich das jetzt wieder zum 
Laufen bekommen würde hätte sich das ganze Problem erübrigt!!!

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.