Atmega328 per Software reseten

Gast #5547046
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?
Gast #5547115
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
(Firma: Funkenflug Industries) #5547150
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.
Gast #5547671
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
}
#5547689
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.
Gast #5548024
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.
Gast #5548081
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.
Gast #5549150
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.
Gast #5549176
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.
Gast #5549193
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...
Gast #5549257
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...
Gast #5549293
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.
Gast #5549376
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...
#5549398
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.
Gast #5549694
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.
Gast #5549695
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.
Gast #5549898
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren