Forum: Mikrocontroller und Digitale Elektronik Attiny: LED aus durch Sleepmode


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Sven H. (Gast)


Lesenswert?

Hallo,

ich habe eine einfache Schaltung: An einen Attiny ist eine LED und ein 
Taster angeschlossen. Beim Betätigen des Tasters geht die LED an. Über 
millis() ist ein einfacher "Timer" realisiert, der die LED nach 10 
Sekunden wieder ausschaltet. Die Ungenauigkeit dieser Lösung spielt 
keine Rolle.

Alternativ lässt sich die LED auch per Taster wieder ausschalten.
1
const int SwitchPin = 3;   
2
const int LEDPin =  4;
3
boolean aktButton, altButton, aktiv;
4
unsigned long startTime;
5
const unsigned long interval = 10 * 1000;  // 10 Sekunden Timer
6
7
void setup() {
8
  pinMode(LEDPin, OUTPUT);   
9
  pinMode(SwitchPin, INPUT_PULLUP);
10
}
11
12
void loop() {
13
  altButton = aktButton;
14
  aktButton = digitalRead(SwitchPin);
15
  
16
  if (altButton && !aktButton)   // wenn Taster gedrückt wurde...
17
  {
18
    aktiv = !aktiv;
19
    delay(100);
20
    startTime = millis();    // für den Timer
21
  }
22
  
23
  if (!altButton && aktButton)   // wenn Taster losgelassen wurde...
24
  { // was passieren soll, wenn Taster losgelassen wird könnte hier stehen
25
    delay(100);
26
  }
27
   
28
  if (aktiv == true) {
29
    if (millis() - startTime < interval) { // wenn die Zeit noch nicht abgelaufen ist...
30
      digitalWrite(LEDPin, HIGH);
31
    }
32
    else {  // wenn die Zeit bereits abgelaufen ist
33
      aktiv = false;
34
    }
35
  }
36
  else {    // wenn aktiv == false
37
    digitalWrite(LEDPin, LOW);
38
  }
39
}

Jetzt versuche ich, das Abschalten der LED einfach durch einen Sleepmode 
zu ersetzen. Per Taster soll der Sleepmode dann wieder beendet werden 
und die LED wieder eingeschaltet werden.
1
#include <avr/sleep.h>
2
3
const int SwitchPin = 3;   
4
const int LEDPin =  4;
5
boolean aktButton, altButton, aktiv;
6
unsigned long startTime;
7
const unsigned long interval = 10 * 1000;  // 10 Sekunden Timer
8
9
void INT_PINisr(void)
10
{
11
  /* detach Interrupt, damit er nur einmal auftritt */
12
  detachInterrupt(digitalPinToInterrupt(SwitchPin))
13
}
14
15
void enter_sleep(void)
16
{
17
  attachInterrupt(0, INT_PINisr, LOW);
18
  /* Arduino schlafen legen */
19
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
20
  sleep_enable();
21
  sleep_mode();
22
  sleep_disable(); 
23
}
24
25
void setup() {
26
  pinMode(LEDPin, OUTPUT);   
27
  pinMode(SwitchPin, INPUT_PULLUP);
28
}
29
30
void loop() {
31
  altButton = aktButton;
32
  aktButton = digitalRead(SwitchPin);
33
  
34
  if (altButton && !aktButton)   // wenn Taster gedrückt wurde...
35
  {
36
    aktiv = !aktiv;
37
    delay(100);
38
    startTime = millis();    // für den Timer
39
  }
40
  
41
  if (!altButton && aktButton)   // wenn Taster losgelassen wurde...
42
  { // was passieren soll, wenn Taster losgelassen wird könnte hier stehen
43
    delay(100);
44
  }
45
   
46
  if (aktiv == true) {
47
    if (millis() - startTime < interval) { // wenn die Zeit noch nicht abgelaufen ist...
48
      digitalWrite(LEDPin, HIGH);
49
    }
50
    else {  // wenn die Zeit bereits abgelaufen ist
51
      aktiv = false;
52
    }
53
  }
54
  else {    // wenn aktiv == false
55
    //digitalWrite(LEDPin, LOW);
56
    enter_sleep();
57
  }
58
}

Problem: Es funktioniert nicht. Er geht nichtmal in den Sleep Mode, die 
LED leuchtet nach Ablauf des "Timers" weiter. Ich hab das Beispiel schon 
vereinfacht und auf den Interrupt verzichtet, aber enter_sleep() scheint 
nicht zu funktionieren.

von Holger L. (max5v)


Lesenswert?

Sieht nach einer Mischung von Arduino und GCC aus?
Was auffällt ist das die Interrupts nicht freigegeben sind:

#include <avr/interrupt.h>
sei(); Interrupts aktiv
cli(); Interrupts inaktiv

von Peter D. (peda)


Lesenswert?

Hier mal ein Sleep Beispiel:

Beitrag "AVR Sleep Mode / Knight Rider"

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Alle Ausgänge bleiben im Sleep Modus aktiv.

Dein "digitalWrite(LEDPin, LOW)" ist daher weiterhin nötig.

von Peter D. (peda)


Lesenswert?

Sven H. schrieb:
> An einen Attiny

Welcher denn?

Für attachInterrupt solltest Du auch noch sagen, welches Board.

https://www.arduino.cc/reference/de/language/functions/external-interrupts/attachinterrupt/

von Sven H. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Alle Ausgänge bleiben im Sleep Modus aktiv.
>
> Dein "digitalWrite(LEDPin, LOW)" ist daher weiterhin nötig.

Krass, ich bin natürlich davon ausgegangen, es wäre dann alles aus. Das 
hieße ja, ich könnte - wenn der Timer so 30 Minuten laufen soll - in den 
Sleep Mode gehen und nur alle 5 Minuten per Watchdog aufwachen, 
überprüfen ob Timer die 30 Minuten schon erreicht hat, und ihn wieder 
schlafen legen - und spare damit noch mehr Energie(?)

Sorry für die Unbedarftheit, ich durchforste seit gestern das Netz nach 
Infos über den Sleep Mode und habe trotzdem das Gefühl, ich habs noch 
nicht verstanden. Daher besten Dank!

Peter D. schrieb:
> Sven H. schrieb:
>> An einen Attiny
>
> Welcher denn?
>
> Für attachInterrupt solltest Du auch noch sagen, welches Board.
>
> 
https://www.arduino.cc/reference/de/language/functions/external-interrupts/attachinterrupt/

Attiny13A! :-)

Lg

von S. Landolt (Gast)


Lesenswert?

> ich durchforste seit gestern das Netz nach Infos über den Sleep Mode

Stattdessen erstmal das Datenblatt "durchforsten"? Als Primärquelle?

> ich bin natürlich davon ausgegangen, es wäre dann alles aus.

7.4.6 Port Pins
When entering a sleep mode, all port pins should be configured to use 
minimum power. The most important thing is then to ensure that no pins 
drive resistive loads.

von Stefan F. (Gast)


Lesenswert?

Sven H. schrieb:
> Das hieße ja, ich könnte ... und spare damit noch mehr Energie(?)

Ja könntest du. Oder nur die Taktfrequenz reduzieren, das spart nämlich 
auch eine Menge und hat weniger Seiteneffekte.

Bein ATtiny13A kann man zusätzlich den ADC abschalten, das macht auch 
noch ca. 300 nA aus. Auch das passiert im Sleep Modus nicht automatisch, 
soweit ich weiß.

von S. Landolt (Gast)


Lesenswert?

> zusätzlich den ADC abschalten
Ist der denn eingeschaltet?

Überhaupt sollte Sven H. das ganze Kapitel '7. Power Management and 
Sleep Modes' lesen; wenn es um Energiesparen geht speziell '7.4 
Minimizing Power Consumption'.

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
> Ist der denn eingeschaltet?

Standardmäßig ja.

von S. Landolt (Gast)


Lesenswert?

> Standardmäßig ja.

Aha. Nun gut, ich kenne den Arduino nicht.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

S. Landolt schrieb:
>> Standardmäßig ja.
> Aha. Nun gut, ich kenne den Arduino nicht.

Du meinst den ATtiny13A, das ist kein Arduino. Der gezeigte Motor ist 
auch kein Auto.

von S. Landolt (Gast)


Lesenswert?

> Du meinst den ATtiny13A
Eben! Was hat das jetzt mit einem Auto zu tun?

Wenn in der Arduino-Umgebung der ADC standardmäßig eingeschaltet ist, 
okay. Im nackten ATtiny13A ist er es nicht.

von realist (Gast)


Lesenswert?

S. Landolt schrieb:
> Eben! Was hat das jetzt mit einem Auto zu tun?

Es ging die ganze Zeit um den Tiny13A.
Und du sagst "Ich kenne den Arduino nicht".

Deshalb der Wink mit dem Zaunpfahl von Stefan...

von S. Landolt (Gast)


Lesenswert?

an realist:
Ich dachte, wegen void setup() und void loop(), und auch andere waren 
wohl dieser Meinung.

Also bleibt es dabei: im ATtiny13A ist der ADC nach einem Reset nicht 
eingeschaltet - Kapitel 7.4 lesen: '7.4.1 Analog to Digital Converter: 
If enabled, the ADC will be enabled in all sleep modes'.
IF ...

von S. Landolt (Gast)


Lesenswert?

PS:
Im Gegensatz zum AC - vielleicht meinte Stefan Frings ja diesen.

von realist (Gast)


Lesenswert?

S. Landolt schrieb:
> Ich dachte, wegen void setup() und void loop(), und auch andere waren
> wohl dieser Meinung.

Der allererste Satz des TO lautete:
Sven H. schrieb:
> ich habe eine einfache Schaltung: An einen Attiny ist eine LED und ein
> Taster angeschlossen.

Und nirgendwo wurde ein Arduino erwähnt.
Nur weil jemand mit der Arduino-Software arbeitet, heißt das nicht, daß 
ein Arduino-Board im Spiel ist, oder sehe ich das falsch?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

S. Landolt schrieb:
>> Du meinst den ATtiny13A
> Eben! Was hat das jetzt mit einem Auto zu tun?

Der ATtiny13A entspricht dem kleinen Motor. "Der Arduino" entspricht dem 
Auto (z.B. "der Ford"), welches aus mehr als einem Motor besteht und 
zudem ist es ein wesentlich größerer.

S. Landolt schrieb:
> Wenn in der Arduino-Umgebung der ADC standardmäßig eingeschaltet ist,
> okay. Im nackten ATtiny13A ist er es nicht.

doch, siehe Screenshot vom Datenblatt.

von S. Landolt (Gast)


Lesenswert?

> doch,

Das sehe ich anders - der 'initial value' von ADCSRA.ADEN ist 0.

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
>> doch,
> Das sehe ich anders - der 'initial value' von ADCSRA.ADEN ist 0.

Schau dir doch bitte wenigstens den Screenshot an, den ich für dich 
gemacht habe. Du bist da beim falschen Register.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> S. Landolt schrieb:
>> Wenn in der Arduino-Umgebung der ADC standardmäßig eingeschaltet ist,
>> okay. Im nackten ATtiny13A ist er es nicht.
>
> doch, siehe Screenshot vom Datenblatt.

