PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie verhält sich ein leerer (neuer) AVR?



SprinterSB
01.02.2006, 10:18
Hallo,

gibt es eigentlich Angaben darüber, wie sich ein leerer (neuer) AVR in einer Schaltung verhält? Wenn man also einen neuen AVR in die (ISP-fähige) Schaltung einsetzt um ihn zu programmieren.

Bevor der Progger loslegt, läuft der AVR ja los. Das Flash ist leer, also mit FF besetzt, was keine gültige Instruktion zu sein scheint. Spätestens wenn der Code am Flash-Ende ankommt passieren doch unvorhersehbare Dinge (Ports als OUT schalten, etc?)

Im Handbuch ist da nix zu gesagt.

Das Problem hat man auch, wenn man einen AVR in eine andere Schaltung "umziehen" will und in der alten Schaltung löscht (erase). Oder muss man da extra eine zwischenschaltung bereithalten zum Code-Wechsel?

Ratber
01.02.2006, 10:39
Wenn er brandneu ist dann macht er überhaupt nix.

Nach einem Reset sind alle Ports als Eingang geschaltet,hier kann also auch nix passieren was den Controller betrifft (Pegelkollisionen und damit Schaden).
Was die Angeschlossene Schaltung betrifft ist das was anderes.
Da kann es ohne Führung natürlich probleme geben wenn man das nicht berücksichtigt.


Unvorhergesehene Dinge passieren nur wenn hinter einem Programende noch Daten stehen (zb. Datazeilen) die ohne definiertem Programende irrtümlich als Code ausgeführt werden können.
Da der Controller nicht progrsmiert ist pasiert das auch nicht.


Was den umzug in eine andere Schaltung betrifft so ist natürlich klar das er mit der alten Programierung dort einen Schaden verursachen könnte.

Da ist es angebracht ihn vorher extern zu Programieren.
Besser ist es aber ihn noch in der alten Schaltung zu löschen bevor man ihn verpflanzt.
so vermeidet man ärger.

Ich mache dabei auch gleich einen Check ob alle Speicherzellen noch in ordnung sind.

askazo
01.02.2006, 10:41
Ein unprogrammierter AVR stellt alle Register auf ihre Default-Werte ein.
Diese sind im Datenblatt angegeben. Alle I/Os werden als Eingänge konfiguriert.

Wenn der Programmcounter am Flash-Ende ankommt, springt er automatisch wieder an den Anfang des Flashs. Der AVR führt also bis in alle Ewigkeit NOP aus. Es passieren keine unvorhergesehenen Dinge. Man muss auch zum Code-Wechsel keine Zwischenschaltung einbauen.

askazo

Da war Ratber schneller :)

SprinterSB
01.02.2006, 10:54
Die Register (GPR) werden nicht initialisiert, nur die SFRs.

Ein nop ist doch 00 00, und nicht FF FF. Ein Erase setzt den Flash doch auf FF, oder nicht *grübel*?

askazo
01.02.2006, 11:11
Die GPRs haben ja auch keinen direkten Einfluss auf die Pins des AVRs. Wichtig sind eben die SFRs, und die werden initialisiert.

Mit dem NOP hast Du recht, das wäre 0x0000.
Ich habe bisher aber noch nirgendwo eine Assembler-Tabelle vom AVR gefunden, in der die passenden Hex-Werte zu den Mnemonics stehen.
Aber 0xFFFF darf dann auch keine Auswirkungen auf die Pins haben.

askazo

SprinterSB
01.02.2006, 11:49
In avr-instruction-set von Atmel stehen keine Opcodes, da sind nur die Mnemonics aufgeführt. FF FF ist jedenfalls keine gültige Instruktion. Keine Ahnung was sie macht oder und woher Chertykov seine Info hat...



/* Opcode table for the Atmel AVR micro controllers.

Remaining undefined opcodes (1699 total - some of them might work
as normal instructions if not all of the bits are decoded):

0x0001...0x00ff (255) (known to be decoded as `nop' by the old core)
"100100xxxxxxx011" (128) 0x9[0-3][0-9a-f][3b]
"100100xxxxxx1000" (64) 0x9[0-3][0-9a-f]8
"1001001xxxxx01xx" (128) 0x9[23][0-9a-f][4-7]
"1001010xxxxx0100" (32) 0x9[45][0-9a-f]4
"1001010x001x1001" (4) 0x9[45][23]9
"1001010x01xx1001" (8) 0x9[45][4-7]9
"1001010x1xxx1001" (16) 0x9[45][8-9a-f]9
"1001010xxxxx1011" (32) 0x9[45][0-9a-f]b
"10010101001x1000" (2) 0x95[23]8
"1001010101xx1000" (4) 0x95[4-7]8
"1001010110111000" (1) 0x95b8
"1001010111111000" (1) 0x95f8 (`espm' removed in databook update)
"11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f]
*/

Ratber
01.02.2006, 15:36
Na wie auch immer.
Bei FF passiert nix.