Forum: Mikrocontroller und Digitale Elektronik AVR Tiny 13, EEPROM schreiben, der Prozessor ist danach "von der Rolle"


von Hartmut W. (killozap)


Lesenswert?

Ich hab auf dem Tiny13 ein kleines Programm entwickelt, welches 
Steuerimpulse eines Fernsteuer-Empfängers auswertet und damit zwei 
weitere Servo-Ausgänge anbietet. Das läuft auch alles wunderbar. Nun 
habe während der Zeit nach dem Einschalten eine Funktion eingebaut, die 
eine Messung der Eingangs-Impulse ermöglicht. Diese Wege sollen im 
EEPROM gespeichert werden,dazu habe ich das Atomic-Beispiel aus dem 
Datenblatt benutzt, Programmiersprache ist Assembler. Auch die Werte 
werden problemlos in den ersten vier Bytes des EEPROMS abgelegt.

Aber dann läuft das Programm so, als sei das Timing total verstellt. Die 
Servoausgänge bewegen die Servos in "komische Stellungen", das 
Eingangssignal wird auch nicht mehr korrekt ausgewertet.

Starte ich den Prozessor neu, ohne erneut eine Einmessung durchzuführen, 
so werden die Daten aus dem EEPROM gelesen, das Programm läuft dann 
völlig korrekt.

Der Prozessor läuft mit knappen 10 MHz (interner Oszillator), der Teiler 
ist (manuell im Programm) auf 1 gesetzt. Habe ich was im Handbuch 
überlesen? Muss der Teiler vor dem EEPROM-Schreiben auf 8 gesetzt 
werden? Interrupts sind während des Schreibens deaktiviert.

Wenn alle Stricke reißen und das nicht zu lösen ist, so würde ich gerne 
einen Reset ausführen. Macht man das am besten über den Watchdog-Counter 
oder gibt es eine einfachere Möglichkeit?

Danke für Eure Tipps...

von Peter D. (peda)


Lesenswert?

Es ist immer wieder prickelnd, wie jemand krampfhaft versucht, das 
Zeigen von Code zu vermeiden.
Code läßt sich nicht beschreiben, zumindest nicht, wenn ein Fehler zu 
suchen ist. Da muß der exakte, vollständige, ohne Warnungen 
compilierbare Code her, sonst ist das witzlos.

Narürlich ist eine zusätzliche Beschreibung immer gut. Daran kann man 
oft erst erkennen, was der Programmierer eigentlich will.
Am besten ist es natürlich, wenn das gleich als Kommentar im Source 
steht (Funktionsheader usw.). Dann steigt der Programmierer auch ein 
Jahr später durch seinen eigenen Code durch.
Kommentare sind nicht für andere, sondern vor allem für einen selbst!


Peter

von Hartmut W. (killozap)


Lesenswert?

Also, der Codes ist nix dolles, nix, was mich Reich macht. Ich halte es 
ganz einfach für diese Grundsätzliche Anfrage (Tiny 13, 
EEPROM-Schreiben, danach Timing verhunzt) für Unsinn, Code einzufügen.
Der EEPROM-Schreib-Befehl ist das Beispiel aus dem Datenblatt, wird das 
EEPROM nach dem Messen nicht geschrieben, so läuft alles. Also ist ein 
Fehler im Code nahezu auszuschließen. Es muss um ein Grundsätzliches 
Problem gehen, vielleicht ist auch der Tiny kaputt, muss ich noch 
testen.

Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den 
Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im 
AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird 
mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit 
Kleinbuchstaben schreiben können.

von Cyblord -. (cyblord)


Lesenswert?

Hartmut Wagener schrieb:

Der Killozap, wie schön. Huhu!

> Also ist ein
> Fehler im Code nahezu auszuschließen. Es muss um ein Grundsätzliches
> Problem gehen, vielleicht ist auch der Tiny kaputt, muss ich noch
> testen.

Meist ist es leider doch ein Fehler im Code. Eigentlich praktisch immer.

von Peter D. (peda)


Lesenswert?

Hartmut Wagener schrieb:
> Also ist ein
> Fehler im Code nahezu auszuschließen.

Wieviel Jahre programmierst Du schon?
Je länger man programmiert, umso vorsichtiger wird man mit solchen 
Behauptungen. Der Grund ist, sie waren immer falsch.


Ich programmiere lieber in C, dann hat man schonmal nen Haufen 
Trivialfehler ausgeschlossen.
Fehler sind dann fast nur rein logische, d.h. man schreibt nicht das 
hin, was man meint.


Peter

von Hartmut W. (killozap)


Lesenswert?

Na, Assembler schreib ich seit 1980 ...

Cyblord, kennen wir uns vom RC-Line-Forum?

von spess53 (Gast)


Lesenswert?

Hi

>Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den
>Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im
>AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird
>mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit
>Kleinbuchstaben schreiben können.

Halte ich für ein Gerücht.

MfG Spess

von Hartmut W. (killozap)


Angehängte Dateien:

Lesenswert?

spess53 schrieb:
> Hi
>
>>Das einzig komosche ist, dass der SBIC-Befehl am Anfang (der auf den
>>Abschluss eines evtl. noch stattfindenden EEPROM-Vorgangs wartet) im
>>AVR-Studio in Großbuchstaben geschrieben werden muss, der Befehl wird
>>mit kleinen Buchstaben nicht erkannt, alle anderen Befehle habe ich mit
>>Kleinbuchstaben schreiben können.
>
> Halte ich für ein Gerücht.

Der Editor des AVR-Studios zeigt bekannte Befehle farblich markiert an. 
Beim sbic-Befehl macht er das nur, wenn er groß geschrieben wird.

von Cyblord -. (cyblord)


Lesenswert?

Hartmut Wagener schrieb:
> Na, Assembler schreib ich seit 1980 ...
>
> Cyblord, kennen wir uns vom RC-Line-Forum?

Ja woher denn sonst?

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Ich wette auf einen Fehler im Programm :-)