Ihr habt irgendwie beide Recht. Der ADC ist per default inaktiv, aber 
Teile seines analogen Geraffels sind durchaus aktiv, inbesondere auch 
die mit anderen analogen Baugruppen geteilten, sprich: den AC(s).

Das gilt übrigens im Prinzip für alle AVR8. Bei den neueren mit PRR kann 
man nun auch noch dieses analoge Geraffel abschalten.

von S. Landolt (Gast)


Lesenswert?

Also ich weiß ja nicht - ich habe keinen ATtiny13A, aber beim ATtiny85 
fließen im Power-down-Modus 0.48 uA, egal ob PRR angefasst wurde oder 
nicht.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Also ich weiß ja nicht - ich habe keinen ATtiny13A, aber beim ATtiny85
> fließen im Power-down-Modus 0.48 uA, egal ob PRR angefasst wurde oder
> nicht.

An welchem Potential lagen die IO-Pins bei der Messung?

von S. Landolt (Gast)


Lesenswert?

> An welchem Potential lagen die IO-Pins bei der Messung?
?
Offen.
'In sleep modes where both the I/O clock (clkI/O) and the ADC clock 
(clkADC) are stopped, the input buffers of the device will be disabled. 
This ensures that no power is consumed by the input logic when not 
needed.'
Folglich sind es immer noch 0.48 uA, auch wenn ich PORTB komplett auf 1 
setze.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> 'In sleep modes where both the I/O clock (clkI/O) and the ADC clock
> (clkADC) are stopped, the input buffers of the device will be disabled.

Was den Schluss zuläßt, dass die Wirkung des PRR-Bits wohl auf die 
Sleepmodi beschränkt sein wird, bei denen einer der beiden Takte noch 
läuft, also beim Tiny85 Idle oder ADC-Noise-Reduction, wovon letzterer 
aus Gründen der praktischen Nützlichkeit wohl in diesem Zusammenhang 
entfällt.

Sprich: du musst im Idle messen (sinnvollerweise bei sehr geringem 
Systemtakt), um den Nutzen des PRR-Bits zu erkennen.

von S. Landolt (Gast)


Lesenswert?

> du musst im Idle messen
Also gut:
5.0 V, 1 MHz: 0.57 mA ohne, 0.53 mA mit PRR.PRADC=1.
Und wenn Sven H. nicht mit dem Watch-dog arbeiten will, benötigt er in 
der Tat den Idle-Modus.

Woher aber Stefan Frings'
> das macht auch noch ca. 300 nA aus
kommen, bleibt mir unklar.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Woher aber Stefan Frings'
>> das macht auch noch ca. 300 nA aus
> kommen, bleibt mir unklar.

Wünsche hochgerechnet auf Messfehler, würde ich mal vermuten.

von EAF (Gast)


Lesenswert?

S. Landolt schrieb:
> The most important thing is then to ensure that no pins
> drive resistive loads.
Das macht natürlich nur Sinn, z.B. wenn die LED im Schlaf auch wirklich 
aus sein soll.




Holger L. schrieb:
> Sieht nach einer Mischung von Arduino und GCC aus?
Arduino ist keine eigene Sprache sondern z.Zt. C++11, mit dem Gcc 
übersetzt.
Also auch keine Mischung.


Holger L. schrieb:
> Was auffällt ist das die Interrupts nicht freigegeben sind:
> #include <avr/interrupt.h>
> sei(); Interrupts aktiv
> cli(); Interrupts inaktiv

Das ist eigentlich kein Problem, erstmal, weil sei() in der main() 
stecken sollte. Also zum Arduino Framework gehört. Standardmäßg.

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
> Woher aber Stefan Frings'
>> das macht auch noch ca. 300 nA aus
> kommen, bleibt mir unklar.

Das habe ich aus einem der Diagramme abgelesen, wo die Stromaufnahme des 
ADC gezeichnet war. Aber das Diagramm gilt wohl nur für den aktiven 
Betrieb.

Die Beschreibung dieses PRR.PRADC Bits ist ziemlich dürftig, finde ich.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Die Beschreibung dieses PRR.PRADC Bits ist ziemlich dürftig, finde ich.

Der gesamte Analogteil ist bei allen AVR8 leider traditionell nur recht 
dürftig beschrieben. Und das ist bei der neuen Generation der 
XMega-Erben eher noch weitaus dürftiger geworden.
Was insofern unschön ist, dass man gesamte Wissen "über das DB hinaus", 
was man bei den klassischen AVR8 im Laufe der Zeit gewonnen hatte, als 
Vollverlust abschreiben kann. So gut wie nichts davon ist auf die neuen 
Modellreihen anwendbar.

von S. Landolt (Gast)


Lesenswert?

an Stefan Frings:
Ich muss zugeben, völlig klar waren mir die Verhältnisse bis heute 
nicht. Lag wohl daran, dass ich bei stromkritischen Anwendungen 
Standard-Programmvorlagen verwende, in denen PRR komplett gesetzt ist, 
und wo ich dann nur die jeweils benötigte Peripherie 'aktiviere'.

Solange aber Sven H. seine "einfache Schaltung"
> nur alle 5 Minuten per Watchdog aufwachen
lassen will, spielt PRR wohl ohnehin keine große Rolle.

von S. Landolt (Gast)


Lesenswert?

> Wissen ... Vollverlust abschreiben ...
Tja, c-hater, der Satz "Junge, lern was, was du einmal gelernt hast, 
kann dir keiner mehr nehmen", den ich als Kind oft genug hörte, ist 
natürlich richtig, nur - nach einer gewissen Zeit gibt es keinen mehr, 
der mir den alten Mist wegnehmen wollte. Oder moderner ausgedrückt: die 
Halbwertszeit von Wissen wird immer kürzer.
  Und das gilt leider auch für Methoden & Verfahren.

