Forum: Mikrocontroller und Digitale Elektronik Atmega328 per Software reseten


von Edgar (Gast)


Lesenswert?

Hallo,

Ich habe folgendes Problem:

In einer Schaltung wird normalerweise der Spannungsregler mit einem 
Öffnerkontakt abgeschaltet. Am Spannungsregler ist ein ODER Glied 
welches von einem MCU angesteuert wird. Also eine Art Selbsthaltung

Der Schliesskontakt auf dem gleichen Schalter erreicht einen MCU.

Wird nun der Schalter betätigt, erkennt der MCU ein HIGH am 
Schliesserkontakt und führt letze Aufgaben aus, bevor er vom ODER Glied 
seine Selbsthaltung entfernt.

Nun kann es im Fehlerfall passieren, das der Öffnerkontakt des Schalters 
nicht öffnet, somit wäre nach entfernen der Selbsthaltung der 
Spannungsregler immernoch enabled.

Da dieser Sachverhalt ja erkannt werden kann:
Schliesser = HIGH
Timer xxx ms
Schliesser == HIGH && Timer>xx       = Fehler, da der Timer ja im 
Standartfall garnicht abläuft, da die Spannung weg ist.

Nun soll in diesem Speziallfall der MCU einfach "neu starten", so dass 
die Schaltung einfach korrekt weiter läuft (bzw. dann Fehler anzeigt).

Ist es möglich mit dem MCU Atmega328 einen "Reset" in Software zu 
machen? Also ein Befehl der absolut equivalent mit einem Reset über den 
Reset-Pin ist?

von BeniBastel (Gast)


Lesenswert?

WDC

von Einer K. (Gast)


Lesenswert?

Edgar schrieb:
> Schliesser == HIGH && Timer>xx       = Fehler, da der Timer ja im
> Standartfall garnicht abläuft, da die Spannung weg ist.
Wie soll das gehen?
Wenn die Spannung weg ist, einen Reset per Software auslösen?

von Stefan F. (Gast)


Lesenswert?

benutze mal die Suchfunktion. Denn das wurde gerade erst ausführlich 
diskutiert.

von spess53 (Gast)


Lesenswert?

Hi

>Nun kann es im Fehlerfall passieren, das der Öffnerkontakt des Schalters
>nicht öffnet, somit wäre nach entfernen der Selbsthaltung der
>Spannungsregler immernoch enabled.

Nimm einfach ordentliche Schalter.

MfG Spess

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Spring doch einfach den Programmbeginn an oder falls es ein harter Reset 
sein muss bau einen Transistor an einen Pin, der RESET auf Masse zieht. 
Wenn Du den ansteuerst, bekommt der AVR extern einen Reset, der Pin wird 
automatisch auf tri-state zurückgesetzt und der AVR verlässt die 
Reset-Situation.

von batman (Gast)


Lesenswert?

1
#define soft_reset()        \
2
do                          \
3
{                           \
4
    wdt_enable(WDTO_15MS);  \
5
    for(;;)                 \
6
    {                       \
7
    }                       \
8
} while(0)
9
10
// Function Pototype
11
void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
12
13
14
// Function Implementation
15
void wdt_init(void)
16
{
17
    MCUSR = 0;
18
    wdt_disable();
19
20
    return;
21
}

von Peter D. (peda)


Lesenswert?

Edgar schrieb:
> Nun soll in diesem Speziallfall der MCU einfach "neu starten", so dass
> die Schaltung einfach korrekt weiter läuft (bzw. dann Fehler anzeigt).

Du solltest besser Deinen Programmablauf nochmal überdenken.
In der Regel behandelt man Tastenbetätigungen, ohne jedesmal den MC zu 
resetten. Man bleibt einfach in der Mainloop. Es ist sogar einfacher, da 
man sich in einem Flag den vorherigen Zustand merken und daraufhin 
anders reagieren kann.
Bei einem Reset sind aber alle Variablen gelöscht, d.h. Du kannst ein 
reguläres Reset nicht von einem Tastenreset unterscheiden.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Müsste man direkt mal prüfen, ob bei einem Reset ohne Verlust der 
Betriebsspannung das SRAM gelöscht oder zumindest die Daten darin 
zerstört werden.

von Stefan F. (Gast)


Lesenswert?

