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
Stromsparender Microkontroller für Akkubetrieb
18.11.2020, 21:32 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2020 21:34 von louard.)
Beitrag #25
RE: Stromsparender Microkontroller für Akkubetrieb
Also ich habe das ganze jetzt so umgeschrieben bzw. hier aus dem Internet kopiert,
das der Arduino alle 10s aufwacht und überprüft ob ein Signal empfangen wird .
Das funktioniert und verbraucht wenig Strom. ich kann im Moment nicht sagen wie viel genau, weil mein Multimeter seit neustem nicht mehr im mA Bereich, sondern nur im A Bereich messen kann(neues sollte bald ankommen) aber in der Sleep Phase zeigt es 0.000 an das bedeutet, wenn man sich noch auf die Messung verlassen kann unter 1mA.
Hier der Sketch:
Code:
#include <avr/sleep.h>
#include <avr/power.h>
#include "nRF24L01.h" // NRF24L01 library created by TMRh20 https://github.com/TMRh20/RF24
#include "RF24.h"

RF24 radio(8, 9); // NRF24L01 used SPI pins + Pin 9 and 10 on the UNO
int ReceivedMessage[1] = {000}; // Used to store value received by the NRF24L01
const uint64_t pipe = 0xE6E6E6E6E6E6; // Needs to be the same for communicating between 2 NRF24L01

volatile int sleepcounter = 0; // Schlafzyklen mitzählen
int k=0, buzzer=5,board = 2;

void setup() {
  Serial.begin(115200);
  pinMode(buzzer, OUTPUT);
  
  radio.begin(); // Start the NRF24L01
  radio.openReadingPipe(1, pipe); // Get NRF24L01 ready to receive
  radio.startListening(); // Listen to see if information received

  
  watchdogOn(); // Watchdog timer einschalten.
  ADCSRA = ADCSRA & B01111111; // ADC abschalten, ADEN bit7 zu 0
  ACSR = B10000000; // Analogen Comparator abschalten, ACD bit7 zu 1
  DIDR0 = DIDR0 | B00111111; // Digitale Eingangspuffer ausschalten, analoge Eingangs Pins 0-5 auf 1
}

void loop(){
  digitalWrite(buzzer, HIGH);
  delay(100); // delay für serielle Ausgabe
  Serial.println(k);  
  k++;
  delay(100); // delay für serielle Ausgabe beenden
  digitalWrite(buzzer, LOW);
  if(radio.available())
    {
      Serial.println("available");
      radio.read(ReceivedMessage, 1); // Read information from the NRF24L01
      Serial.println(ReceivedMessage[0]);
      if (ReceivedMessage[0] == board) {
        digitalWrite(buzzer, HIGH);
        delay(200);
        digitalWrite(buzzer, LOW);
      }
      else if (ReceivedMessage[0] == 0) {
        digitalWrite(buzzer, HIGH);
        delay(500);
        digitalWrite(buzzer, LOW);
      }
    }
  pwrDown(10); // ATmega328 fährt runter für 10 Sekunden;
}

void pwrDown(int sekunden) {
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // den tiefsten Schlaf auswählen PWR_DOWN
  for(int i=0; i < sekunden; i++) {
    sleep_enable(); // sleep mode einschalten
    sleep_mode(); // in den sleep mode gehen
    sleep_disable(); // sleep mode ausschalten nach dem Erwachen
  }
}

void watchdogOn() {
  MCUSR = MCUSR & B11110111; // Reset flag ausschalten, WDRF bit3 vom MCUSR.
  WDTCSR = WDTCSR | B00011000; // Bit 3+4 um danach den Prescaler setzen zu können
  WDTCSR = B00000110; // Watchdog Prescaler auf 128k setzen > ergibt ca. 1 Sekunde
  WDTCSR = WDTCSR | B01000000; // Watchdog Interrupt einschalten
  MCUSR = MCUSR & B11110111;
}