von Veit D. (devil-elec)


Lesenswert?

S. Landolt schrieb:
>> Du meinst den ATtiny13A
> Eben! Was hat das jetzt mit einem Auto zu tun?
>
> Wenn in der Arduino-Umgebung der ADC standardmäßig eingeschaltet ist,
> okay. Im nackten ATtiny13A ist er es nicht.

Um hier einmal Klarheit reinzubringen. :-) Es ist vollkommen egal ob man 
einen nackten µC oder ein Arduino Board in der Arduino IDE programmiert. 
Sobald man der Arduino IDE das entsprechende µC Package einspielt und 
mit dem Arduino typischen setup(), loop() handiert, greifen bestimmte 
Mechanismen unter der Haube wie Serial- und Timerkonfiguration usw. auch 
der ADC wird vorkonfiguriert. Ob alle Timer, außer Timer 0 wegen millis, 
und der ADC aber wirklich schon aktiv sind weiß ich auch nicht aus dem 
Kopf. Man müßte das entsprechende Register auslesen ... das ist 
zumindestens der einfachste Weg.  :-)
Das habe ich einmal auf meinem ATmega2560 gemacht und man sieht Bit 7 in 
ADCSRA ist gesetzt. Diese ADC Konfig ist Default wenn man nichts weiter 
macht.
[c]
ADMUX:  0b0000'0000
DIDR0:  0b0000'0000
DIDR1:  0b0000'0000
DIDR2:  0b0000'0000
ADCSRA: 0b1000'0111
ADCSRB: 0b0000'0000
[c]

Jetzt wäre zu prüfen ob der ATtiny13A Package Programmierer das bei sich 
auch so gemacht hat. Denn verallgemeinern kann man das bei Fremden 
"Plugins" nicht.

von S. Landolt (Gast)


Lesenswert?

Ist schon klar, dass die Hardware eines Arduino-Boards nicht den 
ATtiny13-internen ADC einschalten kann; deshalb schrieb ich auch 
"Arduino-Umgebung".

von Veit D. (devil-elec)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Beschreibung dieses PRR.PRADC Bits ist ziemlich dürftig, finde ich.

Was bitte ist daran dürftig? Steht doch glasklar da was das Bit macht 
und was beachtet werden muss.

• Bit 0 – PRADC: Power Reduction ADC
Writing a logic one to this bit shuts down the ADC. The ADC must be 
disabled before shut down. The analog comparator cannot be used when the 
ADC is shut down.

von Stefan F. (Gast)


Lesenswert?

Veit D. schrieb:
> Jetzt wäre zu prüfen ob der ATtiny13A Package Programmierer das bei sich
> auch so gemacht hat.

Das haben wir doch schon geklärt.

Zur Erinnerung: Es geht hier um das PRR.PRADC Bit, nicht um ADCSRA.ADEN.

Auch dich möchte ich bitten, den Screenshot anzuschauen, den ich um 
16:41 gezeigt habe. Da steht ganz klar, dass der ADC standardmäßig 
eingeschaltet ist.

von EAF (Gast)


Lesenswert?

S. Landolt schrieb:
> deshalb schrieb ich auch
> "Arduino-Umgebung".

Welche leider geheim ist, denn Arduino kennt von Hause aus keinen t13.
Wenn sie nicht geheim wäre, könnte man die Konfiguration betrachten.

von Stefan F. (Gast)


Lesenswert?

Veit D. schrieb:
> Was bitte ist daran dürftig? Steht doch glasklar da was das Bit macht
> und was beachtet werden muss.

Dann kannst du uns sicher die Stelle im DB zeigen wo steht, wie viel 
Strom man damit im normalen Betrieb und wie viel im SLEEP_MODE_PWR_DOWN 
spart, und inwiefern das von Versorgungsspannung und Eingangsspannung 
abhängt.

Immerhin ist ja die spezielle picoPower® version des Chips, da kann man 
doch klare Angaben zur Stromaufnahme erwarten.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Dann kannst du uns sicher die Stelle im DB zeigen wo steht, wie viel
> Strom man damit im normalen Betrieb und wie viel im SLEEP_MODE_PWR_DOWN
> spart

Das wird natürlich nirgendwo stehen (können), weil es dieses Symbol aus 
Sicht des DB überhaupt nicht gibt. Das ist eine reine Erfindung der 
Arduidioten. Schlimmerweise eine Erfindung nicht der Endnutzer (von 
denen kann man sowieso kein sinnvolles Konzept erwarten), sondern der 
unsäglichen Abstrahierer dieser Idioten-Spielwiese.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Das wird natürlich nirgendwo stehen (können), weil es dieses Symbol aus
> Sicht des DB überhaupt nicht gibt. Das ist eine reine Erfindung der
> Arduidioten.

Geht das unqualifizierte Arduino Bashing wieder los? Dieses Symbol 
befindet in der avr libc Bibliothek, in Datei iotn13a.h:
1
#define SLEEP_MODE_PWR_DOWN (0x02<<3)

Und im Datenblatt steht es auch.

von EAF (Gast)


Lesenswert?

c-hater schrieb:
> Das ist eine reine Erfindung der
> Arduidioten.
Du irrst!

SLEEP_MODE_PWR_DOWN ist in avr/sleep.h definiert.

Schaue nach und gestehe dann demütig dein Versagen ein.

von Veit D. (devil-elec)


Lesenswert?

