mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Spannungsversorgungs Probleme!


Autor: Zagros Botan (zagros17)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Ich habe eine Schaltung aufgebaut, welches ich mit dem CR2477 LI-IOn 
Batterie versorgen möchte und es soll so lange halten wie möglich. Die 
Schaltung Läuft einwandfrei, wenn 3V Spannung angelegt sind. Die 
Batterie entlädt sie sich zu schnell bis zur 2,7 und die Schaltung ist 
nach 10 min stillgelegt.
Jedoch muss ich sagen, dass ich zum Test zwecke es auf Dauerbetrieb 
gehalten hab. Natürlich soll es später 10 bis 20 Mess- und 
Sendeeinheiten Senden. Der restlichen Zeit soll es in Sleep Modus sein. 
Der Mikrocontroller erfasst die Daten von Sensor und gibt es an Sender 
weiter. Es wird gesendet dann bekommt der Sende/ Empfänger einen 
Bestätigungsabfrage die er zum Vollendet der Sendeeinheit tätigen muss. 
Das ist der Ablauf der Sendeeinheit.

Ich benutze einen Sensor MS5803-14BA
https://cdn.sparkfun.com/datasheets/Sensors/Weathe...

Für die Sende und Empfangseinheit diente RFM 22W mit 433 MHz:
https://www.sparkfun.com/datasheets/Wireless/Gener...

Der Mikrocontroller habe ich den ATmega328P genommen.
http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-...

Ich komme leider nicht mehr weiter. Obwohl die vorhandene Spannung alle 
Bauteile betreiben kann wird der Batterie schnell entladen. Ich würde 
mich freuen, wenn ihr mir da weiterhelfen könntet.

