Forum: Mikrocontroller und Digitale Elektronik Simulation beschleunigen? AVR-Studio so langsam


von Thomas Oly (Gast)


Lesenswert?

Hallo,

ich suche nach einer Möglichkeit das debuggen im AVR-Studio zu
beschleunigen. Es ist halt so das wenn man sein Programm im AVR-Studio
laufen lasst die Schleifen sehr langsam ablaufen obwohl ich nen sehr
schnellen Rechner habe. Weiß jemand obs da ne Möglichkeit gibt das
ganze zu beschleunigen, da ich keine Lust mehr habe ständig den AVR neu
zu flashen und dann wieder an Oszi hängen um dann zu sehen es passt
nicht und wieder neu flashen.

Früher gabs ja nen einzelnen Softwaresimulator dieser war wesentlich
schneller wie das im AVR-Studio. Sollte man vielleicht wieder darauf
umsteigen?

von Thomas Oly (Gast)


Lesenswert?

Hallo,

wo wir schon beim Theme Geschwindigkeit sind fallen mir gerade noch 2
Fragen ein.

1.Kann man mit dem STK  500 den Takt verändern damit das Programm
langsammer läuft um z.b. saubere Signale am Oszi zu bekommen?

2. Läßt sich sonst irgendwie ein interner Taktteiler verwenden um den
AVR langsamer laufen zu lassen trotz z.b. eines 8MHz Quarzes? Wie z.b.
bei den Timern.

von Denis Gérard (Gast)


Lesenswert?

moin, also wenn die schleifen als unterroutinen aufgerufen werden kannst
du diese mit F10 step over quasi überspringen

von Thomas Oly (Gast)


Lesenswert?

Hallo,

ja es sind unterroutinen werde das mal probieren. Hat das Verstellen
der MHz Einstellung eine Auswirkung?

von Thomas Oly (Gast)


Lesenswert?

Hallo,

habs jetzt so gelöst einfach ein Semikolon vor die 2te
Verzögerungsschleifen zu setzten. So Springt das Programm nach dem
druchlauf der ersten Schleife weiter. Werde das demnächst mit den
Timern ausprobieren. Damit nicht das ganze Programm gebremst wird.
Obwohl man für so ne simple Impulsfolgenausgabe 58xHigh,
5xLow,58xHigh.... auch einfach nen Billigen AVR nehen kann.

warte120: dec delay4
brne warte120
;dec delay5
;brne warte120

Kann mir jemand sagen welche AT's nen internen Oszillator haben um
eine Schaltung mit möglichst wenigen Bauteilen hinzubekommen (also 5V
anschließen und los) es würden 4 I/O's ausreichen.

von Tobi (Gast)


Lesenswert?

die mega's haben auf jeden fall einen intern drin.
für dich dürfte aber auch ein 1200 reichen der hat glaub ich auch einen
intern

von Thomas Oly (Gast)


Lesenswert?

Hallo,

und ich habe mal irgendwo gelesen das der erst aktiviert werden muss.
Kann man das mit dem STK500 machen da ich mir das auch noch zulegen
will.

von Chris (Gast)


Lesenswert?

Hallo,

Du kannst auch einfach den Programmzähler auf den nächsten Befehl NACH
einer Warteschleife setzen.

Gruß

von Thomas Oly (Gast)


Lesenswert?

Hallo,

kannst du das kurz erklären? Ich hab noch ne andere Möglichkeit
gefunden man setzt einen Breakpoint und läßt das ganze nicht im
Autostepmodus laufen sondern startet mit Run, man muss sich dann halt
immer den µSZähler anschauen und weiß genau wie lange das jetzt
gedauert hat.

von Tobi (Gast)


Lesenswert?

"und ich habe mal irgendwo gelesen das der erst aktiviert werden muss.
Kann man das mit dem STK500 machen da ich mir das auch noch zulegen
will."

ich glaub der ist standardmässig aktiviert. sonst kannst du mit dem
stk500 alles einstellen woran andere programmer verzweifeln. damit ist
man immer auf der sicheren seite (musste mit meinem stk500 auch schon
einige fusebit opfer reanimieren :)

von Chris (Gast)


Lesenswert?

Hallo,

die Sache mit dem Breakpoint bringt auch schon eine Beschleunigung,
wenn man z.B. nur ein Unterprogramm "überspringen" möchte. Alle
Befehle des Unterprogramms werden dabei ausgeführt.

Mein Vorschlag mit dem Vorstellen des Programmzählers ist nur zulässig,
um z.B. die Initialisierung eines LCDs oder eine Warteschleife zu
überspringen, wenn man sie nicht auskommentiert hat. Das darf man aber
nur, wenn sicher ist, daß der übersprungene Programmteil keine
wichtigen Registerinhalte verändert, die danach wieder gebraucht
werden.

Gruß

von Thomas Oly (Gast)


Lesenswert?

Hallo,

also danke nochmal, komme immer besser mit klar, was einige Sachen doch
enorm das Programm beschleunigen. Habe sonst jeden Pin einzeln auf HIGH
gesetzt jetzt mache ich das mit "ser temp" und übergebe das an PortA
"out PortA, temp".

Der 80515 was im STK500 steckt ist doch dazu da die ganze Komikation
zur Zielhardware zu übernehmen oder? Hab mich immer gewunder wie man
mit einer Seriellen Schnittstelle parallel programmieren kann, aber
anscheinend erledigt das der 80515er.

von Rahul (Gast)


Lesenswert?

Man kann ganz einfach über AVR-Studio den Takt des STK500 einstellen:
Siehe Seite 3-20 des Handbuchs

von Henning (Gast)


Lesenswert?

macht euch nen macro debug in dem ein ret ausgeführt wird. das schreibt
ihr an die erste stelle in euren wait routinen.
wollt ihr debuggen steht das ret in der routine; wollt ihr compilen
comentiert ihr das ret aus

von Tobi (Gast)


Lesenswert?

kann man das nicht mit ifdef anweisungen machen?

von Thomas Oly (Gast)


Lesenswert?

Hallo,

da könnte ich aber gleich die Warteroutine ausklammern z.b.
;rcall warte.

Es haut jetzt aber alles schon so hin wie es soll.

Also danke nochmal an alle.

von Henning (Gast)


Lesenswert?

wenn du mehr als einen warteroutinen aufruf hast, wird´s aber lästig
alle einzeln auszuklammern. und im avr kostet es keine resourcen.

hab den thread garnicht richtig gelesen. war nur nen einfall, der bei
mir geholfen hat. :)

von Thomas Oly (Gast)


Lesenswert?

Hallo,

jetzt beim 2ten lesen hab ich verstanden.

von Henning (Gast)


Lesenswert?

ok, war auch wirklich kurz gefasst :)

von Tobi (Gast)


Lesenswert?

@henning:
ifdef anweisungen kosten auch nix an ressourcen und sieht elleganter
aus :)

von Henning (Gast)


Lesenswert?

stimmt, hab grad nachgesehen. als ich mir meinen weg ausgedacht hab
fehlten die ifdef´s im avrstudio noch

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.