Stefan ⛄ F. schrieb:
> Veit D. schrieb:
>> Was bitte ist daran dürftig? Steht doch glasklar da was das Bit macht
>> und was beachtet werden muss.
>
> Dann kannst du uns sicher die Stelle im DB zeigen wo steht, wie viel
> Strom man damit im normalen Betrieb und wie viel im SLEEP_MODE_PWR_DOWN
> spart, und inwiefern das von Versorgungsspannung und Eingangsspannung
> abhängt.
>
> Immerhin ist ja die spezielle picoPower® version des Chips, da kann man
> doch klare Angaben zur Stromaufnahme erwarten.

Die Frage hat aber nichts mit Beschreibung der Bit Funktion wie ich sie 
rauskopiert habe und du im Screenshot zeigst zu tun. Du meinst die 
Wirkung des Bits bzw. die Wirkung des ADC Power Down. Das ist etwas 
völlig anderes.

Dazu kann man im Kapitel 19.1 "Additional Current Consumption (Absolute) 
for Peripherals" die Tabelle lesen. Je nach Takt und Spannung benötigt 
das ADC Modul, wenn aktiv/idle zwischen 180...460µA was man mittels 
Power Down einsparen kann.

Desweiteren mutmaßt ihr bis jetzt ob der ADC von diesem µC in der 
Arduino IDE defaultmäßig eingeschalten ist oder nicht. Erst wenn ihr das 
Register vom ATtiny13A auslest wisst ihr es ganz genau. Oder man wühlt 
sich durch den Code vom Package, nur dazu bräuchte den Link. Register 
auslesen geht einfacher.

von Veit D. (devil-elec)


Lesenswert?

c-hater schrieb:

> Das wird natürlich nirgendwo stehen (können), weil es dieses Symbol aus
> Sicht des DB überhaupt nicht gibt. Das ist eine reine Erfindung der
> Arduidioten. Schlimmerweise eine Erfindung nicht der Endnutzer (von
> denen kann man sowieso kein sinnvolles Konzept erwarten), sondern der
> unsäglichen Abstrahierer dieser Idioten-Spielwiese.

Sag mal, kannst du dich mal wieder zügeln? Das geht mir langsam auf den 
Sack. Wenn du Arduino Nutzer als Idioten hinstellst, aber selbst nicht 
mit der ADC Doku klarkommst, dann solltest du dich mal fragen wer hier 
der Idiot ist. Zusätzich kennst du nicht einmal die avr-gcc 
Standardfunktionen. Man oh man!

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Geht das unqualifizierte Arduino Bashing wieder los? Dieses Symbol
> befindet in der avr libc Bibliothek, in Datei iotn13a.h:
>
1
> #define SLEEP_MODE_PWR_DOWN (0x02<<3)
2
>

In den Assembler-Includes gibt es dieses Symbol nicht, damit existiert 
es nicht wirklich.

Es existiert allenfalls in den Includes des avrgcc. Unwichtiges Zeug. 
Zumindest hat keine normative Kraft, was in der Include-Hölle 
irgendeines Compilers irgendwo in einer finsteren Versenkung existiert.

> Und im Datenblatt steht es auch.

Wo? In deinem Screenshot jedenfalls nicht. Und auch sonst nirgendwo im 
DB. Du kannst dich mit der Suchfunktion deines PDF-Viewers sehr leicht 
davon überzeugen.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Veit D. schrieb:
> Du meinst die Wirkung des Bits bzw. die Wirkung des ADC Power Down.

Ja die meine ich. Zur Beschreibung des Bits gehören dessen Auswirkungen 
- meinetwegen auch in einem anderen Kapitel.

Ansonsten kann ich dir auch sagen: Da an der Wand ist ein weißer 
schalter. Damit kannst du etwas schalten.

Veit D. schrieb:
> Du meinst die Wirkung des Bits bzw. die Wirkung des ADC Power Down.
Ja die Wirkung ist mir zu dürftig dokumentiert.

> zwischen 180...460µA was man mittels
> Power Down einsparen kann.

So hatte ich das auch interpretiert doch S. Landolt hat nur 40 µA 
gemessen.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> In den Assembler-Includes gibt es dieses Symbol nicht, damit existiert
> es nicht wirklich.

Du spinnst doch!

Es geht hier um C++, nicht um Assembler. Das weißt du ganz genau. Wenn 
du keinen Bock hast, dich mit C/C+ zu befassen, dann halte dich bitte 
aus entsprechenden Diskussionen heraus. Deine bescheuerte Ignoranz 
interessiert hier niemanden. Halte mal deinem Spiegel einen Vortrag, der 
hört dir vielleicht zu.

>> Und im Datenblatt steht es auch.
> Wo? In deinem Screenshot jedenfalls nicht.

Dann wasche mal dein Gesicht und mache Licht an, dann siehst du auch 
etwas.

von EAF (Gast)


Lesenswert?

c-hater schrieb:
> Unwichtiges Zeug.

Deine Worte sagten, dass es eine Arduino Erfindung ist.

Gestehe!
Übe Demut.

von c-hater (Gast)


Lesenswert?

Veit D. schrieb:

> Wenn du Arduino Nutzer als Idioten hinstellst

Das sind sie in überwältigender Mehrheit. Der Beweis dafür findet sich 
hier in diesem Forum in unzähliger Mannigfaltigkeit.

> aber selbst nicht
> mit der ADC Doku klarkommst

Häh? Wieso sollte ich damit nicht klarkommen?

> Zusätzich kennst du nicht einmal die avr-gcc
> Standardfunktionen.

Dem ist wohl nichts hinzuzufügen. Allein "avr-gcc" und "Standard" 
zusammen zu verwenden, bescheinigt dir bereits vollständige Inkompetenz. 
Und dann auch noch bezüglich eines Symbols irgenwelche "Funktionen" in's 
Spiel zu bringen, vertieft das nur.