ISR(WDT_vect) {
  sleepcounter ++; // Schlafzyklen mitzählen
}

Allerdings funktioniert der Sleep Modus des Funk Moduls noch nicht wenn ich ihn so implementiere:
Code:
#include <avr/sleep.h>
#include <avr/power.h>
#include "nRF24L01.h" // NRF24L01 library created by TMRh20 https://github.com/TMRh20/RF24
#include "RF24.h"

RF24 radio(8, 9); // NRF24L01 used SPI pins + Pin 9 and 10 on the UNO
int ReceivedMessage[1] = {000}; // Used to store value received by the NRF24L01
const uint64_t pipe = 0xE6E6E6E6E6E6; // Needs to be the same for communicating between 2 NRF24L01

volatile int sleepcounter = 0; // Schlafzyklen mitzählen
int k=0, buzzer=5,board = 2;

void setup() {
  Serial.begin(115200);
  pinMode(buzzer, OUTPUT);
  
  radio.begin(); // Start the NRF24L01
  radio.openReadingPipe(1, pipe); // Get NRF24L01 ready to receive
  radio.startListening(); // Listen to see if information received
  radio.powerDown();
  
  watchdogOn(); // Watchdog timer einschalten.
  ADCSRA = ADCSRA & B01111111; // ADC abschalten, ADEN bit7 zu 0
  ACSR = B10000000; // Analogen Comparator abschalten, ACD bit7 zu 1
  DIDR0 = DIDR0 | B00111111; // Digitale Eingangspuffer ausschalten, analoge Eingangs Pins 0-5 auf 1
}

void loop(){
  radio.powerUp(); // ---------------------------------------hier wird das Modul aufgeweckt---------------------------------------------------------
  digitalWrite(buzzer, HIGH);
  delay(100); // delay für serielle Ausgabe
  Serial.println(k);  
  k++;
  delay(100); // delay für serielle Ausgabe beenden
  digitalWrite(buzzer, LOW);
  if(radio.available())
    {
      Serial.println("available");
      radio.read(ReceivedMessage, 1); // Read information from the NRF24L01
      Serial.println(ReceivedMessage[0]);
      if (ReceivedMessage[0] == board) {
        digitalWrite(buzzer, HIGH);
        delay(200);
        digitalWrite(buzzer, LOW);
      }
      else if (ReceivedMessage[0] == 0) {
        digitalWrite(buzzer, HIGH);
        delay(500);
        digitalWrite(buzzer, LOW);
      }
    }
  radio.powerDown();                  //---------------------------------------hier wird das Modul runtergefahren--------------------------------------------------
  pwrDown(10); // ATmega328 fährt runter für 10 Sekunden;
}

void pwrDown(int sekunden) {
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // den tiefsten Schlaf auswählen PWR_DOWN
  for(int i=0; i < sekunden; i++) {
    sleep_enable(); // sleep mode einschalten
    sleep_mode(); // in den sleep mode gehen
    sleep_disable(); // sleep mode ausschalten nach dem Erwachen
  }
}

void watchdogOn() {
  MCUSR = MCUSR & B11110111; // Reset flag ausschalten, WDRF bit3 vom MCUSR.
  WDTCSR = WDTCSR | B00011000; // Bit 3+4 um danach den Prescaler setzen zu können
  WDTCSR = B00000110; // Watchdog Prescaler auf 128k setzen > ergibt ca. 1 Sekunde
  WDTCSR = WDTCSR | B01000000; // Watchdog Interrupt einschalten
  MCUSR = MCUSR & B11110111;
}

ISR(WDT_vect) {
  sleepcounter ++; // Schlafzyklen mitzählen
}

Was muss ich ändern, um auch beim Funk Modul mit dem Sleep Modus zu arbeiten?

Zu der Sache die Module, bzw. das Modul mit einem Transistor abzuschalten, würde ich das gerne vermeiden um die Sache möglichst einfach zu halten.

