Hi, hab vor kurzem begonnen mich mit µC's zu beschäftigen. Hab das AVR Tutorial durchgemacht und mir die passende Hardware besorgt. Doch der Anfang ist schwer und deshalb wende ich mich an euch. Ich hab mir den Yampp Programmer zusammengelötet und mit dem ATmega 8 verbunden. Auf der µC Platine befinden sich 2 led's, die an PB0 und PB1 über ein R an +5V angeschlossen sind. Um die Funktionstüchtigkeit zu testen hab ich folgendes Progrämmchen geschrieben (Im Anhang). Die LED's sind aber die ganze Zeit an, anstatt zu blinken. Oder mach ich was falsch??? Übrigens der Yampp programmer erkennt den ATmega8. Gruß Alex
hi! kenne mich mit assembler nicht so aus, aber es ist gut möglich das deine led´s blinken, nur geht das ganze so schnell das du es nicht sehen kannst. wenn möglich mit nem oszi mal messen, oder die oszillatorfrequenz so weit wie möglich runter schrauben und die warteschleifen länger machen. gruss michael
Hallo Alex, wenn ich das jetzt richtig sehe, dann werden in Deinen warteschleifen nur je 258 mal "Dinge" getan. Du hast aber eigentlich mit 3 * 256 "Dinge" gerechnet. Das könnte kurz werden. Brne überprüft das Zero Flag, das wird aber nur einmal Null und rauscht dann aus allen Schleifen raus. Es gibt nur ein Zeroflag, Du musst es also auch auswerten, wenn eine Operation es gesetzt haben kann. Hm, und jetzt finde BRNE nur als Test nach CP, CPI, SUB und SUBI, jedenfalls in meinem AVR Instruction Set. Ich bin kein Profi, habe selbst gerade angefangen, kann mich also auch täuschen. Ach so, ich hab mich beim testen darauf beschränkt, einfach eine LED anzuschalten und die andere aus. Im nächsten Programm habe ich dann das Muster umgedreht. Damit hatte ich keine Probleme mit zu schnell blinkenden LED's. Viele Grüße Sebastian
Falls du denn Quellcode einfach nur kopiert hat liegt es vielleicht ja auch an dem Rechtschreibfehler: brne scleife1
nunja ohne nen timer bzw. ein delay (primitiv) wirste da nicht viel sehen, wenn die led sich in der sekunde nen paar tausendmal an und ausschalten soll
Hi, @Oli was wird denn sonst eingefügt, so ist es doch im Tutorial beschrieben, zumindest heißt es, dass der mega8 zu dem dort eingesetzten µC kompatibel ist. @Fabian Wieso ein paar tausend mal? 3xSchleife je 256=16Mio. Und bei 4MHz müsste die LED doch alle 4sec blinken? Zwar hat sebastian geschrieben, dass die Schleife nur einmal durchlaufen wird, doch beim debuggen im AVR Studio laufen die Schleifen genauso geschachtelt durch und springt auch nichts raus Gruß Alex
Ich geb dir Recht, dass das im Tutorial nicht klar genug herausgearbeitet wird. Für einen Mega8 nimmst du .include "m8def.inc" > Wieso ein paar tausend mal? Weil es ganu das ist was passiert. > 3xSchleife je 256=16Mio. Nicht wirklich. Deine Schleifen sind nämlich in Wirklichkeit nicht ineinander geschachtelt. Ich kann dir nur raten spiel das mal im AVR-Simulator durch. schleife1: dec r17 schleife2: dec r18 schleife3: dec r1 brne schleife3 brne schleife2 brne scleife1 In dem Moment in dem die Statusflags so sind, dass die innerste Schleife (über r1) verlassen werden kann, sind die Flags auch für den nächsten brne so, dass er nicht mehr springt. Und auch für den dritten. D.h. deine 3 'Schleifen' zählen nur r1 runter. Die beiden restlichen brne testen nämlich nicht ab, ob r18 bzw. r17 zu 0 gewroden sind. Die testen immer noch ob r1 zu 0 geworden ist. Wenn man es genau nimmt, und das sollte man in Assemblerprogrammierung, dann testet der brne auch nicht ab ob r1 zu 0 geworden ist. Dem brne ist r1 sowas von Schnuppe. Den interessieren nur die Statusflags. Wer oder was die Statusflags auf einen bestimmten Zustand eingestellt hat, interessiert ihn nicht die Bohne. Nur leider ändern sich die Status Flags nicht wenn der erste brne nicht springt. Der nächste brne testet dieselben Statusflags mit denselben Werten wie der brne direkt vor ihm und kommt, das sollte jetzt nicht verwundern, zum gleichen Ergebnis: nicht springen. Durch deine Einrückung hast du dich selbst ausgetrickst. schleife: dec r1 brne schleife dec r18 brne schleife dec r17 brne schleife Jetzt gehen die Schleifen tatsächlich 256*256*256 mal rundum.
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.