Du hast so wenig Ahnung, dass du einfach mal die Fresse halten solltest.

von S. Landolt (Gast)


Lesenswert?

> So hatte ich das auch interpretiert doch S. Landolt
> hat nur 40 µA gemessen.
Schon, aber bei einem ATtiny85 (da ich keinen 13A habe); bei diesem sind 
die im Datenblatt angegebenen Werte deutlich geringer.

Damit verabschiede ich mich, wünsche allerseits einen schönen Abend und 
ein frohes Wochenende.

von c-hater (Gast)


Lesenswert?

EAF schrieb:

> Deine Worte sagten, dass es eine Arduino Erfindung ist.
>
> Gestehe!
> Übe Demut.

OK, das stimmt. Das war keine Arduino-Erfindung, sondern eine 
avrgcc-Erfindung, Der Arduino-Kram hat das nur benutzt.

Naja, in der Tiefe dieser ganzen schwachsinnigen Abstraktionen kann man 
sich schonmal verirren.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Dem ist wohl nichts hinzuzufügen. Allein "avr-gcc" und "Standard"
> zusammen zu verwenden, bescheinigt dir bereits vollständige Inkompetenz.

Es geht nicht um den avr-gcc sondern um die avr libc. Und die ist 
Standard. Atmel und Microchip haben nie eine andere C Bibliothek für 
diesen Chip angeboten.

c-hater schrieb:
> Der Arduino-Kram hat das nur benutzt.
> Naja, in der Tiefe dieser ganzen schwachsinnigen
> Abstraktionen kann man sich schonmal verirren.

Halt doch mal deine Klappe wenn du keine Ahnung hast. Das Arduino 
Framework benutzt die Sleep Funktionen überhaupt nicht. Deswegen hat 
diese Diskussion mit Arduino auch überhaupt gar nichts zu tun.

Da hat Holger ein Trigger-Wort geäußert und du flippst nun total aus.

Was du hier veranstaltest, das ist schwachsinnig.

von Veit D. (devil-elec)


Lesenswert?

c-hater schrieb:
> Veit D. schrieb:
>
>> Wenn du Arduino Nutzer als Idioten hinstellst
> Das sind sie in überwältigender Mehrheit. Der Beweis dafür findet sich
> hier in diesem Forum in unzähliger Mannigfaltigkeit.

Du hast ja keine Ahnung. Wirklich nicht.

>> aber selbst nicht mit der ADC Doku klarkommst
> Häh? Wieso sollte ich damit nicht klarkommen?

Beitrag "Re: Attiny: LED aus durch Sleepmode"

>> Zusätzich kennst du nicht einmal die avr-gcc Standardfunktionen.
> Du hast so wenig Ahnung, dass du einfach mal die Fresse halten solltest.

Wenn du meinst ...

von EAF (Gast)


Lesenswert?

c-hater schrieb:
> EAF schrieb:
>
>> Deine Worte sagten, dass es eine Arduino Erfindung ist.
>>
>> Gestehe!
>> Übe Demut.
>
> OK, das stimmt. Das war keine Arduino-Erfindung, sondern eine
> avrgcc-Erfindung, Der Arduino-Kram hat das nur benutzt.
>
> Naja, in der Tiefe dieser ganzen schwachsinnigen Abstraktionen kann man
> sich schonmal verirren.

Gut, das war immerhin schon mal ein Eingeständnis.

Nur das mit der Demut, das klappt noch nicht so richtig....
Versuche es nochmal!

von c-hater (Gast)


Lesenswert?

Veit D. schrieb:

>>> Wenn du Arduino Nutzer als Idioten hinstellst
>> Das sind sie in überwältigender Mehrheit. Der Beweis dafür findet sich
>> hier in diesem Forum in unzähliger Mannigfaltigkeit.
>
> Du hast ja keine Ahnung. Wirklich nicht.

Wie würdest du dann diese schiere Masse von Post offensichtlich völlig 
Unwissender erklären? Oft auch noch mit dem Kontext, überhaupt nix 
anderes als Arduino zu kennen, weil es nichtmal erwähnt wird, dass es um 
Arduino geht und man das nur aus dem weiteren Gelalle des jeweiligen TO 
entnehmen kann.

>>> aber selbst nicht mit der ADC Doku klarkommst
>> Häh? Wieso sollte ich damit nicht klarkommen?
>
> Beitrag "Re: Attiny: LED aus durch Sleepmode"

Wie soll das deine Argumentation stützen? Du bist sogar zu dumm und 
unwissend, um zu erkennen, dass es das keinesfalls tut...

> Wenn du meinst ...

Ja, das meine ich, deswegen sage ich es. Immer und immer wieder, trotz 
Zensoren und Idioten.

von Sven H. (Gast)


Lesenswert?

c-hater schrieb:
> Wie würdest du dann diese schiere Masse von Post offensichtlich völlig
> Unwissender erklären? Oft auch noch mit dem Kontext, überhaupt nix
> anderes als Arduino zu kennen, weil es nichtmal erwähnt wird, dass es um
> Arduino geht und man das nur aus dem weiteren Gelalle des jeweiligen TO
> entnehmen kann.

Sorry, aber der "lallende TO", also meine Wenigkeit, hat gar nicht 
über Arduino geschrieben. Der Begriff kommt nichtmal im Ursprungspost 
vor. Es geht um den Attiny13A.

Wenn ich mir irgendwann vornehme, in einem Forum in das sinnlose 
Beleidigen von Nutzern einzusteigen, werde ich mich vorher registrieren. 
Würde ich dir auch empfehlen.

von Veit D. (devil-elec)


Lesenswert?

@ TO Sven,

welches µC Package verwendest du?
Zufällig das von MCUdude? https://github.com/MCUdude/MicroCore
Ich gehe mal davon aus, weil das recht bekannt ist.

Dabei fällt mir auf, dass diese Zeilen nicht zusammenpassen.
1
const int SwitchPin = 3;   
2
detachInterrupt(digitalPinToInterrupt(SwitchPin))
3
attachInterrupt(0, INT_PINisr, LOW);

Entweder verwendest du generell die Interrupt Nummer oder die Pinnummer. 
Bei der Pinnummer mußte dann wie bei attach geschehen immer die 
zusätzliche Funktion digitalPinToInterrupt( ) verwenden. Ansonsten 
stimmt der Interrupt zum Pin nicht.

Denn die INT0 in
1
attachInterrupt(0, INT_PINisr, LOW);
zeigt ja nicht auf Arduinopin 3. Das ist Arduinopin 1 bzw. Gehäusepin 6 
/ PB1.

Das müßte demzufolge so aussehen damit erstmal die Pinzuordnug passt.
1
const int SwitchPin = 1;   
2
detachInterrupt(digitalPinToInterrupt(SwitchPin))
3
attachInterrupt(digitalPinToInterrupt(SwitchPin), INT_PINisr, LOW);

Danach solltest du nochmal deine Tasterabfrage und das speichern des 
letzten Zustandes überdenken. Wann wird der Zustand aktualisiert und 
wann sollte er eigentlich wirklich aktualisiert werden damit ein 
sinnvoller Vergleich möglich ist.

von Veit D. (devil-elec)


Lesenswert?

Sven H. schrieb:

> Sorry, aber der "lallende TO", also meine Wenigkeit, hat *gar nicht*
> über Arduino geschrieben. Der Begriff kommt nichtmal im Ursprungspost
> vor. Es geht um den Attiny13A.

Ich sehe die Funktionen setup und loop. Damit ist mir klar, du 
verwendest die Arduino IDE zum programmieren deines ATtiny13A. Oder 
sollte ich mich irren? Wenn doch, wie programmierst du deinen µC?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Sven H. schrieb:
> meine Wenigkeit, hat gar nicht
> über Arduino geschrieben. Der Begriff kommt nichtmal im Ursprungspost
> vor. Es geht um den Attiny13A.

Sven H. schrieb:
> /* Arduino schlafen legen */

Das ist doch der Ursprungspost-Post, oder nicht?

Wie dem auch sei, lass dich vom c-hater nicht unterkriegen. Den kann man 
schon lange nicht mehr ernst nehmen. Aber er hilft, wenn du kurz vorm 
einschlafen bist und wach bleiben musst. Für einen Adrenalin-Schub ist 
er immer gut.

von Stefan F. (Gast)


Lesenswert?

Veit D. schrieb:
> Dabei fällt mir auf, dass diese Zeilen nicht zusammenpassen.

Sehr aufmerksam, leider ist es für Fakten zu spät.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

ich dachte man kann retten was zu retten ist. Wie du schon sagst, man 
muss c-hater ignorieren lernen, dann bleiben die Threads auch ziemlich 
sauber. Sofern Sven noch mitmacht und alle sich nur auf sein Problem 
konzentrieren kann der Thread weitergeführt werden und am Ende 
hoffentlich zur Lösung führen. Soweit meine Gedankengänge.

von c-hater (Gast)


Lesenswert?

Veit D. schrieb:

> man
> muss c-hater ignorieren lernen

Klar, wenn man von Fakten und Hardware nix hören will, kann man mich 
getrost ignorieren. Nur sollte man sich dann nicht wundern, wenn man zu 
keiner Lösung kommt...

Da kann man dann weiter beliebig idiotisch mit C/C++/Arduinio (in 
aufsteigender Reihenfolge der schwachsinnigen Überabstraktionen 
primitivster Hardware) rumfrickeln...

von Heiner (Gast)


Lesenswert?

c-hater schrieb:
> Veit D. schrieb:
>
>> man
>> muss c-hater ignorieren lernen
>
> Klar, wenn man von Fakten und Hardware nix hören will, kann man mich
> getrost ignorieren. Nur sollte man sich dann nicht wundern, wenn man zu
> keiner Lösung kommt...
>
Das mit dem Ignorieren stimmt, denn Deine Beiträge zu Problemlösungen 
bestehen zu 80% aus Beleidigungen und die restlichen 20% - Schwamm 
drüber

von Veit D. (devil-elec)


Lesenswert?

c-hater schrieb:
> Veit D. schrieb:
>
>> man
>> muss c-hater ignorieren lernen
>
> Klar, wenn man von Fakten und Hardware nix hören will, kann man mich
> getrost ignorieren. Nur sollte man sich dann nicht wundern, wenn man zu
> keiner Lösung kommt...
>
> Da kann man dann weiter beliebig idiotisch mit C/C++/Arduinio (in
> aufsteigender Reihenfolge der schwachsinnigen Überabstraktionen
> primitivster Hardware) rumfrickeln...

Meine letzte Antwort an dich. Dann schalte ich vom Toleriermode in den 
Ignormode. Frage dich einmal wann du im gesamten Forum jemals irgendwas 
zu einer Lösung beigetragen hast. Von dir kommt nur heiße Luft sonst 
nichts. Selbst in Threads wo es um bare metal Programmierung geht, wo du 
vielleicht durch Hardwarekenntnisse punkten könntest kommt absolut 
nichts von dir. Wo bist du denn wenn es zum Bsp. um den AVRxxDBxx geht. 
Letztens ging es um deren Timer. Da war absolute Funkstille von dir. Da 
musste S.Landolt, ich und Co ran. Bei S.Landolt weiß ich das er 
Assembler programmieren kann und das er Ahnung hat. Du hast beides 
nicht. S.Landolt schätze ich. Dich ignoriere ich. Es gibt nie auch nur 
Ansatzweise einen Satz zur Problemlösung von dir. Immer wieder nur 
dummes Gelaber und Stänkern von dir. Wahrscheinlich spielt niemand mit 
dir. Ich kann es verstehen.

