Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem Simulator im Studio


von Lordi (Gast)


Lesenswert?

Moin Moin ich mal wieder,

Ich habe ein Problem mit dem AVR-Studio. Und zwar folgendes ich will ein 
Assamblerprogramm schrieben in dem eine Zeitschleife von ca einer Stunde 
erforderlich ist. Nun habe ich diese Zeitschleife geschrieben und mit 
Werten gefüllt. Mich gefreut das es klappt, nun wollte ich sehen wie 
lange die Schleife wirklich braucht.
Hierzu habe ich das ganze in den Simulator gejagt. Nun dachte ich mir 
das will ich nicht durch Stepen also nen Step Over bei den Rcall befehl 
für den Timer gemacht damit er die Schleife so durch leuft und nur den 
Takt anzeigt. Nun warte und warte und warte ich und nix kommt raus.
Ich also auf break geklickt und siehe da nach 10 minuten hat der gerade 
mal 9 sekunden simuliert.
Kann man diesen Prozess des Simulierens verschnellern? So das er selbst 
nur ausrechnet wie viele Takte er braucht und das ergebniss mit dem 
Druck der Stepover Taste ausgibt? Hab leider Problme bei der Berechnung 
der Schleife deswegen wollte ich das Studio Rechnen lassen. Ich kriege 
immer schräge ergebnisse dabei raus.

Würde mich über eine Schnelle antwort freuen falls das einer nachrechnen 
mag packe ich noch den Quellcode mit rein. Frequenz sind 4Mhz.

Gruß

Gismo
1
timer_1h:
2
3
  ldi r20,0x03
4
h_1_4:
5
  ldi r19,0xff  
6
h_1_3:  
7
  ldi r18,0xff
8
h_1_2:
9
  ldi r16,0xff
10
h_1_1:  
11
  ldi r17,0xff
12
start_1:  
13
  dec r17
14
  brne start_1
15
  dec r16 
16
  brne h_1_1
17
  dec r18
18
  brne h_1_2
19
  dec r19
20
  brne h_1_3
21
  dec r20
22
  brne h_1_4
23
  
24
25
  ldi r18,0xff
26
h_2_1:  
27
  ldi r17,0xff
28
h_2_2:
29
  ldi r16,0xff
30
start_2:
31
  dec r16
32
  brne start_2
33
  dec r17
34
  brne h_2_2 
35
  dec r18
36
  brne h_2_1
37
38
  
39
  ldi r16,0x67
40
start_3:
41
  dec r16
42
  brne start_3
43
  ret

von Karl H. (kbuchegg)


Lesenswert?

Lordi schrieb:

> Ich also auf break geklickt und siehe da nach 10 minuten hat der gerade
> mal 9 sekunden simuliert.

9 Sekunden ist nicht viel, aber so in etwa war damit zu rechnen.


> Druck der Stepover Taste ausgibt? Hab leider Problme bei der Berechnung
> der Schleife

Dann sieh zu, dass du deine Probleme damit gebacken bist.
Die kleinen grauen Zellen schlagen auf lange Sicht gesehen jeden anderen 
Ansatz

Timer im CTC Modus aufsetzen um auf eine Sekunde (oder einen 
ganzzahligen Teil davon) zu kommen. Dann 3600 Sekunden in der ISR 
abzählen.
Sollte doch wirklich nicht zu schwer sein.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr

von Frankl (Gast)


Lesenswert?

Hast Du beim Simulator auch die richtige Frequenz eingestellt ?

von Oliver (Gast)


Lesenswert?

Lordi schrieb:
> Und zwar folgendes ich will ein
> Assamblerprogramm schrieben in dem eine Zeitschleife von ca einer Stunde
> erforderlich ist. Nun habe ich diese Zeitschleife geschrieben und mit
> Werten gefüllt. Mich gefreut das es klappt, nun wollte ich sehen wie
> lange die Schleife wirklich braucht.

Um es kurz zu machen: Vergiß es.

Du kannst eventuell die innere Schleife durchlaufen lassen, und das dann 
auf die Stunde hochrechnen, aber sonst geht da nichts.

Oliver

von Lord_Gismo (Gast)


Lesenswert?

Jop, Hab ich gemacht. Was das berechnen angeht hab ich leider allen 
anschein nach ein verständniss problem:

Wenn ich die erste Schleife
1
start_1:  
2
  dec r17
3
  brne start_1

braucht er pro durchlauf 764 Tackte
soweit so gut nun kommt die dazugehörige 2. Schleife
1
h_1_1:  
2
  ldi r17,0xff
3
start_1:  
4
  dec r17
5
  brne start_1
6
  dec r16 
7
  brne h_1_1

Diese Bedeutete doch das alle 764 Tackte r16 einmal -1 gerechnet wird.
Dieser gesammte Prozess, bis zur Rückkehr in die 1. Schleife, dauert 4 
Takte.
Das heißt das, bis die 2. schleife 0 ergibt (255*4)*764 Takte vegangen 
sind oder ?
Also würde sich daraus doch ergeben das 779280 Takte vergangen sind bis 
die nächste Schleife -1 gerechnet wird.

Wenn man nun diese berechnung in das Studio reintippt kommt aber herraus 
das 195857 Tackte vergangen sind.
Kann mir einer von euch sagen wo mein Denkfehler liegt?

Gruß
Gismo

von spess53 (Gast)


Lesenswert?

Hi

>Wenn man nun diese berechnung in das Studio reintippt kommt aber herraus
>das 195857 Tackte vergangen sind.
>Kann mir einer von euch sagen wo mein Denkfehler liegt?

1. Dein Code führt die äussere Schleife 256 mal durch -> ldi r16,255
   vergessen. Dadurch fängt der Simulator mit r16=0 an.

2. Deine Rechnung ist falsch. Wenn ich das simuliere, kommen 195840 
Takte
   heraus. Die Berechnung ist so:

   Takte = (((r17*3)-1)+4)*r16 -> (((255*3)-1)+4)*255=195840

MfG Spess

von Vuvuzelatus (Gast)


Lesenswert?

>Das heißt das, bis die 2. schleife 0 ergibt (255*4)*764 Takte vegangen
>sind oder ?

Nein, 255 · (764 + 4) = 194820 Takte. Man muss bei so nem Zeug immer 
genau aufpassen, was man rechnet, sonst wirds falsch.

Ist übrigens nur ein Ungefährwert. Prinzipiell kannst Du den Wert auf 
den Takt genau ausrechnen, aber dann musst Du berücksichtigen, dass brne 
bei Sprung zwei Takte braucht, aber bei Nichtsprung nur einen.

von Vuvuzelatus (Gast)


Lesenswert?

>Prinzipiell kannst Du...

Wie es mein Vorredner gezeigt hat ;-)

von Lord_Gismo (Gast)


Lesenswert?

Okay jetzt ist der Knoten geplatzt^^ Natürlich ^^ Sorry schäm ich 
danke für die schnelle und entschlossende hilfe .

Gruß
Gismo

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.