mikrocontroller.net

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


Autor: Lordi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
timer_1h:

  ldi r20,0x03
h_1_4:
  ldi r19,0xff  
h_1_3:  
  ldi r18,0xff
h_1_2:
  ldi r16,0xff
h_1_1:  
  ldi r17,0xff
start_1:  
  dec r17
  brne start_1
  dec r16 
  brne h_1_1
  dec r18
  brne h_1_2
  dec r19
  brne h_1_3
  dec r20
  brne h_1_4
  

  ldi r18,0xff
h_2_1:  
  ldi r17,0xff
h_2_2:
  ldi r16,0xff
start_2:
  dec r16
  brne start_2
  dec r17
  brne h_2_2 
  dec r18
  brne h_2_1

  
  ldi r16,0x67
start_3:
  dec r16
  brne start_3
  ret  

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du beim Simulator auch die richtige Frequenz eingestellt ?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lord_Gismo (Gast)
Datum:

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

Wenn ich die erste Schleife
start_1:  
  dec r17
  brne start_1

braucht er pro durchlauf 764 Tackte
soweit so gut nun kommt die dazugehörige 2. Schleife
h_1_1:  
  ldi r17,0xff
start_1:  
  dec r17
  brne start_1
  dec r16 
  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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Vuvuzelatus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vuvuzelatus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Prinzipiell kannst Du...

Wie es mein Vorredner gezeigt hat ;-)

Autor: Lord_Gismo (Gast)
Datum:

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

Gruß
Gismo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.