Zurück zum Thema. Sven was ist der Stand der Dinge?

von Stefan F. (Gast)


Lesenswert?

Veit D. schrieb:
> Selbst in Threads wo es um bare metal Programmierung geht, wo du
> vielleicht durch Hardwarekenntnisse punkten könntest kommt absolut
> nichts von dir.

Das sehe ich anders. Manchmal hilft er wirklich, sogar wenn es um C 
geht. Auch damit kennt er sich aus - unabhängig von seinem Gemecker und 
der lächerlichen Wortwahl.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

das liegt im untersten vom unterem Promillebereich und damit bei Null.

von EAF (Gast)


Lesenswert?

Veit D. schrieb:
> Das müßte demzufolge so aussehen damit erstmal die Pinzuordnug
> passt.
> const int SwitchPin = 1;
> detachInterrupt(digitalPinToInterrupt(SwitchPin))
> attachInterrupt(digitalPinToInterrupt(SwitchPin), INT_PINisr, LOW);

const byte SwitchPin = 2; // oder 3

von Veit D. (devil-elec)


Lesenswert?

Hallo,

warum Arduinopin 2 oder 3? INT0 liegt auf Arduinopin 1. Zumindestens in 
MCUdude seiner Zuordnung.

von EAF (Gast)


Lesenswert?

sorry!
War geistig gerade beim atmega328p.
Der t13 ist natürlich leicht anders.

von c-hater (Gast)


Lesenswert?

Gestern war ich bei meinem Therapeuten. Der hat mir versucht zu sagen, 
dass meine C++ und Arduino Ablehnung auf meiner eigenen Unfähigkeit 
beruht, mich auf diese Thema einzulassen. Angeblich vertrage ich es 
nicht, wenn Arduino Kinder besser mit C++ umgehen können, als ich.

Dem habe ich einen auf die Glocke gehauen.
Therapie, so ein Schwachsinn!

von Georg M. (g_m)


Lesenswert?

Sven H. schrieb:
> und nur alle 5 Minuten per Watchdog aufwachen

Muss häufiger geschehen: ca. 8 Sekunden ist das längste Time-out beim 
WDT vom ATtiny13A.

von c-hater (Gast)


Lesenswert?

c-hater schrieb:

> Gestern war ich bei meinem Therapeuten. Der hat mir versucht zu sagen,
> dass meine C++ und Arduino Ablehnung auf meiner eigenen Unfähigkeit
> beruht, mich auf diese Thema einzulassen. Angeblich vertrage ich es
> nicht, wenn Arduino Kinder besser mit C++ umgehen können, als ich.
>
> Dem habe ich einen auf die Glocke gehauen.
> Therapie, so ein Schwachsinn!

Sehr lustig. Nun, jeder Nichtvollidiot wird problemlos erkennen können, 
dass das nicht von c-hater (the only trustworthy) stammen kann.

Und dem Rest ist eh' nicht zu helfen.

von pnp (Gast)


Lesenswert?

c-hater schrieb:
> Sehr lustig. Nun, jeder Nichtvollidiot wird problemlos erkennen können,
> dass das nicht von c-hater (the only trustworthy) stammen kann.

Schon klar, MaWin...

von c-hater (Gast)


Lesenswert?

pnp schrieb:

> Schon klar, MaWin...

Was hat WaWin damit zu tun? Ausser der Tatsache, dass er (wie ich 
selber) bevorzugt, pseudonym zu bleiben?

Ja, es gibt da die Möglichkeit von Trittbrettfahrern, die Ergüsse mit 
falscher Identität abliefern. Muß man mit leben. Ich kann das 
weitgehend, MaWin scheinbar nicht. Liegt natürlich auch ein wenig daran, 
dass er schon länger und umfassender auf dieser Ebene angegriffen wird.

Ich werde derartiges (anders als WaWin) in Zukunft einfach vollständig 
ignorieren. Ich verlasse mich einfach auf die Eigenkompetenz der Leser, 
wer von denen nicht erkennt, von wem ein Posting kommt, ist sowieso 
ausserhalb des Bereiches, den ich ansprechen will. Das sind "homo 
sapiens" mit der Betonung auf "sapiens".

von Peter D. (peda)


Lesenswert?

Schade, daß gewisse Personen immer wieder Threads absichtlich zerstören 
müssen.
Die Frage war eigentlich ganz einfach. Wenn man Arduino Funktionen 
benutzt, dann muß man auch die Doku dazu lesen. Für Attachinterrupt gibt 
es eine Übersetzerfunktion, die aus der Arduino-Nummer des Pins den 
passenden Vector ermittelt.
Nur wird der TO schon lange nicht mehr mitlesen.

von EAF (Gast)


Lesenswert?

Das Arduino detach und attach mit einem ISR Callback macht richtig Sinn, 
wenn die Routine zur Laufzeit ausgetauscht werden soll.
In anderen Fällen kann man ihr auch ein wenig Komfort zuschreiben, da es 
mit allen µC funktioniert, welche das ermöglichen und es eine Arduino 
Integration gibt.

Hier führt es eher zu Fehlern, wie man sieht, und kostet Flash(Push+Pop 
Kaskaden) und RAM(Pointer+Stack), welches beides auf dem t13 eher knapp 
ist.

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.