Hi, kurze Frage: Sind bei den AVRs standardmäßig alle Register gleich null (abgesehen von im Datenblatt angegebenen Ausnahmen)? Ich frage mich nämlich gerade, ob ich mir etwa beim Setzen von Kontrollregistern die Mühe machen muss, jedesmal auch die Bits zu löschen, welche nicht gesetzt sein sollen. Also ganz allgemein: sind alle DDRx/ Kontrollregister/ Statusregister bei Auslieferung gleich Null?
blabliblub schrieb: > (abgesehen von im Datenblatt angegebenen Ausnahmen)? Das Datenblatt sagt dir zu jedem einzelnen Register den Defaultwert. Warum magst du dem Datenblatt zu deinem AVR nicht glauben?
Bei Auslieferung ist der Chip in aller Regel nicht angeschlossen. Der Registerinhalt ist daher egal. Welche Werte die Register nach einem Reset haben, steht im Datenblatt. Zusammenfassend lässt sich sagen, daß alle Register auf Null gesetzt werden, außer denen, die auf einen anderen Wert gesetzt werden... Oliver
:
Bearbeitet durch User
Danke für die Antwort! Ich verstehe dich also richtig, dass bis auf Exoten alle Register nach dem Reset tatsächlich auf null gesetzt sind, und dass ich diese Ausnahmen bei der "Register description" als solche erkennen kann? Oder wo soll ich sonst im Datenblatt suchen?
Arduino F. schrieb: > Das Datenblatt sagt dir zu jedem einzelnen Register den Defaultwert. Ja, aber wo denn genau? Ich habe zwar das Datenblatt schon (mehrfach) durchgelesen, aber nicht mit Blick auf meine Frage, wäre nett wenn du mir da einen Tipp geben könntest :)
blabliblub schrieb: > aber nicht mit Blick auf meine Frage Dann mache das doch mal mit Blick auf deine Frage!
Ich habe mal einen Screenshot vom Datenblatt des ATmega328 angehangen. Solche angaben findest du in allen AVR Datenblättern zu jedem Register.
http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf 28.9.1. ADC Multiplexer Selection Register Da steht:
1 | Bit 7 6 5 4 3 2 1 0 |
2 | REFS1 REFS0 ADLAR MUX3 MUX2 MUX1 MUX0 |
3 | Access R/W R/W R/W R/W R/W R/W R/W |
4 | Reset 0 0 0 0 0 0 0 |
Für jedes Bit der Reset Wert.
Arduino F. schrieb: >> aber nicht mit Blick auf meine Frage > Dann mache das doch mal mit Blick auf deine Frage! Ist es wirklich Sinn und Zweck eines Forums, bei Fragen einfach auf die Lektüre von mehreren hundert A4 Seiten zu verweisen? Ich frage ja nicht nach einer Seitenzahl, aber das Kapitel wäre hilfreich...
Oh danke Leute!!! Ich habe echt den Wald vor lauter Bäumen nicht gesehen!
> aber das Kapitel wäre hilfreich...
Naja, diese Infos ziehen sich durch das gesamte Datenblatt durch.
blabliblub schrieb: > sind alle DDRx/ Kontrollregister/ Statusregister > bei Auslieferung gleich Null? Bei Auslieferung wird garnichts in die Register geschrieben, sondern nur bei eine erfolgreichen Reset. Steigt die Spannung zu langsam oder nicht monoton an, kann das Poweron-Reset fehlschlagen und der Zustand ist unbestimmt. Daher sollte man immer das Brownout-Reset aktivieren, wenn es auf die 30µA Stromverbrauch nicht ankommt.
Stefan U. schrieb: > Naja, diese Infos ziehen sich durch das gesamte Datenblatt durch. Ja, das hätte ich echt sehen müssen, jetzt kann ich auch Arbeiten F.s Reaktion verstehen. Und Stefanus: ich hatte die Frage schon formuliert, nach dem Abschicken und aktualisieren erst deinen Beitrag gesehen. Damit war natürlich alles klar.
blabliblub schrieb: > jetzt kann ich auch Arbeiten F.s Reaktion verstehen. Ich meine natürlich Arduino F.
Peter D. schrieb: > Bei Auslieferung wird garnichts in die Register geschrieben, sondern nur > bei eine erfolgreichen Reset. Nicht ganz richtig... Die AVR haben individuelle OSCAL Defaults, irgendwo in den Tiefen des Signatur Bereichs. Der MD328-D sogar Kallibrierwerte für den ADC und den Gain OP Die werden VOR der Auslieferung gesetzt, und beim Reset in die betreffenden Register geschrieben.
Na ja, was auch immer „gesetzt“ bei einem spannungslosen Prozessor bedeutet... Oliver
na wieder einmal dieser völlig sinnfreien Fragen. Wenn ich ein Programm schreibe, dann schau ich mir einfach an, was meine verwendeten Register für Default-Werte haben. Wenn ich in einer "höheren" Sprache programmiere, dann ist es eh egal, weil der Compiler alles initialisiert. Was soll das Geschwurbel also über einen Proz, der im Auslieferzustand und spannungslos ist! Hörbi hat niveau, wo, wo, wo...
Beim µC initialisiert der Compiler in der Regel die IO resgister nicht. Wenn man Glück hat macht das eine IO Library, die man einbinden kann. Beim AVR also ggf. die ARduino Umgebung. In der Regel macht man die Initialiserung aber per IOReg = ...., und im Zweifelfall auch dann wenn ggf. per default der richtige Wert schon drin steht. Bei den neueren AVRs kann man die Bit set Befehle doch sowieso nur noch für wenige Register nutzen.
> Wenn ich in einer "höheren" Sprache programmiere, dann ist es eh > egal, weil der Compiler alles initialisiert. Der avr-gcc nimmt nur minimale Veränderungen vor, gerade viel, dass ein minimales C Programm lauffähig ist. Mit fällt da spontan nur der Stack Pointer ein. Beim arm-gcc erzeugt der Compiler IMO überhaupt keinen Initialisierungs-Code. Dort sind es in der Regel ein par Zeilen Assembler, welche die IDE erzeugt und häufig vom Entwickler noch angepasst wird.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.