von Hartmut W. (killozap)


Angehängte Dateien:

Lesenswert?

So, hier ist das Programm angehängt. Die EEPROM-Write-Routine ist hier 
in den Sourcetextes eingefügt, aber auch als Sub-Routine passiert das 
selbe.

Die EEPROM-Write-Routine wird innerhalb eines Timer-Interrupts 
aufgerufen, ich hab auch schon versucht, das außerhalb zu machen, aber 
ohne Erfolg, da lief gar nix mehr.

von Jodo Schauno (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Es ist immer wieder prickelnd, wie jemand krampfhaft versucht, das
> Zeigen von Code zu vermeiden.

Nicht nur das. Auch der stets aussagekräftig gewählte Titel des Beitrags 
ist ehr als Erlebnisbericht zu verstehen: der Prozessor ist danach "von 
der Rolle".

[Versteckte Beleidigung gelöscht]

von Herr M. (herrmueller)


Lesenswert?

Das mit dem SBIC ist nur bei Dir so, aber ich vermisse auch die .include 
Datei. Welche hast Du genommen.
Wenn ich das richtig sehe, läuft das ganze Programm im Timer-Interrupt, 
der alle 25µs aufgerufen wird. Da bleibt nicht viel Zeit, auch noch das 
EEprom zu beschreiben.
Ausserhalb der IR Routine kann gar nichts funktionieren, da das Status 
Register nicht gesichert wird.
Warum muss der Interrupt so schnell hintereinander aufgerufen werden? 
Das macht keinen Sinn, wenn die IR-Routine viel, viel, aber auch ganz 
viel, länger ist.
Für was brauchst Du denn den Timer?


Gruss
HerrMueller

von Hartmut W. (killozap)


Lesenswert?

Also, der EEPROM-Write läuft innerhalb des Timer-Interrupts.

Wenn ich das recht verstanden habe, so wird die Behandlung von 
Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine 
bearbeitet wird.

Also ist es völlig egal, wie oft da was aufgerufen wird, da es keine 
Rolle spielt, wenn die Interrupt-Behandlung mal länger dauert.

Also kann auch ein EEPROM beschrieben werden, da erst nach dem reti die 
Interrupts wieder aktiviert werden.

Oder sehe ich das falsch?

von Hartmut W. (killozap)


Lesenswert?

Ach, übrigens, das mit dem SBIC bzw. sbic ist auf meinem Rechner hier 
und auf meinem Notebook so, beide aber mit selbem Release installiert. 
Also bei mir zwei mal ... Muss wohl mal ne Fehlermeldung rausgeben.

von Heinz (Gast)


Lesenswert?

"Wenn ich das recht verstanden habe, so wird die Behandlung von
Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine
bearbeitet wird."

Nö, nested Interrupt geht auch.

von MWS (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Assembler schreib ich seit 1980 ...

So schaut das aber nicht aus, eigentlich eher grausam.

Problem dürfte sein, dass bei der Verzögerung das EEprom zu schreiben, 
der 8Bit-Timer während des Schreibens überläuft.

Daraufhin ist TOV0 bereits wieder gesetzt, ohne dass die ISR zu Ende 
ist. Das hat zur Folge, dass die ISR sofort nach RETI wieder neu 
ausgeführt wird.

Vor dem RETI wird aber der Timer vorgeladen und läuft nach 18 Takten 
über. Zum Zeitpunkt des erneuten Zählerüberlaufs wird die ISR bereits 
erneut ausgeführt, TOV0 wird somit immer wieder innerhalb der ISR 
gesetzt und die ISR's folgen ohne Verzögerung.

Der Timer nimmt dann keine andere Funktion mehr außer der einer 
Endlosschleife wahr.

Ein Löschen des TOV0 vor dem RETI dürfte Wunder wirken.

von Hartmut W. (killozap)


Lesenswert?

MWS schrieb:
> Hartmut Wagener schrieb:
>> Assembler schreib ich seit 1980 ...
>
> So schaut das aber nicht aus, eigentlich eher grausam.


Nun, sind wir hier bei nem Schönheitswettbewerb? Solche Kommentare sind 
verzichtbar...

Ich hab hier im Forum schon mal vor einigen Jahren eine Frage gestellt 
bzgl. der Möglichkeiten der Ein/Ausgänge der Chips, da wurde mir 
mitgeteilt, ich sollte doch die Datenblätter konsultieren. Heute habe 
ich es ausprobiert und weiß endlich mehr.

Soll das hier ein Forum sein, in dem Fragen zur 
Mikrocontroller-Programmierung gestellt werden können oder ist das ein 
Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung 
wurde ja schon auf meine Meldung gelöscht, sind die 
Elektronik-Programmierer nur so drauf oder was?

von Hartmut W. (killozap)


Lesenswert?

Heinz schrieb:
> "Wenn ich das recht verstanden habe, so wird die Behandlung von
> Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine
> bearbeitet wird."
> Nö, nested Interrupt geht auch.

Seite 13 Atiny 13 -
"Wenn ein Interrtupt ausgeführt wird, so werden alle weiteren Interrupts 
unterbunden. Es ist aber möglich, verschachtelte Interrupts zu 
ermöglichen."

Ich lasse hier jetzt mal alle Kommentare sein ...

von RTL II (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Soll das hier ein Forum sein, in dem Fragen zur
> Mikrocontroller-Programmierung gestellt werden können oder ist das ein
> Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung
> wurde ja schon auf meine Meldung gelöscht, sind die
> Elektronik-Programmierer nur so drauf oder was?

Ist ja nicht so das schon versucht wurde dir zu helfen.
Aber du hast dann zuerst mal hervorgehoben das du ja schon seit 32 
Jahren ASM code schreibst und indirekt damit gesagt das damit alles gut 
ist und Kritiken am Code lächerlich sind.

Und dann lieferst du nen Code der quasi geguttenbergt ist und regst dich 
darüber auf das dich dann keiner mehr so richtig ernst nimmt?

Mann, Mann, Mann...

von Hartmut W. (killozap)


Lesenswert?

Nun, wenn ich alös Gast Namens RTL-II hier so eine Antwort posten würde, 
dann würde ich auch "Mann Mann Mann" schreben. Wie arm ist das denn?

Und meinen Code gegutenbergt zu bezeichnen, das ist die Höhe. Was für 
ein Dünnpfiff ...

von RTL II (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Und meinen Code gegutenbergt zu bezeichnen, das ist die Höhe. Was für
> ein Dünnpfiff ...

Niemand macht solche Kommentare in ASM:

/* Ausgabe-Programmteil */

..und jetzt besser mal Dampf ablassen bevor bei dir noch mehr Tippfehler 
entstehen.

von Cyblord -. (cyblord)


Lesenswert?

Hartmut, in der Tat sind die Sitten hier etwas rauher, das kannst du mit 
rcline aber mal gar nicht vergleichen...
Trotzdem stimmt die Kompetenz meistens und man bekommt auf fast alle 
Fragen eine Antwort.
Aber du musst dir halt auch was sagen lassen. Auch zu deinem Code denn 
darin steckt nunmal das Problem.

> Heinz schrieb:
>> "Wenn ich das recht verstanden habe, so wird die Behandlung von
>> Interrupts automatisch unterbunden, sofern eine Int5errupt-Routine
>> bearbeitet wird."
>> Nö, nested Interrupt geht auch.
>
> Seite 13 Atiny 13 -
> "Wenn ein Interrtupt ausgeführt wird, so werden alle weiteren Interrupts
> unterbunden. Es ist aber möglich, verschachtelte Interrupts zu
> ermöglichen."
>
> Ich lasse hier jetzt mal alle Kommentare sein ...

Es stimmt beides. Beim Einstieg in eine ISR wird das I-Bit automatisch 
gelöscht. ABER man kann es in der ISR auch sofort wieder aktivieren und 
dann sind nested interrupts möglich.

gruß cyblord

von Hartmut W. (killozap)


Lesenswert?

Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der 
Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts 
absichtlich wieder aktiviere, so geht mich das alls nix an ...

Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist 
als Gäste posten ... :)

Na, da kommt ja Freude auf ... :)

von Heinz (Gast)


Lesenswert?

Na Hartmut, unterbunden hört sich halt nach nicht möglich an. Das stimmt 
ja nicht. Vorrübergehend deaktiviert wäre richtig.

von Cyblord -. (cyblord)


Lesenswert?

Hartmut Wagener schrieb:
> Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der
> Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts
> absichtlich wieder aktiviere, so geht mich das alls nix an ...

Aber nur fast. MWS hat da ja was zu geschrieben. Wenn innerhalb der ISR 
ein weiterer Interrupt erfolgt, so wird zwar nicht gesprungen, aber das 
zugehörige Flag wird trotzdem gesetzt. Und wenn nun die ISR zuende ist, 
wird sofort nach dem reti wieder hinheingesprungen. Und das widerholt 
sich endlos.
Ich weiß nicht ob dies die Ursache für dein Problem ist, aber es ist 
ganz sicher kein guter Programmierstil und führt fast immer zu einem 
nicht gewollten Programmverhalten. Du könntest am Ende der ISR das Flag 
auch manuell löschen. Dann wird aufjedenfall erst wieder beim nächsten 
Interrupt gesprungen. Aber wie gesagt, schön ist anders.

gruß cyblord

von Hartmut W. (killozap)


Lesenswert?

RTL II schrieb:
> Niemand macht solche Kommentare in ASM:
>
> /* Ausgabe-Programmteil */
>
> ..und jetzt besser mal Dampf ablassen bevor bei dir noch mehr Tippfehler
> entstehen.

Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses 
oder was? So was blödes hab ich lange nicht gelesen ...

Honkiger geht es wohl kaum noch ...

von Herr M. (herrmueller)


Lesenswert?

Schade um die Zeit, in der ich Dein Programm angeschaut habe.
Vielleicht versuchst Du Dein Glück lieber woanders.

von Heinz (Gast)


Lesenswert?

Na, mit 32 Jahren ASM Erfahrung und einem Programm, dass nach 
menschlichem Ermessen als fehlerfrei angesehen werden kann ist das Glück 
vielleicht dein bestes Pferd :D

von Hartmut W. (killozap)


Lesenswert?

@Herrmueller: Wieso Schade?

Findest du es also in Ordnung, dass Gäste hier Kommentare über 
Programmierstil abgeben und dabei den Kontakt zur Realität verlieren?

Ich lasse mich gerne kritisieren, aber bitte nicht so, dass jemand sein 
Ego aufbessern will... Das ist absolut unterste Kanone, geht gar nicht. 
...

von Hartmut W. (killozap)


Lesenswert?

Oh, noch mehr Gäste, die die Finger nicht still halten können ...

von Heinz (Gast)


Lesenswert?

Ich wärme mich nur am late night flame.

von RTL II (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> ch lasse mich gerne kritisieren, aber bitte nicht so, dass jemand sein
> Ego aufbessern will... Das ist absolut unterste Kanone, geht gar nicht.

Hmm, aus irgendeinem Grund hat ja gerade der OP damit angefangen.

von Mikel (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Also, der Codes ist nix dolles,
da hast Du recht

>Wenn alle Stricke reißen und das nicht zu lösen ist, so würde ich gerne
>einen Reset ausführen.

Schlies einfach am Resetpin ein Signal an das alle paar ms ein Reset 
auslöst. die Lösung ist gut genug für dich.

>Na, Assembler schreib ich seit 1980 ...
 ... und jetzt dein zweiter Versuch?

von pompete (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Oh, noch mehr Gäste, die die Finger nicht still halten können ...

....wie sollte man auch, bei so einer zart besaiteten und zu gleich von 
sich selbst so überzeugten seele wie dir ;-)
nimm nicht immer alles so persönlich, vor allem solltest du als "reifer 
erwachsener" mit 32 jahren programmiererfahrung über solchen kommentaren 
stehen und diese müde belächeln können.
es ist schon klar, das nicht immer der code ein glanzstück ist, gerade 
in der entwicklungsphase.
bis auf wenige ausnahmen möchte ich den code von manchen pöplern gern 
mal sehen, der wird garantiert nicht besser sein...

so,nun zurück zum thema.....bist du inzwischen weiter gekommen?
hast du dich nicht evtl. doch in der interruptsache vertan?
irgendein register nicht gerettet,wodurch der rücksprung undefiniert 
erfolgt?

von (prx) A. K. (prx)


Lesenswert?

Hartmut Wagener schrieb:

> Nun, sind wir hier bei nem Schönheitswettbewerb?

Wenn es um vermutete Programmfehler handelt, dann gehts oft eben nicht 
anders, als dass andere Leute den Code betrachten. Und da kommt die 
Lesbarkeit des Codes ins Spiel.

Allein schon ganz trivial erscheinende Dinge können da schon eine Rolle 
spielen, beispielsweise deutliche Trennlinien zwischen Hauptprogramm und 
den einzelnen Unterprogrammen und Interrupt-Handlern.

Und wenn man dann schon einen recht grossen optisch schwach 
strukturierten Interrupt-Handler hat, in dem sich das ganze Programm 
befindet, dann empfiehlt es sich, die Spaghettis ansatzweise zu 
entwirren, indem man den Namen von Labels der damit verbundenen 
Bedeutung oder zumindest der Bedeutung der jeweiligen Programmsektion 
zuzuordnet. Statt sie global durchzunummerieren.

Natürlich hast du das Programm nicht für andere geschrieben, sondern für 
dich. Es könnte also egal sein. Bis zu dem Punkt, wo man im Forum landet 
und "gezwungen wird" den Code rauszurücken. Dann muss man damit leben, 
dass andere sich drüber äussern. Mit der höflicheren Variante, sich 
gleich abzuwenden, ist dir nämlich auch nicht gedient.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

"Schönheit" ist vielleicht ein etwas merkwüdiger Begriff im Kontext
"Programmieren" - führt aber zu lesbarem Code wo es Spaß macht sich
damit zu befassen. So überfliege ich das und verliere die Lust
daran. Wenn sich der Programmautor so wenig Mühe gibt ...

von MWS (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Form, in dem Opfer gesucht werden, um abzulästern? Eine Beleidigung
> wurde ja schon auf meine Meldung gelöscht, sind die
> Elektronik-Programmierer nur so drauf oder was?

Wer vorgibt 32 Jahre Assembler zu schreiben und z.B. derartige 
nichtssagende Labels und unstrukturierten Code schreibt, muss sich das 
sagen lassen.
Es als Beleidigung zu betrachten ist persönliche Sichtweise, erst mal 
war's nur eine Feststellung und sonst nichts.

Hast Du wenigstens, nachdem Du die Klappe bis an die Kiefergelenke 
aufgerissen hast, den eigentlichen Inhalt meiner Nachricht auf dem 
Controller ausprobiert ?

von spess53 (Gast)


Lesenswert?

Hi

>so,nun zurück zum thema.....bist du inzwischen weiter gekommen?
>hast du dich nicht evtl. doch in der interruptsache vertan?
>irgendein register nicht gerettet,wodurch der rücksprung undefiniert
>erfolgt?

Sein oben gepostetes Programm besteht nur aus einem Interrupt mit 
allen Konsequenzen für mögliche Erweiterunhgen.

Eigentlich stäuben sich bei dem 'Programm' bei mir die Nackenhaare. Die 
angesagten mehr als 30 Jahre Programmieren sind anscheinend nicht 
sonderlich mit Erfahrungsgewinn begleitet gewesen zu sein.

MfG Spess

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Hartmut Wagener schrieb:
> Na, Assembler schreib ich seit 1980 ...

das heißt nicht, daß er das 32 Jahre lang gemacht hat. Auch nicht,
daß er sich mit diesem Prozessor beschäftigt hat ...

von Rolf M. (rmagnus)


Lesenswert?

Hartmut Wagener schrieb:
> Nun, aber da hatte ich halt recht, es ist drissegal wie lange ich in der
> Interrupt-Routine brauche, wenn ich nicht selbst die Interrupts
> absichtlich wieder aktiviere, so geht mich das alls nix an ...

So ein Code ist aber Murks. Die Wahrscheinlichkeit, damit irgendwelche 
komischen kaum behebbaren Timingprobleme zu bekommen, ist extrem hoch. 
Und die hast du ja auch. Da du dir aber zu dem Thema nix sagen läßt und 
die Erklärung mehrfahch ignoriert hast wirst du wohl mit den Fehlern 
leben müssen.

> Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist
> als Gäste posten ... :)

Wer dir seine ehrliche Meinung zu dem Programm sagt, ist deshalb noch 
nicht ein Selbstdarsteller. Der bist eher du, wenn du behauptest, seit 
32 Jahren Assembler zu programmieren, um damit zu belegen, daß dein 
Programm ja ganz toll sein muß und über jeglicher Kritik steht.

Hartmut Wagener schrieb:
> Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses
> oder was? So was blödes hab ich lange nicht gelesen ...
>
> Honkiger geht es wohl kaum noch ...

Ach, und du regst dich darüber auf, wenn andere dich beleidigen?

von Hartmut W. (killozap)


Lesenswert?

Zur benutzten Include-Datei: Die braucht man beim aktuellen AVR-Studio 
nicht, wenn man den Prozessor dort auswählt, die wird dann automatisch 
eingebunden.

Ich hatte versucht, die EEPROM-Schreibroutine ins "Hauptprogramm" zu 
verlagern und über ein Flag mitzuteilen, wann geschrieben werden soll. 
Das hat aber gar nicht funktioniert, daher habe ich die Routine wieder 
ins Interrupt-Programm gelegt.

von Hartmut W. (killozap)


Lesenswert?

Rolf Magnus schrieb:
> Wer dir seine ehrliche Meinung zu dem Programm sagt, ist deshalb noch
> nicht ein Selbstdarsteller. Der bist eher du, wenn du behauptest, seit
> 32 Jahren Assembler zu programmieren, um damit zu belegen, daß dein
> Programm ja ganz toll sein muß und über jeglicher Kritik steht.

Nun, Selbstdarsteller wurde von mir benutzt, als hier jemand 
"gegutenbergter Code" geschrieben hat. Die "Behauptung", seit 32 Jahren 
Assembler zu programmieren hab ich nur gemacht, weil jemand danach 
gefragt hat.

Nirgends hab ich geschrieben, dass mein Programm über jeder Kritik 
steht.

Und es gibt keinerlei Gründe, die eine Beleidigung auch nur im 
entferntesten erlauben würden

MWS schrieb:
> Hast Du wenigstens, nachdem Du die Klappe bis an die Kiefergelenke
> aufgerissen hast, den eigentlichen Inhalt meiner Nachricht auf dem
> Controller ausprobiert ?

Nein, hab ich nicht, ist Sonntag ... Auch habe ich meine Klappe nicht 
bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen 
Vermutungen? :)

von Hartmut W. (killozap)


Lesenswert?

A. K. schrieb:
> Hartmut Wagener schrieb:
>
>> Nun, sind wir hier bei nem Schönheitswettbewerb?
>
> Wenn es um vermutete Programmfehler handelt, dann gehts oft eben nicht
> anders, als dass andere Leute den Code betrachten. Und da kommt die
> Lesbarkeit des Codes ins Spiel.
>
> Allein schon ganz trivial erscheinende Dinge können da schon eine Rolle
> spielen, beispielsweise deutliche Trennlinien zwischen Hauptprogramm und
> den einzelnen Unterprogrammen und Interrupt-Handlern.
>
> Und wenn man dann schon einen recht grossen optisch schwach
> strukturierten Interrupt-Handler hat, in dem sich das ganze Programm
> befindet, dann empfiehlt es sich, die Spaghettis ansatzweise zu
> entwirren, indem man den Namen von Labels der damit verbundenen
> Bedeutung oder zumindest der Bedeutung der jeweiligen Programmsektion
> zuzuordnet. Statt sie global durchzunummerieren.
>
> Natürlich hast du das Programm nicht für andere geschrieben, sondern für
> dich. Es könnte also egal sein. Bis zu dem Punkt, wo man im Forum landet
> und "gezwungen wird" den Code rauszurücken. Dann muss man damit leben,
> dass andere sich drüber äussern. Mit der höflicheren Variante, sich
> gleich abzuwenden, ist dir nämlich auch nicht gedient.

Ich bin mir durchaus bewusst, dass eine derartige Labelnamen-Vergabe 
nicht optimal ist, aber ein derartiges Programm wächst halt. Um spätere 
Verschönerung kann man sich immer noch kümmern.

Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob 
jemand schreibt "Grausam" und Vermutungen über die Intelligenz des 
Programmierers anstellt oder ob man höflich darauf hinweist, dass die 
Namensgebung nicht optimal ist. Menschen, die halt provozierend 
schreiben ("geguttenbergt" usw.), das sind halt wirklich 
Selbstdarsteller, die meinen, ihr Ego durch solche Schreiberei aufbauen 
zu müssen. Auch wenn sie Tipps geben, die vielleicht zielführend sein 
könnten, sie machen das alles kaputt, da sie herablassend und abwertend 
schreiben. Vermutlich ist aber der Samstag-Abend die schlechteste Zeit, 
um eine Frage in diesem Forum zu stellen...

Danke jedenfalls für deine Antwort, die keinerlei unnötige Polemik 
enthält.

von @echo (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob
> jemand schreibt "Grausam" und Vermutungen über die Intelligenz des
> Programmierers anstellt ...

Im Unterschied zu defekten Schaltkreisen oder nicht funktionabler 
Software können Menschen "nicht nicht-kommunizieren" (vgl. Watzlawick, 
P.; 
https://de.wikipedia.org/wiki/Watzlawick#.E2.80.9EMan_kann_nicht_nicht_kommunizieren.21.E2.80.9C).

Dieser Hauptsatz menschlicher Kommunikation sollten in erster Linie 
diejenigen beachten, die einleitend ein Thema eröffnen (TO). Was nun 
folgt ist zunächst eine Reaktion darauf.

Dabei hat die Wahl der Überschrift eine gestaltende Wirkung. Wenn nun 
wie z.B. bei diesem Thema bei einem Mikroprozessor die Zuschreibung "von 
der Rolle" gewählt wird, darf man sich nicht wundern, wenn dies gerne 
metaphorisch aufgenommen und weiterverwendet wird.

Man kann es Foristen nicht verübeln, wenn sie dies als dankbare Beiträge 
zur Bespaßung aufgreifen - nicht nur am Samstag Abend, sondern für alle 
Zeit solange der Beitrag lesbar bleibt.

von Peter D. (peda)


Lesenswert?

Mit Assembler mache ich kaum noch was, spess53 ist hier der King darin.

Du solltest Deinem Programm eine Struktur verpassen, Spaghetti-Codestyle 
ist nicht der Bringer. Da sehen andere kaum durch und Du nach einiger 
Zeit auch nicht mehr. Die Spaghetti-Code Phase sollte man eigentlich 
nach spätestens 2 Jahren Programmiererfahrung hinter sich gelassen 
haben.

Schreibe für jede Aufgabe eine Funktion, die Du aufrufst. Und falls Du 
Angst hast, die Call+Ret kosten zuviel Zeit, schreibe sie als 
Funktionsmacro.


Vermutlich ist in Deinem Programm eine Statemaschine versteckt, die 
durch die langen EEPROM-Schreibzeiten aus dem Tritt kommt.
Eine Statemaschine kann aus dem Tritt kommen, daher sollte sie einen 
Synchronisationsmechanismus haben, um sich selber wieder einzufangen. 
Sie muß also so programmiert sein, daß sie aus jedem möglichen Zustand 
in einen gültigen Zustand zurück findet.

Für das EEPROM Schreiben mache eine Funktion. Diese sollte das Byte erst 
prüfen, ob überhaupt ein Schreiben notwendig ist.

Um die Schreibzeit einzusparen, nimm den EEPROM-Interrupt oder mache es 
abweisend. D.h. wenn das letzte Schreiben noch nicht fertig ist, mache 
was anderes. Du kannst es auch in der Mainloop machen.


Peter

von MWS (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Auch habe ich meine Klappe nicht
> bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen
> Vermutungen? :)

Eine kleine Auswahl:

> in dem Opfer gesucht werden, um abzulästern?

> gegutenbergt zu bezeichnen, das ist die Höhe. Was für
> ein Dünnpfiff

> Und ich muss mich vor Selbstdarstellern hier in Acht nehmen, die meist
> als Gäste posten ... :)

> Was soll denn der Kack? Niemand schreibt sowas in ASM? Bist du Moses
> oder was? So was blödes hab ich lange nicht gelesen ...
> Honkiger geht es wohl kaum noch ...

> Bei der Beantwortung einer Frage ist es dann halt ein Unterschied, ob
> jemand schreibt "Grausam" und Vermutungen über die Intelligenz des

Und eine Vermutung über die Intelligenz des Programmierers hab' ich eben 
nicht angestellt. Man könnte sagen, ich habe die genannte ASM-Erfahrung 
seit 1980 hinterfragt, den Rest hast Du hinein interpretiert.

Ansonsten hatte ich mir zumindest die Mühe gemacht den Fehler in Deinem 
schwer zu lesenden Quellcode zu erkennen und lieferte Dir einen Hinweis. 
Ob's DER Hinweis ist, wissen wir, wenn Du das SBI TIFR, TOV0 eingebaut 
hast.

von Cyblord -. (cyblord)


Lesenswert?

Jetzt mal wieder on-topic hier:

Hast du dich jetzt mal der problematischen Interruptsache angenommen? 
Wurde dadurch irgendwas besser?

von Hartmut W. (killozap)


Lesenswert?

Ich hab im Moment den Progger nicht am Start geht erst wieder morgen 
früh, die Familie will auch mal was von einem haben ...

Ich würde die EEPROM-Routine viel lieber aus dem Interrupt-Bereich 
herausholen, aber das hatte beim ersten Versuch überhaupt nicht 
geklappt.

Schaun wir morgen mal weiter ...

von Bernd (Gast)


Lesenswert?

MWS schrieb:
> Hartmut Wagener schrieb:
>> Auch habe ich meine Klappe nicht
>> bis an die Kiefergelenke aufgerissen, wie kommst du zu solchen
>> ellt. Man könnte sagen, ich habe die genannte ASM-Erfahrung
> seit 1980 hinterfragt, den Rest hast Du hinein interpretiert.
>
> Ansonsten hatte ich mir zumindest die Mühe gemacht den Fehler in Deinem
> schwer zu lesenden Quellcode zu erkennen und lieferte Dir einen Hinweis.
> Ob's DER Hinweis ist, wissen wir, wenn Du das SBI TIFR, TOV0 eingebaut
> hast.

Vergebene Liebesmüh, der Code-Stil ist gruselig und daran erkennt man 
zumeist auch das entsprechende Logik-Design. Trifft hier beides zu.

von Hartmut W. (killozap)


Lesenswert?

Bernd schrieb:
> Vergebene Liebesmüh, der Code-Stil ist gruselig und daran erkennt man
> zumeist auch das entsprechende Logik-Design. Trifft hier beides zu

Bla bläh blubber fasel ...

von Hartmut W. (killozap)


Lesenswert?

MWS schrieb:
> Man könnte sagen, ich habe die genannte ASM-Erfahrung
> seit 1980 hinterfragt, den Rest hast Du hinein interpretiert.


Nun, das kann man sehen wie man will. Wenn Du meinst, dass es 
zielführend ist, Worte wie "grausam" in Posts zu verwenden, dann ist das 
Deine Sache. Ich habe jedenfalls diesen Post am Anfang gar nicht weiter 
durchgelesen, denn warum sollte ich mir etwas durchlesen, wenn derartige 
unangebrachte Sprache verwendet wird? Ist dann zwar nett, dass du dir 
denn Code durchgelesen hast, aber nicht nur ich werde derart reagieren, 
wenn die Netiquette nicht eingehalten wird.
Ein kleines, winzig kleines Smiley nach dem Grausam hätte alles 
verändert ...

von Hartmut W. (killozap)


Lesenswert?

So, Problem ist gelöst:

Ich habe, nachdem ich das Programm auf dem Chip kaufen hatte, den 
Debugger/Simulator kaum noch angefasst. Die EEPROM-Routine hatte ich 
versucht, aus dem Interrupt-Teil herauszuholen über ein FLag, welches 
mitteilt, wann ein EEPROM-Write erwünscht ist.

Im Programm hatte ich dan in der EEPROM-Write-Routine absichtlich den 
SEI-Befehl ausgeklammert, um festzustellen, ob die Subroutine aufgerufen 
wird, obwohl eigentlich nicht gespeichert werden sollte (Gespeichert 
werden soll nur, wenn man innerhalt ber ersten fünf Sekunden den Knüppel 
des Fernsteuer-Senders bewegt). Und siehe da, das Teil blieb hängen.

Nun habe ich das Programm so im Debugger durchlaufen lassen und war 
erstaunt dass auch hier ein Aufruf der EEPROM-Routine erfolgte. 
Langsames Abbarbeiten der einzelnen Schritte zeigte dann das Problem 
auf: Die Flags wurden während der Abfrage des Write-Flags durch die 
Interrupt-Routine verändert, so dass ein Aufruf stattfand, obwohl das 
Register des Write-Flagsnoch den Wert 0 hatte. Daher habe ich nun am 
Anfang der Interrupt-Routine das SREG-Register auf den Stack gesichert 
udn am Ende wieder hergestellt, und siehe da, das Programm läuft wie die 
Wutz.

Der Aufruf des EEPROM-Write aus der Interrupt-Routine kann noch andere 
Problemchen gemacht haben, die ich aber ohne Stimulis im Debuger 
schlecht überprüfen kann.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Na geht doch. Gratuliere.

Solche Fehler werden bei einer sauberen Planung und Realisation
von Anfang an vermeidbar. Leicht.

von Hartmut W. (killozap)


Lesenswert?

Ich betreibe das als Hobby, daher kann ich mir den Aha-Faktor erlauben, 
das passiert mir auch nicht noch ein zweites mal ...

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Hartmut Wagener schrieb:
> Ich betreibe das als Hobby, daher kann ich mir den Aha-Faktor erlauben,
> das passiert mir auch nicht noch ein zweites mal ...

Klar. Aber das nächste Mal weißt Du's ;)

In 42 Jahren geht's dann weiter ? :-)))

von MWS (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Ich habe jedenfalls diesen Post am Anfang gar nicht weiter
> durchgelesen, denn warum sollte ich mir etwas durchlesen, wenn derartige
> unangebrachte Sprache verwendet wird?

Das war nicht unangebracht, sondern die Wahrheit. Und unabhängig davon, 
ob mir des Anderen Sprache gefällt oder nicht, würde ich immer auf den 
Inhalt der Nachricht achten.

> Ist dann zwar nett, dass du dir denn Code durchgelesen hast, aber nicht
> nur ich werde derart reagieren, wenn die Netiquette nicht eingehalten
> wird.

Na, wenn Du die Netiquette zitierst, dann pack' Dich doch mal selbst an 
der Nase. Zart-beseelt würde ich Deine Ausdrucksweise auch nicht nennen. 
Außerdem frag Dich doch mal selbst, wie aufgrund der nun erkannten 
Problematik, da überhaupt etwas ohne Code zu machen gewesen wäre.

Der Code kam dann mal im 11. Post dieses Threads, das war genauso wenig 
nett, denn die Frage aus Deinem ersten Post war auf Basis Deines 
Beitrages schlicht nicht beantwortbar.

> Ein kleines, winzig kleines Smiley nach dem Grausam hätte alles

Ein Smiley hätte bedeutet, dass ich's nicht so meine. Wobei Du natürlich 
die Vorlage mit

> Na, Assembler schreib ich seit 1980 ...

selbst aufgebaut hast. Wenn man sich so lange mit Assembler beschäftigt, 
dann schreibt man im eigenen Interesse keinen solchen Code wie den 
gezeigten.

von Hartmut W. (killozap)


Lesenswert?

> Das war nicht unangebracht, sondern die Wahrheit.

Es spielt ganz einfach keine Rolle, ob etwas die Wahrheit ist. Will man 
helfen und auch,d ass die Hilfe angenommen wird, so lässt man sowas 
besser sein.

> Zart-beseelt würde ich Deine Ausdrucksweise auch nicht nennen.

Nun, wenn einem Therapie-Bedürftigkeit in einem der vorderen Posts 
nachgesagt wird, dann ist es halt vorbei mit der Gelassenheit.

> Der Code kam dann mal im 11. Post dieses Threads, das war genauso wenig
nett,

Was hat das mit nett zu tun? Man kann den Code dann liefern, wenn man 
ihn zur Verfügung hat. Schon krass, was hier für Kosntrukte gebildet 
werden.

> Ein Smiley hätte bedeutet, dass ich's nicht so meine.

Das halte ich für unwahr. Es wäre genau so bei mir und jedem anderen 
angekommen.

> selbst aufgebaut hast. Wenn man sich so lange mit Assembler beschäftigt,
dann schreibt man im eigenen Interesse keinen solchen Code wie den
gezeigten.

Das mag ja alles schön und gut sein, aber es ist halt nicht deine 
Aufgabe, mir dies mitzuteilen.

von MWS (Gast)


Lesenswert?

Hartmut Wagener schrieb:
> Nun, wenn einem Therapie-Bedürftigkeit in einem der vorderen Posts

Nicht von mir. Außerdem, das Leben ist kein Ponyhof.

Hartmut Wagener schrieb:
> Das mag ja alles schön und gut sein, aber es ist halt nicht deine
> Aufgabe, mir dies mitzuteilen.

> Will man helfen und auch,d ass die Hilfe angenommen wird, so lässt man
> sowas besser sein.

Ich denke, Du hast die falsche Vorstellung von einem Diskussionsforum.

a) es dient, wie's der Name so schön sagt, der Diskussion. Eine 
Diskussion kann sehr weit gespannt werden, ist aber sicher nicht darauf 
beschränkt jemand helfen zu müssen. Wäre die Aufgabenstellung zu 
leistende Hilfe für ein bestimmtes Produkt, so würde sich's 
Support-Forum oder bezahlter Support nennen.

b) Eine "Aufgabe" in eigentlichen Sinne habe ich nicht und muss ich auch 
nicht wahrnehmen, ich bin ein ganz normaler Diskussionsteilnehmer. Weder 
muss ich Dir helfen, noch mir von Dir sagen lassen, wie mein 
Diskussionsbeitrag auszusehen hat. Auch ein Beitrag mit lediglich der 
Aussage: "Der gezeigte Code ist eigentlich eher grausam." wäre noch 
legitim gewesen, da zutreffend und themenbezogen.

c) Gehen wir mal davon aus, dass Du 1980 um die 20 Jahre alt warst, so 
bist Du jetzt um die 50, also in einem Alter in dem keine heftigen 
Trotzreaktionen mehr zu erwarten sind. Ich muss Dir also nicht den Bauch 
kraulen, nur damit Du Dir dann freundlicherweise meine Lösung ansiehst.

Prinzipiell bin ich interessiert zu erfahren, ob der von mir gefundene 
Fehler auch der tatsächliche war. Andererseits, wenn Du es so hältst, 
Dir nicht passende Kommentare ungeachtet deren Inhalts zu überlesen, 
dann ist das letzten Endes Dein Schaden und nicht meiner.

von Herr M. (herrmueller)


Lesenswert?

Herr Mueller schrieb: Datum: 04.03.2012 00:01
> Ausserhalb der IR Routine kann gar nichts funktionieren, da das Status
> Register nicht gesichert wird.

Hartmut Wagener schrieb: Datum: 05.03.2012 06:52
> Daher habe ich nun am
> Anfang der Interrupt-Routine das SREG-Register auf den Stack gesichert
> udn am Ende wieder hergestellt, und siehe da, das Programm läuft wie die
> Wutz.

Verstehst Du nun, warum ich geschrieben habe:

Herr Mueller schrieb:
> Schade um die Zeit, in der ich Dein Programm angeschaut habe.

Wenn Du die Antworten, die man Dir geschrieben hat auch gelesen hättest, 
anstatt 40 Posts und 1 1/2 Tage lang nur beleidigt um Dich zu schlagen, 
wär dir der Zeitverlust und einige 'Beleidigungen' erspart geblieben.

Eigentlich würde mich jetzt nur noch interessieren, auf was für einem 
Gerät Du 1980 Assembler propgrammiert hast.


herrmueller

von Hartmut W. (killozap)


Angehängte Dateien:

Lesenswert?

Nicht vom Monitor verwirren lassen, das Teil hatte keine Grafikkarte ...

Es gab eine 8080-Karte und später eine Z80-Karte, 2KB RAM, 2KB 
batteriegepufferter RAM, 3 8 Bit-Ports. Alle Platinen wurden von mir und 
meinem Bruder hergestellt.

von Herr M. (herrmueller)


Lesenswert?

Cool!

Ich kannte damals jemanden, der hate einen AIM65 von Rockwell (6502).
Auf dem hatte ich ein bisschen 'programmiert'. Allerdings ohne ein 
Assemblerprogramm. Ich hatte die Befehle einzeln in Hex eingegeben.
Das waren noch Zeiten.

von Hartmut W. (killozap)


Lesenswert?

Ja, genau so hab ich die auch eingegeben. 78 MOV A,B, C2 JNZ CA JZ, 
diese Hexcodes weiss ich heute noch ... Und bei den Branches musste man 
immer schön zählen ... (beim Z80, der 8080 kannte keine Branches)

von (prx) A. K. (prx)


Lesenswert?

Herr Mueller schrieb:

> Ich kannte damals jemanden, der hate einen AIM65 von Rockwell (6502).
> Auf dem hatte ich ein bisschen 'programmiert'. Allerdings ohne ein
> Assemblerprogramm. Ich hatte die Befehle einzeln in Hex eingegeben.

Dann wars kein AIM65 oder du hast sie aus einem Hex-Listung abgetippt. 
Der AIM65 hatte nämlich einen simplen nicht-symbolischen Assembler im 
Monitorprogramm, da war anders als beim KIM-1 kein Hex nötig.

von Hartmut W. (killozap)


Lesenswert?

Wer so ein wenig Feeling für diese Computergeneration bekommen möchte, 
der kann sich ja die erste Chip herunterladen:

http://www.chip.de/downloads/c1_downloads_auswahl_15815484.html?t=1331074379&v=3600&s=f4a6f1c2317e6ff2111fbb34356275d4

Mein Bruder hatte die damals gekauft, aber ich kann die nicht mehr 
finden, ist wohl irgendwann doch ins Altpapier gewandert ...

von Simon K. (simon) Benutzerseite


Lesenswert?

Tja, ich bin zu jung um das mitgemacht zu haben. Aber im Gegensatz zu 
manch anderem bin ich da auch nicht traurig drüber, denn SO hätte ich 
bestimmt kein Spaß am Programmieren gefunden :-P

Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in 
einer Datei, alles stur untereinander geschrieben) schreibt, wenn man 
das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine 
Code-Strukturierung möglich.

Das sinnvolle Strukturieren des Codes ist gewissermaßen genau das, was 
einen guten Programmierer ausmacht (heutzutage). Klar, damals war man 
ein guter Programmierer, wenn man die Assembler-Befehle in HEX-Code 
auswendig konnte :-P

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Und Du gehörst zu denen die nur ab XML aufwärts lesen können ...

Was ein Unsinn.

von spess53 (Gast)


Lesenswert?

Hi

>Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in
>einer Datei, alles stur untereinander geschrieben) schreibt, wenn man
>das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine
>Code-Strukturierung möglich.

Seit wann kann man in Assembler nicht strukturiert programmieren?

>Das sinnvolle Strukturieren des Codes ist gewissermaßen genau das, was
>einen guten Programmierer ausmacht (heutzutage).

Damals auch schon. Schlechten Code kann man in jeder Programmiersprache 
produzieren. Das ist kein Privileg von Assembler. Das 'Programm' vom TO 
ist kein Maßstab.

MfG Spess

von ich (Gast)


Lesenswert?

Simon K. schrieb:
> Ist doch kein Wunder, dass man derartigen Code wie oben (d.h.: alles in
> einer Datei, alles stur untereinander geschrieben) schreibt, wenn man
> das auf so einem Gerät gelernt hat. Denn dort ist ja überhaupt keine
> Code-Strukturierung möglich.

Die Strukturierung sollte halt nicht erst beim eingeben mit dem Gerät 
passieren.

Wenn man sich das ASM Programm vorher auf einem Blatt Papier aufschreibt 
kann man das genauso strukturieren wie heute auch, nur das eintippen 
dauert halt etwas länger.

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.