Beim Reset wird das RAM nicht von der Hardware gelöscht, aber die 
Initialisierungsroutine, die der C Compiler vor die main() Funktion 
packt, löscht alle Variablen.

Bei Stromausfall geht der RAM Inhalt nach und nach verloren, wie bei 
einem Mensch, dessen Herz stehen geblieben ist.

von Einer K. (Gast)


Lesenswert?

Stefanus F. schrieb:
> die der C Compiler vor die main() Funktion
> packt, löscht alle Variablen.

Hmm...
Nur die globalen und statischen. (?!?!)
Ich glaube, das heißt nicht löschen, sondern initialisieren.
Und für Variablen in der noinit Section gilt das auch nicht.

von Stefan F. (Gast)


Lesenswert?

Ja, es heißt "initialisieren". Wenn im Quelltext auf globaler Ebene "int 
i=3" steht, dann ist es diese Initialisierung, die sie auf 3 setzt.

> Und für Variablen in der noinit Section gilt das auch nicht.

Richtig. Auf solche Sonderlocken wollte ich den Anfänger jetzt nicht 
lenken. Das würde nur weitere Verständnisfragen aufwerfen und ihn dazu 
verleiten, bei seiner kruden Reset-Methode zu bleiben.

von c-hater (Gast)


Lesenswert?

Peter D. schrieb:

> Bei einem Reset sind aber alle Variablen gelöscht, d.h. Du kannst ein
> reguläres Reset nicht von einem Tastenreset unterscheiden.

Nicht in einer vernünftigen Programmiersprache. Da bleiben RAM- und 
selbst MCU-Register-Inhalte über den Reset hinweg erhalten, wenn nicht 
gerade ein PON oder BO die Reset-Ursache war, im ersteren Fall gibt es 
ganz sicher nix im RAM oder den MCU-Registern, auf was man sich 
verlassen könnte, im zweiten Fall könnte es da zwar noch etwas 
Nützliches geben, aber darauf will man sich NICHT verlassen.

Welches die Reset-Ursache war, kann man im Programm ermitteln. Dieses 
Feature ist sogar vollkommen sprachenunabhängig einfachst zu nutzen.

Aber selbst in unsäglichen Sprachen wie C kann man natürlich mit 
entsprechender Kompetenz zumindest teilweise dieses in Assembler mangels 
Startup-Code quasi naturgegebene Verhalten erzeugen. Es läuft dann auf 
Linker-Scripts hinaus, mit denen man bestimmte Datenbereiche (also RAM) 
definiert, in denen der C-Standard-Startup-Code sein gemeingefährliches 
zerstörerisches Werk nicht anrichten darf. Dann muss man "nur" noch die 
gewünschten reset-persistenten Variablen in eben diese Bereiche 
zwingen...

Ja, C ist ja sowas von einfach im Vergleich zu Assembler...

Nein, ist es nicht. C ist Dreck. Macht kaum etwas einfacher, aber vieles 
viel komplizierter.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Nicht in einer vernünftigen Programmiersprache.

Du kannst es nicht lassen. Bewerbe dich bei den Zeugen Jehovas als 
Missionar. Die werden deine Leistung zu schätzen wissen.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

> Du kannst es nicht lassen. Bewerbe dich bei den Zeugen Jehovas als
> Missionar. Die werden deine Leistung zu schätzen wissen.

Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist: ich rede 
ausschließlich über beweisbare Fakten.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist: ich rede
> ausschließlich über beweisbare Fakten.

"vernünftig" ist kein Fakt, sondern eine objektive Bewertung.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

> "vernünftig" ist kein Fakt, sondern eine objektive Bewertung.

Ich gestehe folgendes zu: Die Darstellung der Fakten erfolgte mit einer 
doch deutlich tendenziösen Ausdrucksweise. Das ändert allerdings rein 
garnix an den dargestellten Fakten.

Sie passen dir nur nicht, das ist DEIN Problem. Und das ist nicht 
weniger tendenziös als meins. Capisce?

Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser Sache 
zu diskutieren. Über Fakten hingegen: gerne. Kannst du also irgendwas zu 
meinem Wissen über die C-Welt beitragen, was ich nicht schon lange 
selber weiss?

Dann führe das bitte in deiner Antwort auf. Danke.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser Sache
> zu diskutieren.

Du hast damit angefangen.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

> Du hast damit angefangen.

Falsche Antwort! Fakten waren gefragt.

Überzeuge mich doch einfach von der absoluten Schönheit und tierisch 
einfachen Benutzbarkeit der alleslösenden Programiersprache C...

Aber bitte mit Fakten, nicht mit Meinungen oder meinetwegen auch der 
Negation von Meinungen.

Noch eine Chance...

von Stefan F. (Gast)


Lesenswert?

Ich dachte du wolltest das nicht diskutieren!?

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

> Ich dachte du wolltest das nicht diskutieren!?

Ich wollte nur nicht über Meinungen diskutieren, über Fakten hingegen 
sehr gerne.

Die von dir NICHT aufgeführten Fakten können wir allerdings natürlich 
NICHT diskutieren. Denn es fehlt da irgendwie die 
Diskussionsgrundlage...

Einem echten Programmierer sollten solche überaus trivialen logischen 
Zusammenhänge sofort klar sein...

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Einem echten Programmierer sollten solche überaus trivialen logischen
> Zusammenhänge sofort klar sein...

Allerdings, und der wäre: dass man deine Trollerei so ernst nehmen kann, 
wie das, was schlecht gelaunte Teenager ihren Eltern an den Kopf werfen.

Wie du siehst versuche ich erst gar nicht, gegen deine Argumente 
anzukommen. Mir ist nämlich klar, dass dies lediglich sinnlose 
Zeitvergeudung wäre. Ich kann Dir nur raten, mehr Toleranz gegenüber 
anderen Meinungen zu erlernen, denn das ist die basis für ein 
friedliches Zusammenleben.

Im übrigen bin ich durchaus der Meinung, das C einer der am wenigsten 
eleganten Programmiersprachen ist. Das hält mich jedoch nicht davon ab, 
diese Sprache gerne einzusetzen und anderen dabei zu helfen.

Ich werde auch immer empfehlen, Kinder zu kriegen, obwohl auch das eine 
ziemlich unappetitliche und teure Angelegenheit ist. Kannst ja mal 
darüber nachdenken.

von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> Ich werde auch immer empfehlen, Kinder zu kriegen

Da drängt sich mir doch sofort die Frage auf, ob Haties Eltern der 
gleichen Meinung sind.

von c-hater (Gast)


Lesenswert?

Stefanus F. schrieb:

[NULL Fakten, dafür viel geistiger Dünnschiss bis hin zu überaus 
persönlichen Angriffen]

@Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein 
Problem?

von c-hater (Gast)


Lesenswert?

Thomas E. schrieb:

[NULL Fakten, dafür Dünnschiss bis hin zu überaus persönlichen 
Angriffen]

@Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein 
Problem?

von Thomas E. (thomase)


Lesenswert?

c-hater schrieb:
> Ist doch sonst kein Problem?

c-hater schrieb:
> Ist doch sonst kein Problem?

Das ist doch keine Frage. Auch wenn man es noch so oft wiederholt, ist 
das keine Frage.

von Carl D. (jcw2)


Lesenswert?

c-hater schrieb:
> Stefanus F. schrieb:
>
> [NULL Fakten, dafür viel geistiger Dünnschiss bis hin zu überaus
> persönlichen Angriffen]
>
> @Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein
> Problem?

Weil man dann zuerst deinen Müll rauskehren müsste!

von c-hater (Gast)


Lesenswert?

Carl D. schrieb:

> Weil man dann zuerst deinen Müll rauskehren müsste!

Und noch jemand, der nichts von der Diskussion von Fakten hält und es 
deswegen nicht für nötig hält, irgendwelche anzuführen...

Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe 
beisammen. Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch, 
aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal 
wieder online sind.

Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...

von Carl D. (jcw2)


Lesenswert?

c-hater schrieb:
> Carl D. schrieb:
>
>> Weil man dann zuerst deinen Müll rauskehren müsste!
>
> Und noch jemand, der nichts von der Diskussion von Fakten hält und es
> deswegen nicht für nötig hält, irgendwelche anzuführen...
>
> Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe
> beisammen. Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch,
> aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal
> wieder online sind.
>
> Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...

Nur jemand der Fakten von eigener Meinung unterscheiden kann.

von spess53 (Gast)


Lesenswert?

Hi

Macht euch doch nicht fertig. Den TO interessiert das schon lang nicht 
mehr.

War wohl eher ein konstruiertes Problem.

Mfg Spess

von c-hater (Gast)


Lesenswert?

Carl D. schrieb:

> Nur jemand der Fakten von eigener Meinung unterscheiden kann.

Der aber auch immer noch keine Fakten genannt hat, schon gar keine, die 
zu irgendeiner Neubewertung der realexistierenden Situation hätten 
führen können...

von Thomas E. (thomase)


Lesenswert?

c-hater schrieb:
> Der aber auch immer noch keine Fakten genannt hat, schon gar keine, die
> zu irgendeiner Neubewertung der realexistierenden Situation hätten
> führen können...

Worum geht es hier eigentlich? Hat deine Domina schon wieder frei?

von Stefan F. (Gast)


Lesenswert?

Ich fasse mal zusammen, für alle die den c-hater noch nicht so recht 
kennen:

c-hater schrieb:
>> Bei einem Reset sind aber alle Variablen gelöscht
> Nicht in einer vernünftigen Programmiersprache.
> Aber selbst in unsäglichen Sprachen wie C kann man natürlich ...
> Dann muss man "nur" noch die gewünschten reset-persistenten
> Variablen in eben diese Bereiche zwingen...

Klingt für mich ein wenig verwirrt. Da wird die Programmiersprache als 
"unvernünftig" und "unsäglich" egalbelt, obwohl sie das gewünchte 
Feature bereit stellt.

c-hater schrieb:
> Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist:
> ich rede ausschließlich über beweisbare Fakten.

Die Zeugen Jehova belegn ihre Thesen nachvollziehbar.

c-hater schrieb:
> Ich gestehe folgendes zu: Die Darstellung der Fakten erfolgte mit
> einer doch deutlich tendenziösen Ausdrucksweise. Das ändert
> allerdings rein garnix an den dargestellten Fakten.

Von welchen Fakten faselst du eigentlich? Du hast doch GAR KEINE 
vorgebracht, die deine neagtive Bewertung der Programmiersprache C 
bestätigen!

> Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser
> Sache zu diskutieren.

Es folgen weitere Beiträge von Dir:

> Kannst du also irgendwas zu  meinem Wissen über die
> C-Welt beitragen, was ich nicht schon lange selber weiss?

Kleiner Hinweis: Ich habe weder behauptet noch gemeint, dass du keine 
Ahnung hättest.

c-hater schrieb:
> Fakten waren gefragt.

Fakten für was denn?

> Überzeuge mich doch einfach von der absoluten Schönheit und tierisch
> einfachen Benutzbarkeit der alleslösenden Programiersprache C...

Warum sollte ich das versuchen? Ich habe nie behauptet, dass C absolut 
schön und tierisch einfach sein. Sorry Mann, ich kenne diese Sprache 
seit 30 Jahren nehme keine Drogen und trinke keinen Alkohol. Daher würde 
ich so einen Dünschiss niemals von mir geben.

> Aber bitte mit Fakten, nicht mit Meinungen oder meinetwegen auch der
> Negation von Meinungen.

Ok, dann sage ich meine Meinung nur den anderen, die eventuell mitlesen:
C ist ätzend, erfüllt aber seinen Zweck gut genug, um damit arbeiten zu 
können.

Fakt: Windows und Linux wurdeb in C gebaut. Reicht das?

Wo sind DEINE Fakten für was auch immer? Irgendwie habe ich immer noch 
nicht geschnallt, was du hier eigentlich willst. Platz hier einfach so 
rein, rotzt ein bisschen herum und machst Stress. Wenn es bei dem 
fachlichen Anteil geblieben wäre hätte ich höchstens noch darum gebeten, 
dass du ein Konkretes Beispiel nachreichst, wie mann denn die richtige 
Sektion der gewünschten variablen festlegt. Aber nun hast du die 
Diskussion kaputt gemacht. Gut getrollt!

c-hater schrieb:
> Ich wollte nur nicht über Meinungen diskutieren, über Fakten hingegen
> sehr gerne.

Welche Fakten denn? Ich versuche mal was: Wir haben draußen vor dem 
Fenster gerade 16°C. Nicht gut? Was willst du denn für Fakten lesen?

> Denn es fehlt da irgendwie die Diskussionsgrundlage...

