Hi,
der Powersave Mode will mir einfach nicht gelingen.
Ich habe schon viel gelesen und probiert, aber ich komme nicht mehr
weiter.
Als Hardware habe ich ein Pro Mini 328P Entwicklungsboard von eHaJo.
Das Projekt ist Temperatur- Datenlogger und als Teilprojekt ist der Pro
Mini ein Mobilteil, dass über SPI ausgelesen wird.
Vom Board habe ich die Power-LED entfernt.
Die CPU läuft im Normalbetrieb mit 8 MHz. Zur Zeit mit internem
Oszillator, weil ich dachte, es zieht weniger Strom als die Verwendung
des externen Quarzes, was aber nicht der Fall ist.
Im Powersave Modus läuft "eigentlich" nur der watchdog timer und weckt
die CPU alle 4s auf. Das funktioniert auch und wird als 2. Zeitbasis
verwendet. Die Zeitbasis ist über zwei Tage ausreichend genau.
Die nicht belegten I/O Pins sind mit Pull Up beschaltet.
Der Wechsel zwischen SLOWCLOCKMODE und Normalmode passiert über einen
Pin, der im Normalbetrieb high und im SLOWCLOCKMODE auf GND geschaltet
ist.
Im Normalbetrieb benötige ich 8 MHz, damit eine SPI Verbindung zu einem
anderen Controller klappt.
Nach Messungen mit dem Multimeter zieht das Board im Normalbetrieb ca.
10 mA und im SLOWCLOCKMODE / powersave leider immer noch 1.84 mA.
Es ist ein AtmelStudio 6 Projekt.
Hier möchte ich verstehen wieso und wie komme ich deutlich unter 500
nA????
(Ich weiß, dass es eine Bibliothek zu Thema gibt, wrde ich als letztes
probieren. Ich will es aber gerne verstehen).
Der abgespeckte Code dazu: ( ich habe nur wesentliche Teile geschrieben
und hoffe es ist verständlich. )
1
#define SLEEP_ENABLED 1 /* Konfiguration */
2
3
#include<avr/io.h>
4
#include<avr/power.h> // for clock_prescale_set
5
#include<util/delay.h>
6
#include<stdlib.h> /* for itoa, fprintf fscanf, fputs, fgets */
7
#include<avr/interrupt.h> /* for Clock and SPI */
8
#include<avr/eeprom.h> /* for 8 Bit integer store */
9
#include<avr/sleep.h> /* for idle/powersave mode */
10
11
main()
12
{
13
14
while(1)
15
16
if(SLOWCLOCKMODE!=getClockMode())
17
{
18
SLOWCLOCKMODE=getClockMode();// Setze neu , weil geändert
19
//setClockMode(SLOWCLOCKMODE); // setze neuen Clockmode nur in ISR
MCUSR|=(1<<BODS)|(1<<BODSE); // Part one
MCUSR|=(1<<BODS);
MCUSR&=~(0<<BODSE); // Part two within 4 Clock
Du musst wahrscheinlich dem Compiler irgendwie sagen, dass er diese
Zeilen nicht optimieren soll, die schreien ja sonst förmlich nach
Zusammenfassung.
@ H.Joachim Seifert (crazyhorse)
>MCUSR|=(1<<BODS)|(1<<BODSE); // Part one> MCUSR|=(1<<BODS);> MCUSR&=~(0<<BODSE); // Part two within 4 Clock>Du musst wahrscheinlich dem Compiler irgendwie sagen, dass er diese>Zeilen nicht optimieren soll, die schreien ja sonst förmlich nach>Zusammenfassung.
Nö, das darf er gar nicht, denn die Zugriffe auf IO-Register wie MCUSR
sind volatile.
H.Joachim S. schrieb:> Du musst wahrscheinlich dem Compiler irgendwie sagen, dass er diese> Zeilen nicht optimieren soll,
Das macht normalwerweise die Deklaration der Register als volatile.
Leider könnte er dazwischen Instuktionen einfügen, die sieht man nur im
(Dis-)assembly Listing. Gibt es nicht eine fertige Funktion für sowas..?
Welche Taktquelle nutzt der WDT? Bei laufendem internen 8MHz Oszillator
wären die 1,8mA IMHO in Ordnung...
Harald schrieb:> Dein Problem liegt wo anders. Zum Beispiel eingeschaltete PullUps die> extern auf GND gezogen werden.
Bei nicht belegten I/O Pins kann das nicht passieren und für die anderen
müsste man den Schaltplan konsultieren.
Carsten M. schrieb:> Die nicht belegten I/O Pins sind mit Pull Up beschaltet.
Nach dem Schaltplan des Gesamtaufbaus gehe ich jetzt aber nicht suchen.
my2ct schrieb:> Harald schrieb:>> Dein Problem liegt wo anders. Zum Beispiel eingeschaltete PullUps die>> extern auf GND gezogen werden.>> Bei nicht belegten I/O Pins kann das nicht passieren und für die anderen> müsste man den Schaltplan konsultieren.
Selbstverständlich meine ich Pins an denen etwas angeschlossen ist.
Harald, bist du Carsten?
[ ] Nein, ich habe die Forumsregeln nicht gelesen, sie sind mir scheiß
egal.
Nochmal meine Frage:
> Wie viel Strom nimmt der Spannungsregler auf dem Board auf?
[ ] Ich beantworte Rückfragen nur, wenn ich Hilfe erwarte. Heute trolle
ich aber nur.
Bitte zutreffendes Sätze ankreuzen oder meine Frage beantworten.
> Stefan, bist du Martin?
Nein
Aber du hast nun schon wieder eine meiner Rückfragen nicht beantwortet.
Damit bin ich hier raus, verschaukele dich selbst!
Stefan U. schrieb:> Wie viel Strom nimmt der Spannungsregler auf dem Board auf?
Hi Stefan,
lt. Hersteller des Controller-Boards ist das nicht das Hauptproblem. Er
meint, dass eher der CPU-Takt weiterläuft. Der Spannungsregler ist
vermutlich ein MIC 5205.
VG
Carsten
S. Landolt schrieb:> Wieviel Strom fließt, wenn der ATmega328P per Minimalprogramm fest in> den Power-down-Modus geschickt wird, also auch ohne WDT?
Power-down mode, WDT enabled: ca. 4.2µA
Power-down mode, WDT disabled: ca. 0.1µA
(Typical values at 25°C, VDD = 3V)
Table 32-4. ATmega328P DC characteristics
Atmel-42735B-ATmega328/P_Datasheet_Complete-11/2016
> lt. Hersteller ...
Wie wäre es mit messen? Um ausnahmsweise mich selbst zu zitieren:
>Wieviel Strom fließt, wenn der ATmega328P per Minimalprogramm> fest in den Power-down-Modus geschickt wird, also auch ohne WDT?
1
#include<avr/sleep.h>
2
3
voidmain()
4
{
5
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
6
sleep_enable();
7
sleep_mode();
8
}
an Georg M.:
Das Datenblatt ist mir bekannt, es geht um die Verhältnisse bei Carsten
Moos.
S. Landolt schrieb:> Wieviel Strom fließt, wenn der ATmega328P per Minimalprogramm fest in> den Power-down-Modus geschickt wird, also auch ohne WDT?
Hallo S. Landolt,
habe ich keine extra Messung dazu. Es gab aber zwischendurch einen
Programmierfehler, der dazu füherte, dass der WDT nicht initilaiisert
und verwendet wurde. Dabei war der Strom ebenfalls um 2 mA. Das ist aber
scheinbar eine Idee, die dazu führt, wieviel Strom der Einsatz des WDT
ausmacht. Das dürfte hier aber unerheblich sein: lt. Datenblatt
WDT enabled, VCC
= 3V T = 85°C 4.2µA 15µA
WDT disabled, VCC
= 3V T = 85°C 0.1µA bis max 2µA
Das sind also maximal 15µA
VG
Carsten
Jim M. schrieb:> H.Joachim S. schrieb:> Welche Taktquelle nutzt der WDT? Bei laufendem internen 8MHz Oszillator> wären die 1,8mA IMHO in Ordnung...
Hallo Jim,
der WDT sollte den asynchronen Takt nutzen: Also 128 kHz mit Prescaler
1
WDTCSR=1<<WDP3;/* 4.0 seconds */
Ich habe dazu eine Funktion, die ich leider noch nicht im Quellcode
gezeigthabe:
1
voidinit_WDT()
2
{
3
cli();
4
/* Clear the reset flag. */
5
MCUSR&=~(1<<WDRF);
6
7
/* In order to change WDE or the prescaler, we need to
8
* set WDCE (This will allow updates for 4 clock cycles).
Jim M. schrieb:> Welche Taktquelle nutzt der WDT? Bei laufendem internen 8MHz Oszillator> wären die 1,8mA IMHO in Ordnung...
Das wäre kein Schlafmodus.
> Der Spannungsregler ist vermutlich ein MIC 5205.
Wer sagt das? Der Hersteller, der es sogar für unnötig hält, Schaltpläne
zu veröffentlichen? Da wäre ich aber sehr skeptisch.
Die Chinesen verbauen viel billigere Spannungsregler, die eine
Ruhestromaufnahme von ca. 1,5mA haben.
Ich fasse mal zusammen:
Du hast ein Board mit unbekannter Bestückung. An der
Gesamt-Stromaufnahme glaubst du zu erkennen, dass dein Programm
fehlerhaft ist. Es ist aber kein offensichtlicher Fehler erkennbar. Was
macht man dann?
1) Schaltplan besorgen
2) Stromaufnahme des Boardes berechnen
3) Programm auf ein Minimum reduzieren:
1
intmain()
2
{
3
PORTA=0xFF;
4
PORTB=0xFF;
5
PORTC=0xFF;
6
PORTD=0xFF;
7
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
8
sleep_enable();
9
sleep_mode();
10
while(1);
11
}
4) Dann nochmal messen.
Wenn du dann immer noch unzufrieden bist, dann löte mal den
Spannungsregler aus.
S. Landolt schrieb:>> lt. Hersteller ...> Wie wäre es mit messen? Um ausnahmsweise mich selbst zu zitieren:>>>Wieviel Strom fließt, wenn der ATmega328P per Minimalprogramm>> fest in den Power-down-Modus geschickt wird, also auch ohne WDT?>>
1
>#include<avr/sleep.h>
2
>
3
>voidmain()
4
>{
5
>set_sleep_mode(SLEEP_MODE_PWR_DOWN);
6
>sleep_enable();
7
>sleep_mode();
8
>}
9
>
>
S. Landolt schrieb im selben Artikel:
>Es geht mir erstmal darum zu entscheiden, ob es an der Hard- oder an der>Software liegt, und das geht mit obigem Dreizeiler.
Hallo S. Landolt,
okay, habe ich verstanden. Leider muss ich das auf morgen verschieben,
weil ich dazu umverkabeln muss; die SPI Schnittstelle ist ja vom
Programm belegt. Ich möchte aber vorher noch wissen, ob es nicht mehr
Sinn machen würde, wenn ich dazu den I/O Bereich konfiguriere, den JDT
abschalte und die MCU Register so setze, wie im Programm?
VG
Carsten
Am meisten Sinn macht es wie gesagt, das Programm auf ein Minimum zu
reduzieren.
> weil ich dazu umverkabeln muss.
WAS musst du umverkabeln? Wir diskutieren hier die ganze Zeit über das
Nackte Board!
Kann es sein, dass du uns entscheidende Informationen vorenthältst?
Möglicherweise Informationen, die Dir persönlich (mangels Know-How)
vollkommen irrelevant erscheinen?
Wir reden aber von diesem Board, oder nicht?
https://www.ehajo.de/boards/148/pro-mini-328p-entwicklungsboard
Stefan U. schrieb:>>> weil ich dazu umverkabeln muss.>> WAS musst du umverkabeln? Wir diskutieren hier die ganze Zeit über das> Nackte Board!>> Kann es sein, dass du uns entscheidende Informationen vorenthältst?> Möglicherweise Informationen, die Dir persönlich (mangels Know-How)> vollkommen irrelevant erscheinen?
Hallo Stefan U.
nun komme mal wieder runter.
Auf der SPI-Schnittstelle des Boards steckt ein Stecker mit Kabel. Am
anderen Ende des Kabels ist auch ein Stecker. Dieser Stecker ist
unbeschaltet, dann fließen dort 0 µA. Wird dieser Stecker gesteckt
verbindet er zu einem zweiten Kontroller und es fließt ein Strom.
Ich hoffe das zeigt, welches Know How dazu nötig ist.
Falls Du nun gleich wieder nach Know How und exclusiven Informationen
rufst:
Nein dieser zweite Stecker ist nicht geeignet für eine ISP
Programmierung und ich muss dazu umverkabeln.
Trotzdem scheint mir dieser Vorschlag der nächste Schritt zu sein. Die
Frage ob es hardware- oder softwareseitig ist wohl entscheidend.
Ich bin erstaunt, wie "kompromisslos" schnell ihr seid. Leider kann ich
das heute nicht mehr messen.
Vg
Carsten
Lange Kabel mit offenen Enden wirken als Antennen. Sie empfangen
hochfrequente Signale, was die Stromaufnahme in die Höhe treibt.
Vermutlich zwar nicht auf 1,8mA aber doch deutlich messbar (nachdem die
eigentliche Problem-Ursache gelöst ist).
Habe doch noch gemessen. Wenn ihr schon so schnell seid:
1
#include<avr/io.h>
2
#include<avr/sleep.h>
3
intmain()
4
{
5
//PORTA = 0xFF; // der 328 hat keinen
6
PORTB=0xFF;
7
PORTC=0xFF;
8
PORTD=0xFF;
9
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
10
sleep_enable();
11
sleep_mode();
12
while(1);
13
}
Die Stromaufnahme beträgt 0.33 mA
Im Powersafe Modus sind es auch 0.33 mA
Das ist da, wo ich hin kommen will.
Also : es ist noch ein Software-Problem
1
#include<avr/io.h>
2
#include<avr/sleep.h>
3
intmain()
4
{
5
//PORTA = 0xFF
6
PORTB=0x0;
7
PORTC=0x0;
8
PORTD=0x0;
9
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
10
sleep_enable();
11
sleep_mode();
12
while(1);
13
}
Da noch eine LED an PB5 verbaut ist, habe ich die PORTs mal schnell mit
0 initialisiert. Nun habe ich 94 µA.
Es muss also noch ein Software-Problem sein.
> Nun habe ich 94 µA.> Es muss also noch ein Software-Problem sein.
Na also, diese Erkenntnis ist ein ganz großer Schritt nach vorne.
Als nächstes würde zu diesem Minimalprogramm schrittweise Sachen
hinzufügen, bis der Fehler wieder auftritt. So kannst du die
Fehlerursache einkreisen.
Carsten M. schrieb:> /* In order to change WDE or the prescaler, we need to> * set WDCE (This will allow updates for 4 clock cycles).> */> WDTCSR |= (1<<WDCE) | (1<<WDE);>> /* set new watchdog timeout prescaler value */> //WDTCSR = 1<<WDP1 | 1<<WDP2; /* 1.0 seconds */> //WDTCSR = 1<<WDP0 | 1<<WDP1 | 1<<WDP2; /* 2.0 seconds */> WDTCSR = 1<<WDP3; /* 4.0 seconds */> //WDTCSR = 1<<WDP0 | 1<<WDP3; /* 8.0 seconds */>> /* Enable the WD interrupt (note no reset). */> //WDTCSR |= _BV(WDIE); // Not here but when we go to Sleep> sei();> }
... der wdt dürfte wohl kaum laufen, weil hiermit WDTCSR = 1<<WDP3, das
WDE wieder auf zero steht und der wdt disabled ist!
aber ALLE wdt funktionen sind in #include <avr/wdt.h> bereits definiert!
wie hier immer alle ihre zeit verschwenden ohne sinnvolle ergebnisse zu
erzeugen ... geht lieber in die sonne ihr ahnungslosen!
ausserdem würde ich mal im atmel simulator mir den code anschauen ...
mt
Carsten M. schrieb:> Da noch eine LED an PB5 verbaut ist, habe ich die PORTs mal schnell mit> 0 initialisiert. Nun habe ich 94 µA.>> Es muss also noch ein Software-Problem sein.
Du hast dich noch gar nicht zu dem Stromverbrauch des Spannungsreglers
geäußert, denn der verbraucht ja auch seinen eigenen Ruhestrom der in
die Rechnung mit einfließt.
Du kannst also vielleicht den Controller und sämtliche Peripherie
entfernen und der Stromverbrauch ändert sich trotzdem nicht merklich.
Carsten M. schrieb:> Hier möchte ich verstehen wieso und wie komme ich deutlich unter 500> nA? (???)
Dazu müsstest du zusätzlich den Watchdog Timer deaktivieren, deine
ganzen Sensoren abschalten und die Pins auf ein definiertes Level legen.
Im Powerdown kommt man auf <1µA.
Mit Watchdog sind es einige 10µA.
Wenn Du einen Spannungsregler hast, kann der ganz heftig ziehen. Es gibt
auch Spannungsregler die nur ~2µA benötigen.
Mike J. schrieb:> Du hast dich noch gar nicht zu dem Stromverbrauch des Spannungsreglers> geäußert, denn der verbraucht ja auch seinen eigenen Ruhestrom der in> die Rechnung mit einfließt.> Du kannst also vielleicht den Controller und sämtliche Peripherie> entfernen und der Stromverbrauch ändert sich trotzdem nicht merklich.
Es wäre auch schön, wenn man wüßte WO der fließende Strom gemessen
wurde.
Nicht, daß er 5 Volt einspeist und den Regler "von hinten" her füttert.
Das gefällt dem nämlich nicht und er dankt das mit anständiger
Stromaufnahme.
Feldkurat K. schrieb:> Es wäre auch schön, wenn man wüßte WO der fließende Strom gemessen> wurde.
Ja, so ein kleiner Übersichtsplan wäre jedenfalls nett, muss ja nichts
aufwendiges sein. Paint reicht oft für sowas aus.
Er schreibt ja von einem "mobil-teil", also könnte ich mir vorstellen
dass er einen LiIon-Akku an den Eingang des Reglers hängt.
Man kann den Aufdrucken von China-Bauteilen aber nicht trauen, daher
sollte er den Ruhestrom des Spannungsreglers mal einzeln messen.
Die Chinesischen XC6206P332MR von eBay verbrauchen ja auch nicht nur
1µA, man misst 7µA da es eigentlich TX6206 sind.
Dafür kosten 100 Stück nur 1,32€.
Dass sie für den Preis etwas schlechter sind ist okay, aber es ist mies
dass die einen verarschen.
Sie könnten doch einfach schreiben: "TX6206 - günstige Alternative zu
XC6206".
Stefan U. schrieb:>> Nun habe ich 94 µA.>> Es muss also noch ein Software-Problem sein.>> Na also, diese Erkenntnis ist ein ganz großer Schritt nach vorne.>> Als nächstes würde zu diesem Minimalprogramm schrittweise Sachen> hinzufügen, bis der Fehler wieder auftritt. So kannst du die> Fehlerursache einkreisen.
Hallo Stefan,
so werde ich es machen. Auch wenn es leider der aufwendigste Weg durch
die 1600 Zeilen ist.
Auf dem Spannungsregler steht RB 50. Ich werde ihn erstmal nicht einzeln
messen. Da er keinen Längswiderstand zu haben scheint, kann ich auch
Strom nicht indirekt messen. Er dürfte aber bei Gesamt 94 µA abzüglich
(bis zu) 300µA für ADC und abzüglich ein paar µA für WDT nicht mehr
allzu hoch sein.
Nach einem Schaltplan wurde gefragt: Die Peripherie ist bei den
Messungen nicht verbunden. Lediglich ein Sensor-Board (BME280) ist
eingesteckt.
Apollo Mond schrieb:
>... der wdt dürfte wohl kaum laufen, weil hiermit WDTCSR = 1<<WDP3, das>WDE wieder auf zero steht und der wdt disabled ist!
Das ist richtig: ein "|" fehlt: ... WDTCSR| = 1<<WDP3
Da muss ich mal schauen. Tatsache ist, dass der WDT - ISR Vector
angesprungen wird und nach 4s der Counter inkrementiert wird. Daraus
würde ich schließen, dass der WDT Timer sehr wohl läuft. Den (leider
abwertenden)
Hinweis auf die wdt.h werde ich auch aufgreifen.
Dann wurde befürchtet, dass die Spannung an VCC anliegt: Spannung liegt
an RAW. Der Regler wird also vorwärts betrieben.
Es ist übrigens die 5V Variante.
Es ist noch kein LiPo. Es sind 4 xAA.
Danke für die vielen Anregungen.
Wenn Dir Langzeit-Batteriebetrieb wichtig ist, solltest du entweder
einen Spannungsregler nehmen, der nur wenige µA aufnimmt oder noch
besser gar keinen Spannungsregler.
Das China-Board mit unbekannter Bestückung scheint mir die falsche Wahl.
>Apollo Mond schrieb:>>... der wdt dürfte wohl kaum laufen, weil hiermit WDTCSR = 1<<WDP3, das>WDE wieder auf zero steht und der wdt disabled ist!>Das ist richtig: ein "|" fehlt: ... WDTCSR| = 1<<WDP3>Da muss ich mal schauen. Tatsache ist, dass der WDT - ISR Vector>angesprungen wird und nach 4s der Counter inkrementiert wird. Daraus>würde ich schließen, dass der WDT Timer sehr wohl läuft. Den (leider>abwertenden)
in der main loop steht
1
WDTCSR|=(1<<WDIE);// enable WDT
damit ist auch klar, warum der WDT läuft.
Die oben zitierte Zeile steht in der init_WDT(), die nur einmal
aufgerufen wird. Das ist verwirrend.
Carsten M. schrieb:> Er dürfte aber bei Gesamt 94 µA abzüglich> (bis zu) 300µA für ADC und abzüglich ein paar µA für WDT nicht mehr> allzu hoch sein.
Im PowerDown ist der Takt für den ADC doch abgeschaltet, du musst nur
vor dem Sleep-Modus noch die interne Referenzspannung abschalten.
Carsten M. schrieb:> Es ist übrigens die 5V Variante.
Die hat doch einen 16MHz Quarz. Nutzt du den "Prescaler" um auf die 8MHz
zu kommen?
1
clock_prescale_set(clock_div_1);
Scheint hier nicht so zu sein.
Hast du eine Möglichkeit den "LDO" mal auszulöten?
Bei meinem Arduino-Pro-Mini ist auch ein so ein "KB 50" SOT23-5
Spannungsregler drauf, man kann auch die Kondensatoren rechts und links
von ihm entlöten damit man besser an in ran kommt, dauert höchstens ein
paar Minuten wenn man vorsichtig ist.
Du kannst den ATmega auch direkt mit einem 4.1V LiIon-Akku (am Vcc-Pin)
betreiben wenn die Peripherie das auch so aushält. Die meisten Sensoren
brauchen aber 3.3V um zu funktionieren.
Mike J. schrieb:> Bei meinem Arduino-Pro-Mini ist auch ein so ein "KB 50" SOT23-5 Spannungsregler
drauf,
... den ich herunterwerfe, wenn ich Strom sparen will.
KB50 wäre das Marking eines Micrel MIC5205. Laut Datenblatt hat dieser
bei 50mA Last typ. 350 / max. 600 µA Querstrom.
Georg M. schrieb:> Ja, und "LDO" heißt nicht automatisch "Ultralow Quiescent Current LDO".
so ist es, hier kommt z.b. ein mcp1700 mit 1,6uA quiescent current zum
einsatz bzw. bei dem thema low power sollte man ohne auskommen.
Carsten M. schrieb:> Da muss ich mal schauen. Tatsache ist, dass der WDT - ISR Vector>>angesprungen ...
es gibt keinen wdt interrupt vector, sondern nur einen reset vector mit
4 quellen! die isr ist unvollständig, weil sie die reset quelle im mcusr
register nicht abfragt.
für mich ist das hier beobachte vorgehen trail and error von
ahnungslosen. das die netten leute hier ihre zeit investieren, um
frage/antwort ping-pong zu spielen erstaunt mich immer wieder.
mt
> das die netten leute hier ihre zeit investieren, um> frage/antwort ping-pong zu spielen erstaunt mich immer wieder.
Einige Leute machen mit Elektronik nur als Hobby herum, haben es nie
richtig gelernt. Ich zähle mich (trotz Ausbildung als
Kommunikationselektroniker) dazu, weil es für mich nie zum Beruf wurde.
Damals als ich angefangen hatte, war es sehr schwierig, als
Informationen zu kommen. Für Datenblätter musste man den
Chip-Herstellern Briefe mir Bargeld in der jeweiligen Landeswährung
schicken und dann wochenlang auf Antwort hoffen. Mikrocontroller mit
Minimalbeschaltung und Programmieradapter kosteten bis zu 100x so viel,
wie heute. Und wenn man weder Internet noch Leute kennt, die man fragen
kann, musste man sich in Geduld üben. Oder eben irgendwie
durchprobieren.
Ich bin sehr dankbar für jede Hilfe, die ich hier im Forum bekommen
habe. Die Mitglieder hier haben mich sehr viel weiter gebracht, als
meine Ausbildung. Aus Dankbarkeit helfe ich nun anderen, so weit ich
kann. Aus dem selben Grund betreibe ich auch seit nun etwa 20 Jahren
meine Homepage.
Apollo M. schrieb:> es gibt keinen wdt interrupt vector
Dann ist das Datenblatt des Atmega328P nicht richtig und meinen
Atmega328P, die ich so benutze, darf man das auch nicht sagen, dass sie
eigentlich keinen Interruptvector für den Watchdog haben.
Interruptvector 7, Program Address 0xc...wenn ich mich recht
erinnere...warum weis ich das eigentlich auswendig? Jetzt bekomm ich
Angst...
Apollo M. schrieb:> es gibt keinen wdt interrupt vector, sondern nur einen reset vector mit> 4 quellen!
Da verwechselst du was.
Es gibt einen Resetvektor. Vector 1.
Es gibt einen WD-Interruptvector, wie schon erwähnt.
Und das was du meinst mit 'reset vector' ist vermutlich das Register, in
dem die Quellen des letzten Resets gespeichert sind. MCUSR. Das ist auch
kein Vektor, sondern sind nur Flags.
Es aber nichts mit dem WDT-Interrupt zu tun, allerdings steht drin, ob
am µC der Reset durch den Watchdog ausgelöst wurde - oder durch
Power-Up, Brown-out oder den Resetpin.
Watchdog-Reset und Watchdog-Interrupt sind zwei Dinge, wenn auch durch
den selben Timer betrieben.
Stefan U. schrieb:>> das die netten leute hier ihre zeit investieren, um>> frage/antwort ping-pong zu spielen erstaunt mich immer wieder.>> Einige Leute machen mit Elektronik nur als Hobby herum, haben es nie> richtig gelernt. Ich zähle mich (trotz Ausbildung als> Kommunikationselektroniker) dazu, weil es für mich nie zum Beruf wurde.>> Damals als ich angefangen hatte, war es sehr schwierig, als> Informationen zu kommen. Für Datenblätter musste man den>...> meine Homepage.
Offtopic:
Das finde ich sehr tröstlich. Dachte schon, ich wäre hier als "Ping Pong
Spieler" abgestempelt und umgeben von unnötiger Arroganz. Ist ziemlich
derb, wie manche hier schreiben. Selbst wenn jemand sich mit den Sachen
über das Datenblatt vertraut gemacht hat, kann es doch noch schief
gehen.
Ich habe nichts gegen "trial and error". Finde es eher ironisch, wenn
Apollo mir/uns das vorwirft, es aber nicht mal richtig schreiben kann.