Halli Hallo! Ich habe folgendes problem: Ich wollte mit hilfe meines boards (atmega16) mit einem simplen programmcode 2 LED´s nacheinander blinken lassen und die zeit zwischen den blinkvorgängen mit einer stopuhr stoppen, da ich eine wartezeit von ca 0,7-0,8 sekunden brauche. das programm funktioniert einwandfrei... klar, ist auch sehr simpel. allerdings kann ich das programm nicht simulieren, da AVR Studio 4 beim aufrufen der makros hängen bleibt. Ist das eine bekannte krankheit von AVR Studio 4? Ich glaube nicht, dass ich das makro falsch geschrieben habe, weil die LED`S blinken einwandfrei! Vielen dank schonmal im Vorraus. Alexander Porgrammcodefragment: .macro warte clr r0 clr r1 ldi r17,4 mov r2,r17 loop: dec r0 brne loop dec r1 brne loop dec r2 brne loop .endmacro start: sbi portd,5 ;LED 1 An warte ;HIER bleibt der Simulator hängen cbi portd,5 ;LED 1 Aus sbi portd,6 ;LED 2 An warte cbi p ortd,6 ;LED 2 Aus rjmp start
Der bleibt nur scheinbar hängen. Wie Du leicht ausrechnen kannst, verheizt Dein Delay ungefähr 4 256 256 * 3 = 780000 Taktzyklen (wie man darauf kommt? Selbst überlegen!). Der Simulator braucht einfach eine Weile, bis er da durch ist. Bei mir dauert es ca. 10 Sekunden.
Ich sehe grade, du hast recht! Ich bin was AVR angeht noch nen anfänger, sorry :> Tausend dank! Alex
Hallo, unabhängig davon: in der Assembler-Hilfe bei den Befehlsbeschreibungen steht die Anzahl Takte drin, die der AVR für jeden Befehl braucht. Windows hat einen Rechner im Zubehör und die Taktfrequenz, die Dein AVR benutzt, solltest Du auch kennen. Du kannst es also ganz ohne Stoppuhr wesentlich genauer festlegen... Gruß aus Berlin Michael
Ach ja. Makros werden nicht aufgerufen. Wenn du ein Makro verwendest, wird der im Makro stehende Code an der Stelle des Makros eingesetzt Das Makro vereinfacht also nur etwas die Schreibweise. Aber im Grunde ist dein Programm äquivalent zu
1 | start: |
2 | |
3 | sbi portd,5 ;LED 1 An |
4 | |
5 | clr r0 |
6 | clr r1 |
7 | ldi r17,4 |
8 | mov r2,r17 |
9 | |
10 | loop1: |
11 | dec r0 |
12 | brne loop1 |
13 | dec r1 |
14 | brne loop1 |
15 | dec r2 |
16 | brne loop1 |
17 | |
18 | cbi portd,5 ;LED 1 Aus |
19 | sbi portd,6 ;LED 2 An |
20 | |
21 | clr r0 |
22 | clr r1 |
23 | ldi r17,4 |
24 | mov r2,r17 |
25 | |
26 | loop2: |
27 | dec r0 |
28 | brne loop2 |
29 | dec r1 |
30 | brne loop2 |
31 | dec r2 |
32 | brne loop2 |
33 | |
34 | cbi p ortd,6 ;LED 2 Aus |
35 | rjmp start |
Die taktfrequenz ist 4 MHZ, folgich 0,25µs pro takt, das kenn ich alles, aber die anzahl der takte für nen bestimmten befehl hab ich noch nicht gefunden! aber danke für den tip, ich werds beherzigen
@ Karl heinz Buchegger Jaah, ich weis schon selbst, was makros machen und für was sie gut sind xD soo planlos bin ich auch nicht :> aber danke für die mühe
Alexander schrieb: > aber die anzahl der takte für nen bestimmten befehl hab ich noch nicht > gefunden! Datenblatt ab Seite 333 (rechte Spalte). Gruß, Magnetus
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.