Forum: Mikrocontroller und Digitale Elektronik Makros Simulieren mit AVR Studio 4


von Alexander (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

...ungefähr 4 · 256 · 256 · 3 = 780000 Taktzyklen

von Alexander (Gast)


Lesenswert?

Ich sehe grade, du hast recht! Ich bin was AVR angeht noch nen anfänger, 
sorry :>
Tausend dank!
Alex

von Michael U. (amiga)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von Alexander (Gast)


Lesenswert?

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

von Alexander (Gast)


Lesenswert?

@ 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

von Magnus Müller (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Im AVR-Studio Cursor auf Befehl setzen und F1 drücken --> Kontexthilfe.

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
Noch kein Account? Hier anmelden.