Ach nee, wirklich? Das merkst du aber schnell! Du hast damit angefangen, 
Fakten für Behauptungen zu liefern, die niemand von sich gegeben hat. 
Darüber hinaus hast du damit angefangen, an völlig unpassender Stelle 
ohne Fakten zu nennen über die Programmiersprache herzuziehen. Du 
wurdest weder dazu gereizt noch darum gebeten.

Stefanus F. schrieb:
> Im übrigen bin ich durchaus der Meinung, das C einer der am wenigsten
> eleganten Programmiersprachen ist.

c-hater schrieb:
> NULL Fakten, dafür viel geistiger Dünnschiss

Ich habe Dir gerade einen Fakt genannt (dass ich C auch nicht super 
finde). Nichmal: welche Fakten für was willst du denn lesen? Und wo sind 
deine Fakten.

> bis hin zu überaus  persönlichen Angriffen

Bitte untermauere diese Behaupt mit einem Fakt, zum Beispiel indem du 
den persönlichen Angriff zitierst, auf den du dich beziehst. Ich bin mir 
nämlich keiner solchen Schandtat bewusst.

c-hater schrieb:
> Carl D. schrieb:
>> Weil man dann zuerst deinen Müll rauskehren müsste!
> Und noch jemand, der nichts von der Diskussion von Fakten hält und es
> deswegen nicht für nötig hält, irgendwelche anzuführen...

kenn du den Carl D, oder wie kommst du zu dieser Unterstellung? Bitte 
belege deine Behauptung mit Fakten.

> Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe
> beisammen.

Sicher nicht. Ich sehe keinen einzigen.

> Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch,
> aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal
> wieder online sind.

Es hat sich keiner mehr gemeldet. Merkst du was?

> Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...

Das muss ja ein ganz tolles Wort sein. Hast du das gestern gerade frisch 
gelernt?

c-hater schrieb:
> Der aber auch immer noch keine Fakten genannt hat, schon gar keine,
> die zu irgendeiner Neubewertung der real existierenden Situation
> hätten führen können...

Welche Fakten hast du denn genannt, c-hater?

Thomas E. schrieb:
> Worum geht es hier eigentlich?

Das wüsste ich auch mal gerne.

Und ich wüsste gerne mal, ob der c-hater noch ganz sauber tickt. Jetzt 
darf er mir gerne vorwerfen, ich sei persönlich geworden. Allerdings 
würde das nur von den Fakten ablenken, welche auch immer das sein 
sollen. Nichts genaues weiß man nicht.

von Stefan F. (Gast)


Lesenswert?

Um mal zum Thema zurück zu kommen:

Beim avr-gcc kann man Variablen von der Initialisierung ausschließen, 
indem man sie in die "noinit" Sektion packt.

Hier ist das beschrieben, ganz unten mit konkretem Beispiel-Quelltext:
https://www.nongnu.org/avr-libc/user-manual/mem_sections.html

Ich kann jedem AVR C Programmierer nur raten, die Doku von 
www.nongnu.org zu verwenden. Die Doku von Atmel/Microchip ist in vielen 
Punkten unvollständiger.

von Werner (Gast)


Lesenswert?

c-hater, Du bist echt so eine Nervensäge, lass doch einfach gut sein. 
Geh in Frieden, aber geh.

Werner

von Stefan F. (Gast)


Lesenswert?

Jetzt hat der Kerl mich so aufgeregt, dass meine Rechtschreibung völlig 
im Arsch war. Möchte mich dafür bei allen entschuldigen.

von batman (Gast)


Lesenswert?

Kein Problem. Solange der Arsch jetzt immer richtig geschrieben wird.

von Thomas E. (thomase)


Lesenswert?

Stefanus F. schrieb:
> Jetzt hat der Kerl mich so aufgeregt

Lohnt sich nicht. Ich finde den eher belustigend. Ich stell mir immer so 
einen kleinen dicken Gnom vor, der mit Schaum vorm Mund vor seinem PC 
sitzt und alle paar Minuten vor Wut in seine Tastatur beißt.

von Waidmanns Heil (Gast)


Lesenswert?

Was bin ich froh, daß ich nur noch sporadisch hier hineinsehe...
Die gute Moderation setzt sich also fort, indem man die Leute 
vergrault, die etwas Handfestes beizutragen hatten und dafür die 
Geräuschemacher hofiert.

Ihr habt es wohl wirklich nicht besser verdient.

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.