AVR ganz hardwarenah programmieren?
Hi,
in der Schule programmieren wir einen Zilog Z80, indem wir direkt die Befehle (in diesem Fall hexadez.) hintereinander in den Programmspeicher schreiben (der Prozessor wird dort im Einzelschrittmodus betrieben).
Ist sowas auch mit einem AVR möglich und wo gibt es dann die Befehle als die direkten Zahlenwerte?
In dem Befehlssatz, den man hier bei Roboternetz downloaden kann ist zwar jeweils der Opcode angegeben, aber soviel mir Wikipedia sagen kann, ist das nur die Nummer eines Befehles! Wo finde ich diese Befehle?
Eine weitere Frage ist: Kann man überhaupt direkt auf den Programmspeicher zugreifen, obwohl ein AVR ja sozusagen ein in sich geschlossenes Controllersystem ist? Wenn nicht, gibt es einen ebenso günstigen Mikrocontroller/-prozessor wie die AVRs? max. 1,50€ oder so? Der sollte dann aber so einfach wie möglich aufgebaut sein!
Bestimmt hat hier jemand schonmal sowas ausprobiert oder weiß was darüber.
Re: AVR ganz hardwarenah programmieren?
Zitat:
Zitat von Jacob2
... in der Schule programmieren wir einen Zilog Z80 ...
Juchei - es gibt sie also noch, die guten alten Z80. Und das nicht nur bei mir im Keller.
Zitat:
Zitat von Jacob2
... programmieren wir einen Zilog Z80, indem wir direkt die Befehle (in diesem Fall hexadez.) hintereinander in den Programmspeicher schreiben ...
Mal nur so nebenbei: im Schreibunterricht habt ihr noch Tontäfelchen oder sind bei euch schon diese Holzdinger mit Wachsfüllung eingeführt (bei denen man einfach viel besser korrigieren kann als bei Ton) ? ?
Ok, jetzt im Ernst. Natürlich könntest Du - theoretisch - auch hex schreiben - aber ich kenne leider keinen Editor, mit dem Du das kannst. Schade. ABER: AVRStudio hat etwas ganz feines: es hat einen Assembler, dort könntest Du so etwas ähnliches machen. Aber der Reihe nach.
Kannst Du bei Dir AVRStudio (mit WINAVR) installieren? Wie ist Deine Rechnerausrüstung?
Die Befehlsübersicht gibts z.B. hier (für den ATmega48PA/88PA/168PA/328P) - einfach downloaden (klick hier drauf) und auf Seite 427 anfangen. Da siehst Du aber leider nur die Mnemonics und nicht den Opcode in hex.
Im AVRStudio könntest Du mit diesen Mnemonics so programmieren - wieder klick, dann kommt ein Beispiel eines einfachen Programmes. Die zugehörigen Opcodes siehst Du hier (was wohl - richtig - klicken *ggg*).
Wenn Du nun ein passendes Programm geschrieben und assembliert hast, dann könntest Du etwas Feines machen: Du kannst den Programmablauf im Simulator (des AVRStudio) laufen lassen - auch im Einzelschritt - und dabei kannst Du Registerveränderungen, Auswirkung von Befehlen - z.B. Sprünge etc. sehen - ohne dass Du einen Mikrocontroller kaufen müsstest. Und AVRStudio gibt es - zusammen mit dem AVRGCC umsonst (na ja - wie heißt es: ausgenommen Verbindungskosten *ggg*).
Zitat:
Zitat von Jacob2
... Eine weitere Frage ist: Kann man überhaupt direkt auf den Programmspeicher zugreifen ...
Nein - der Programmspeicher kann nur unter bestimmten Voraussetzungen beschrieben werden. ABER: im Simulator (siehe oben) geht das. Wie gesagt: kostet (fast) nur Mühe.
Wär das was für Dich?
Gut - es bliebe noch die Frage nach dem Nutzen. Du könntest mal überlegen ob - und inwieweit - der RISC auch wirklich ein RISC und kein CISC ist. Und wozu ein so ein reduzierter Instruction Set gut sein könnte - das wird Dir vermutlich aus der Z80-Quälerei aber schon geläufig sein.
Nachtrag: natürlich kannst Du in Hex auch bei At mels programmieren: Notepad öffnen und z.B. dies hier reinschreiben:
Code:
:020000020000FC
:1000000009C031C0189539C01895189518951895DC
:10001000189518957FE97DBF79E177BBC19A76E0A5
:1000200076B971E077B973E073BF72E075BF70E4C1
:100030007BBFF89474B771FD01C011C070E07BBF45
:1000400045E0C49A4AD054171CF438D061FFFBCF66
:10005000C49848D070E48AB786FD7ABF7BBF789495
:100060000000FDCF08950FB729D0603011F00FD0F8
:1000700002C02ED000C00FBF18951FB7222722BF85
:100080003395303510F0332753951FBF189570E026
:100090007BBF45E0C39A882720D0541724F40ED0A4
:1000A000603011F0FACF80E1C3981CD084FF10D0EB
:1000B00070E48AB786FD7ABF7BBF0895379A369A77
:1000C0003699FECF369A3699FECF65B137980895A6
:1000D00041E0C09A0AD0C0980895552772E079BFD0
:1000E00078940895772779BF0895F7DF5417F0F3D0
:0400F000F9DF089597
:00000001FF
Dies ist übrigens der Hexfile des oben erwähnten Programms . . . Gut was? DAS könnte man im AVRStudio im Assembler reinladen - und dann durchklickern. Und Fehler über Fehler sehen - es sei denn, das hatte der Assembler schon gemacht als er die Hexdatei erstellt hat.