Forum: Mikrocontroller und Digitale Elektronik Avr Register Standard = 0?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von blabliblub (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
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?

von Arduino Fanboy D. (ufuf)


Bewertung
2 lesenswert
nicht lesenswert
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?

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
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
von blabliblub (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von blabliblub (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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 :)

von Arduino Fanboy D. (ufuf)


Bewertung
1 lesenswert
nicht lesenswert
blabliblub schrieb:
> aber nicht mit Blick auf meine Frage
Dann mache das doch mal mit Blick auf deine Frage!

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Angehängte Dateien:

Bewertung
5 lesenswert
nicht lesenswert
Ich habe mal einen Screenshot vom Datenblatt des ATmega328 angehangen.

Solche angaben findest du in allen AVR Datenblättern zu jedem Register.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
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.

: Bearbeitet durch User
von blabliblub (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
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...

von blabliblub (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oh danke Leute!!! Ich habe echt den Wald vor lauter Bäumen nicht 
gesehen!

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> aber das Kapitel wäre hilfreich...

Naja, diese Infos ziehen sich durch das gesamte Datenblatt durch.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
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.

von blabliblub (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von blabliblub (Gast)


Bewertung
0 lesenswert
nicht lesenswert
blabliblub schrieb:
> jetzt kann ich auch Arbeiten F.s Reaktion verstehen.

Ich meine natürlich Arduino F.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Na ja, was auch immer „gesetzt“ bei einem spannungslosen Prozessor 
bedeutet...

Oliver

von guest...Rainer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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...

von Lurchi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.