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
ATTiny85 sleep time
21.01.2020, 08:53
Beitrag #1
ATTiny85 sleep time
Moin,
ich bräuchte mal einen Tipp. Mit diesem kleinen Programm schalte ich etwas für 14 Sekunden ein und danach wieder aus. Dies wiederholt sich alle 10 Minuten.

Code:
#define WAIT_MINUTES 10
#define PIN_OUT 2
#define LED_PIN 1
#include <avr/sleep.h>

void setup() {

  pinMode(PIN_OUT, INPUT);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  digitalWrite(PIN_OUT, LOW);

  noInterrupts();

  // write clock prescaler for 250 Khz
  CLKPR = 0x80;
  CLKPR = 0x06;
  interrupts();

  // Disable ADC and Analog Comparator peripherials
  ADCSRA = 0x00;
  ACSR = 0x80;

  // Shuts down the ADC and USI peripherials while in sleep mode
  PRR = 0x03;
}

void loop() {

                static unsigned long previousMillis = 0;
                unsigned long currentMillis = millis();
                 if (currentMillis - previousMillis >= (WAIT_MINUTES * 60 * 250UL)) {
                                                if (digitalRead(PIN_OUT) == LOW) {
                                                digitalWrite(LED_PIN, HIGH);
                                                pinMode(PIN_OUT, OUTPUT);                
                                                digitalWrite(PIN_OUT, HIGH);
                                                delay(3500);          //  x4 seconds
                                                digitalWrite(PIN_OUT, LOW);
                                                digitalWrite(LED_PIN, LOW);                  
                                                // start over
                                                pinMode(PIN_OUT, INPUT);

                               }
                               previousMillis = currentMillis;
                }
               set_sleep_mode(SLEEP_MODE_IDLE);
               sleep_mode();

}

Es funktioniert seit Monaten gut, nur möchte ich nun die 10 Minuten auf 20 ändern. Leider funktioniert alles andere als 10 nicht wirklich, selbst 11 nicht.
Der ATTiny85 wird mit 250 kHz betrieben, daher das x4 als Kommentar.

In der ArduinoIDE habe ich 1MHz ausgewählt und um Strom zu sparen, auf 250 kHz gedrosselt.

Warum funktionieren die 10 Minuten auf die Sekunde genau, aber alles andere nicht?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2020, 10:58
Beitrag #2
RE: ATTiny85 sleep time
Probiere mal eine andere Reihenfolge: 250UL * 60 * WAIT_MINUTES

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2020, 11:16
Beitrag #3
RE: ATTiny85 sleep time
Danke für die Antwort, werde ich heute Abend ausprobieren.

Nur mal für Dumme, was hat die Reihenfolge für eine Auswirkung?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2020, 20:45
Beitrag #4
RE: ATTiny85 sleep time
Was soll ich sagen, es funktioniert mit der anderen Reihenfolge....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2020, 20:50
Beitrag #5
RE: ATTiny85 sleep time
Prima und danke für die Rückmeldung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.01.2020, 14:19
Beitrag #6
RE: ATTiny85 sleep time
(21.01.2020 11:16)hYtas schrieb:  Nur mal für Dumme, was hat die Reihenfolge für eine Auswirkung?

Noch mal die Frage, warum funktioniert es nun?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.01.2020, 14:59
Beitrag #7
RE: ATTiny85 sleep time
(22.01.2020 14:19)hYtas schrieb:  Noch mal die Frage, warum funktioniert es nun?
Weil die Berechnung von links nach rechts ausgeführt wird und deshalb eine andere Variablengröße als int gleich am Anfang eingestellt werden muss (250UL).

UL ==> unsigned long

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.01.2020, 15:26
Beitrag #8
RE: ATTiny85 sleep time
Ah ok, die Erklärung habe ich vermisst, danke Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  sleep Libary huber5093 4 511 15.07.2020 20:11
Letzter Beitrag: Tommy56
  Programm läuft auf UNO aber nicht auf ATTINY85 Diwo13 55 4.764 17.12.2019 17:45
Letzter Beitrag: Diwo13
  attiny85 und PIEZO Buzzer / Speaker Thor Wallhall 6 843 16.11.2019 21:14
Letzter Beitrag: Thor Wallhall
  Sleep Modus aktivieren (Reed-Switch Falle) Wochenendprogrammierer 20 2.640 01.07.2019 21:16
Letzter Beitrag: hotsystems
  Probleme Mit Sleep Hoeuzitry 1 1.024 20.04.2019 22:36
Letzter Beitrag: Chopp
  Attiny85 zu wenig Speicher Harry 36 5.083 20.01.2019 16:15
Letzter Beitrag: Harry
  ISR Attiny und Sleep Harry 0 1.013 19.01.2019 20:37
Letzter Beitrag: Harry
  Attiny85 mit I2C LCD Harry 9 2.671 07.01.2019 18:33
Letzter Beitrag: Tommy56
  Attiny85 sleep Harry 2 1.322 27.12.2018 19:21
Letzter Beitrag: Harry
  Keine Tonübertragung mit ATtiny85 möglich delay 7 1.617 08.12.2018 20:49
Letzter Beitrag: georg01

Gehe zu:


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