Autor: KlausKleber (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
.sch ist eine schei* datei? Damit kann jemand ohne Eagle leider nichts 
anfangen...

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funken kostet sehr viel Energie.

Mein erster Blick sagte mir: Sparsamkeit am falschen Platz!

Also wenn Du Energie sparen willst, so mach das auch.

Natürlich "sparst" Du eine Leiterbahn, in dem Du SDN am RFM24 offen 
lässt, aber ich würde mir mal das Kapitel:
Operating Modes Response Time and Current Consumption
im Handbuch reinziehen!

Muss aber nicht sein.

Was sonst noch im Kleingedruckten steht weiß ich nicht.

Auch den ATMega kann man als Verbraucher ansehen, über die verwendete 
Software schweigt sich Dein Post ja aus. Kenne den Befehlssatz nicht, 
aber ein paar Schnarchoptionen werden wohl auch verfügbar sein.

Auch Dein MS5803-05BA hat einen Stand-by Modus.

Wie gesagt: Muss aber nicht sein...

Autor: Zagros Botan (zagros17)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
KlausKleber schrieb:
> .sch ist eine schei* datei? Damit kann jemand ohne Eagle leider nichts
> anfangen...

Sorry benutze halt eagle aber lade ein Bild hoch. ich hoffe da können 
sie was erkennen.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir noch eingefallen ist:
Möglicherweise reicht eine 1:1 Beschaltung eines Ports zum SDN nicht.
Ich weiß aber nicht, was die Ports des ATMega machen, wenn Schlafenszeit 
angesagt ist. Möglicherweise kommt also zu der Leiterbahn noch ein 
Widerstand gen Masse hinzu.

Ob die Spannungsversorgung wirklich für 24 Bit ausreicht glaube ich 
nicht.

Der µP und der Sender produzieren reichlich "Schmutz" auf den 
Versorgungsleitungen. Da das Teil aber bis hinunter auf 1,8 V betrieben 
werden kann, könnten eine Entkopplung aus Spule und ev. Widerstand (in 
Reihe) und Kondensator (µF - Bereich + Kerko) gegen Masse helfen.

Ist alles "kann" und nicht "muss".

: Bearbeitet durch User
Autor: Zagros Botan (zagros17)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:

> Ich weiß aber nicht, was die Ports des ATMega machen, wenn Schlafenszeit
> angesagt ist.

hier ist mein code leider ist da noch keine schlafenzeit integriert. Ich 
möchte dass er 20 sekunden lang senden und 15 Sekunden schläft.

Ich bin leider nict so gut bei programmieren und habe zwar einen 
lösungansatz gefunden kann die aber nicht in meine Code integrieren.
ich hoffe jemand von euch ist so gütig und kann mir den code 
integrieren.
hier der lösungansatz
http://shelvin.de/arduino-in-den-sleep_mode_pwr_do...
#include <RHReliableDatagram.h>
#include <RH_RF24.h>
#include <SPI.h>
#include <MS5803_05.h>

#define CLIENT_ADDRESS 1
#define SERVER_ADDRESS 2

// Singleton instance of the radio driver
RH_RF24 driver;

// Class to manage message delivery and receipt, using the driver declared above
RHReliableDatagram manager(driver, CLIENT_ADDRESS);

// Single instance of the pressure sensor
MS_5803 sensor = MS_5803(4096);

// stuct of measured data to send 
struct Messung{
  double temperature;
  double pressure;
};



void setup() 
{
  Serial.begin(115200);
  if (!manager.init())
    Serial.println("init failed");
  // Defaults after init are 434.0MHz, modulation GFSK_Rb5Fd10, power 0x10
  if (sensor.initializeMS_5803()) {
    Serial.println( "MS5803 CRC check OK." );
  } 
  else {
    Serial.println( "MS5803 CRC check FAILED!" );
  }
  delay(100);
}

uint8_t data[] = "Hello World!";
// Dont put this on the stack:
uint8_t buf[RH_RF24_MAX_MESSAGE_LEN];

void loop()
{
  Messung m, m1,m2,m3,m4,m5;

  // Read sensor data 5 times
  sensor.readSensor();
  m1.temperature=sensor.temperature();
  m1.pressure=sensor.pressure();
  
  sensor.readSensor();
  m2.temperature=sensor.temperature();
  m2.pressure=sensor.pressure();
  
  sensor.readSensor();
  m3.temperature=sensor.temperature();
  m3.pressure=sensor.pressure();
  
  sensor.readSensor();
  m4.temperature=sensor.temperature();
  m4.pressure=sensor.pressure();
  
  sensor.readSensor();
  m5.temperature=sensor.temperature();
  m5.pressure=sensor.pressure();

  // Average of temperature
  m.temperature = (m1.temperature+m2.temperature+m3.temperature+m4.temperature+m5.temperature)/5.0;
  // Average of pressure
  m.pressure = (m1.pressure+m2.pressure+m3.pressure+m4.pressure+m5.pressure)/5.0;

  //Serial.print("Temperatur: ");
  Serial.println(m.temperature);
  //Serial.print("Druck: ");
  Serial.println(m.pressure);

  // byte array for sending data
  uint8_t payload[sizeof(struct Messung)];
  // copy struct of measurement to byte array for sending
  memcpy(payload,&m,sizeof(m));
  
  Serial.println("Sending to rf24_reliable_datagram_server");
    
  // Send a message to manager_server
  if (manager.sendtoWait(payload, sizeof(payload), SERVER_ADDRESS))
  {
    // Now wait for a reply from the server
    uint8_t len = sizeof(buf);
    uint8_t from;   
    if (manager.recvfromAckTimeout(buf, &len, 2000, &from))
    {
      Serial.print("got reply from : 0x");
      Serial.print(from, HEX);
      Serial.print(": ");
      Serial.println((char*)buf);
    }
    else
    {
      Serial.println("No reply, is rf24_reliable_datagram_server running?");
    }
  }
  else
    Serial.println("sendtoWait failed");
  delay(1000);
}

Autor: Sebastian S. (amateur)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wie ein Mensch macht ein batteriebetriebener µP ohne Pausen sehr bald 
schlapp.

In wie fern der Arduino, bzw. dessen Entwicklungsumgebung, die 
Energiesparzustände unterstützt, weiß ich nicht. Wichtig ist aber: 
Dauerzustand alles aus.

In den gewünschten Intervallen den µP aufwecken der dann seinerseits die 
jeweilige Peripherie kurz in Betrieb nimmt. Sofort, wenn nichts zu tun 
ist: In den Ruhezustand versetzen.
So wird es z.B. kaum der Fall sein, in dem der Sensor und der Sender in 
Betrieb sind. Außerdem ist so etwas mehr Ruhe auf der 
Versorgungsspannung.

Die hier sinnvolle Reihenfolge, nach dem Aufwachen, ist wohl:
Sensor an.
Wartezeit lt. Datenblatt. Falls vorhanden.
In den Speicher messen.
Sensor aus.
Sender an.
Die Einschaltzeit zum Aufbereiten der Messwerte nutzen. Falls nötig.
Daten senden.
Sender aus.
Ab in die Heia.
Übrigens, soll auch noch empfangen werden, so reicht es aus den 
Empfänger alle paar Sekunden kurz in Betrieb zu nehmen. Oft haben die 
Befehlsgeber oder sogar ein PC/Schlapptopf genügend Energie um ein paar 
Sekunden dauernd zu senden.
Das Sendemodul sollte, wenn es sowieso in Betrieb ist, auch mal kurz auf 
Empfang umschalten. So die Energiebilanz hierbei positiv ist.

Man sieht also, wenn es auf eine effektive Energiebilanz ankommt, sollte 
der gesamte Programmablauf zeitgesteuert/zeitgeplant erfolgen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.