LG louard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 21:41
Beitrag #26
RE: Stromsparender Microkontroller für Akkubetrieb
Mal geprüft, ob im Messgerät eine Sicherung defekt ist ?
Bei vielen Messgeräten ist im kleinen mA-Bereich eine Feinsicherung eingebaut.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 22:06
Beitrag #27
RE: Stromsparender Microkontroller für Akkubetrieb
(18.11.2020 21:41)hotsystems schrieb:  Mal geprüft, ob im Messgerät eine Sicherung defekt ist ?
Bei vielen Messgeräten ist im kleinen mA-Bereich eine Feinsicherung eingebaut.

Daran habe ich auch schon gedacht allerdings ist das Messgerät anscheinend nicht dazu gedacht repariert zu werden und man kann es nicht ohne Gewalt öffnen...

LG louard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 22:19
Beitrag #28
RE: Stromsparender Microkontroller für Akkubetrieb
(18.11.2020 22:06)louard schrieb:  Daran habe ich auch schon gedacht allerdings ist das Messgerät anscheinend nicht dazu gedacht repariert zu werden und man kann es nicht ohne Gewalt öffnen...

Ok, dann ist es eins von denen, wo es sich nicht lohnt, zu reparieren.
Auch keine versteckte Schraube unter einem Aufkleber ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 22:50
Beitrag #29
RE: Stromsparender Microkontroller für Akkubetrieb
Wenn man es nicht öffnen kann, dann ist vermutlich auch keine Sicherung drin. Säge das Teil einfach auf, vielleicht siehst Du was. Wenn ja, und Du kannst es reparieren, mache es und klebe das Gehäuse z. B. mit Tape zu. Dann hast Du ein zweites Instrument, was gelegentlich nützlich ist. Ansonsten, im Müll schadet es nicht, wenn das Gehäuse aufgesägt ist.

Gruß
GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 23:00
Beitrag #30
RE: Stromsparender Microkontroller für Akkubetrieb
(18.11.2020 22:19)hotsystems schrieb:  
(18.11.2020 22:06)louard schrieb:  Daran habe ich auch schon gedacht allerdings ist das Messgerät anscheinend nicht dazu gedacht repariert zu werden und man kann es nicht ohne Gewalt öffnen...

Ok, dann ist es eins von denen, wo es sich nicht lohnt, zu reparieren.
Auch keine versteckte Schraube unter einem Aufkleber ?

Danke für den Hinweis, habe die Schrauben unter einem Gummiüberzug gefunden. Es lag tatsächlich an der Sicherung , die neuen Ergebnisse der Messung verwirren mich, aber ich werde dass morgen nochmal überprüfen.

LG louard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2020, 23:04
Beitrag #31
RE: Stromsparender Microkontroller für Akkubetrieb
(18.11.2020 23:00)louard schrieb:  Danke für den Hinweis, habe die Schrauben unter einem Gummiüberzug gefunden. Es lag tatsächlich an der Sicherung , die neuen Ergebnisse der Messung verwirren mich, aber ich werde dass morgen nochmal überprüfen.

Na prima, das wäre gerettet. Wink

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2020, 18:10
Beitrag #32
RE: Stromsparender Microkontroller für Akkubetrieb
(18.11.2020 23:04)hotsystems schrieb:  
(18.11.2020 23:00)louard schrieb:  Danke für den Hinweis, habe die Schrauben unter einem Gummiüberzug gefunden. Es lag tatsächlich an der Sicherung , die neuen Ergebnisse der Messung verwirren mich, aber ich werde dass morgen nochmal überprüfen.

Na prima, das wäre gerettet. Wink

Ja Big Grin was doch so ein Forum bringt...

LG louard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Akkubetrieb und USB kommunikation gleichzeitig kartoffelsuppe 1 2.506 11.06.2015 21:52
Letzter Beitrag: Thorsten Pferdekämper
  Stromsparender Mikrocontroller Xtremefly 1 2.015 12.03.2015 10:41
Letzter Beitrag: Xtremefly

Gehe zu:


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