Hallo, hab mal 2 kurze Fragen zum ATmega16: 1. Muss ich die Fusebits immer manuell setzen bzw. einstellen. auch wenn ich die Includedatei verwende (muss man ja eigentlich) und mit Ponyprog flashe (mit welchem Programm ist ja im Prinzip egal, oder?) 2. Kann ich eigentlich statt den Assemblerbefehlen "icall" und "rcall" auch den einfachen Befehl "call" verwenden. (ein anderes Beispiel wäre "ret" und "reti")
Zu 1: Ja. Fuses haben (bis auf die JTAG-Fuse) nichts mit dem Programm zutun; eine Include-Datei aber schon. zu 2: ret und reti sind zwei (völlig) verschiedene Befehle. Ret ist der Rücksprung aus einem Unterprogramm und reti der Rücksprung aus einer ISR. Zu den anderen Befehlen sollte die Instruction Set Summary etwas "sagen" können.
zu 1.: also brauch ich die fuses bei einem neu gekauften µc nicht immer zu setzen? zu 2.: ok, ist geklärt
>zu 1.: also brauch ich die fuses bei einem neu gekauften µc nicht immer >zu setzen? Wenn dir die Grundeinstellung zusagt, brauchst du auch nichts ändern. Wenn sie aber nicht dem entspricht, was du brauchst, wirst du sie ändern müssen. Wo ist denn das Problem?
Zu 1. ist schon alles gesagt... Zu 2.: ret und reti sind nicht völlig verschieden. Der einzige Unterschied ist, dass reti das I-Bit im SREG setzt und dementsprechend die Interrupt-Bearbeitung wieder freigibt. Das ist wichtig beim Rücksprung aus einem Interrupt Handler. Man kann sagen: Rücksprung aus einem "normalen" Unterprogramm, das mit call, rcall oder icall aufgerufen wurde, immer mit ret, Rücksprung aus Interrupt Handler mit reti. rcall ist ein relativer Unterprogrammaufruf, der aufgrund der verfügbaren Adressbreite max. 8 KiB Programmspeicher (4 Ki-Worte) adressieren kann, aber weniger Speicher (1 Programmwort) benötigt, als der normale call (2 Worte). Deshalb gibt es auf den AVRs bis einschl. 8 KiB Flash auch nur den rcall-Befehl, weil sich mit dem der komplette Speicher ansprechen lässt. Bei den AVRs ab 16 KiB Flash brauchts dann den call. Gleiches gilt für jmp und rjmp (und wegen der größeren Breite von jmp gegenüber rjmp sind auch bei den AVRs ab 16 KiB die Interrupt-Vektoren doppelt so breit, eben damit auch ein jmp reinpasst; beliebter Anfänger- bzw. Umsteiger-Fehler!). icall ist ein indirekter call, der die Sprungmarke nicht im Befehl selbst eingebaut hat, sondern diese aus einem Pointer-Register bezieht.
ähm, das ist jetzt bestimmt relativ dumm, aber wie ist die grundeinstellung? So wie im datenblatt beschrieben, also die pnnbelegung und ähnliches.
Die Grundeinstellung ist das, was im Datenblatt unter "Fuse Bits" in den Tabellen unter "default value" steht. Kann doch nicht SO schwer sein, oder?
ja ok, habs kapiert. aber kann das eigentlich sein, das wenn ich an den fusebits nichts eingestellt habe, und den mc mit einem programm geflsht habe, das er dadurch kaputt gegangen ist?
Spyro wrote: > ja ok, habs kapiert. aber kann das eigentlich sein, das wenn ich an den > fusebits nichts eingestellt habe, und den mc mit einem programm geflsht > habe, das er dadurch kaputt gegangen ist? Durch das Programmieren allein sicher nicht (es sei denn, Dein Programmiergerät entspricht nicht den Vorgaben und hat den µC gekillt...)
die widerstände im programmiergerät (hab ich mir selber gebaut) sind ja hauptsächlich nur dazu da, um die copmuterbuchse zu schützen und nich den controller? ich habe einen druckeranschluss, und da 220ohm widerstände dazwischen.
@ Spyro (Gast) >2. Kann ich eigentlich statt den Assemblerbefehlen "icall" und "rcall" >auch den einfachen Befehl "call" verwenden. (ein anderes Beispiel wäre NEIN! icall springt auf die Adresse des Z-Registers rcall ist ein relativer Sprung, der max. +/- 4096 Adressen weit geht call ist ein absoluter Spung, welcher 64K Adressraum anspringen kann, ist nicht auf allen AVRs verfügbar >"ret" und "reti") GANZ FALSCH! ret beendert ein Unterprogramm reti beendet einen Interrupt und setzt dabei das I-Statusbit MFG Falk
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.