Forum: Compiler & IDEs LED blinkt nicht im Takt der Simulation


von Werner D. (dorni)


Angehängte Dateien:

Lesenswert?

Hallo, wer kennt dieses Dilema?

Ich verwende AVR Studio 4. Das simple Programm soll lediglich eine LED 
blinken lassen.
Dies tut es auch. Jedoch weich die Simulation von dem tatsächlichen 
Ergebnis erheblich ab.

Prozessor: Atmega16
Fusebit mit PonyProg200 eingestellt. Es wurde kein Fusebit gesetzt und 
ich gehe nun davon aus, das der Prozessor mit der Quarzfrequenz (8 MHz) 
betrieben wird.
In der Einstellung "AVR Simulation Options" wurde 8 MHz eingetragen.

In der Schaltung blinkt die LED nun ca. im 0.5 s Takt, während in der 
Simulation das Takten etwa 20 s dauert.
Was ist hier falsch?

Gruß Werner

von winne (Gast)


Lesenswert?

die simulation ist zu lahm

Das kann sinnvoll sein um die Vorgänge darstellen zu können, muss es 
aber nicht. Es kann auch einfach scheißlahm sein. Schau mal ob du den 
Simulationstakt erhöhen kannst. Ich glaube bei AVRSTUDIO war da mal bei 
4MHz Ente Trente.

von Daniel D. (bademeister)


Lesenswert?

Mit 20s in der Simulation meinst du die Zeit, die das Programm simuliert 
benötigt hat um zu togglen?

Die Zeit kannst du aber nicht als Grundlage für die Realität nehmen, 
denn die Simulation findet nicht in Echtzeit statt, sondern wie du in 
deinem Fall siehst etwa 40 mal langsamer. Du kannst die Zeit in dem Feld 
"processor -> cycle counter" entnehmen. Dort stehen die bis dato 
gemachten cycles. Multiplizierst du das mit dem Takt dann hast du deine 
Zeit.

Und der AVR wird höchstwahrscheinlich nur mit 1MHZ laufen, denn der ist 
im Auslieferungszustand auf den internen RC-Oszi gestellt.

von Werner D. (dorni)


Lesenswert?

Danke für Eure Hilfe.

Bei diesem Programm und per Definition

_delay_ms(1000)

die LED 1 Sekunde an und 1 Sekunde aus. Das Programm führt somit zum 
gewünschten Ergebnis.

Bei der Simulation steht der Befehlszeiger stets in der While(1) 
Schleife am Befehl PORTD ^= ( 1 << PB5 );

Im Fenster I/O View wechselt der Zustand des entsprechenden I/O-Ports. 
Jedoch dauert dieser Wechsel ca. 50 Sekunden.
Und nun frage ich mich, was dauert hier so lange??
Bei einem Delay von 20 ms wechselt der Output-Pin (in der Simulation) 
etwa im Sekundentakt!

von M. M. (miszou)


Lesenswert?

Hi

schau dir mal die "_delay_ms()" genauer an. Im AVR-GCC-Tutorial hab ich 
das hier "delay_ms(50);  // max. 262.1 ms / F_CPU in MHz" gefunden.

Gruß MISZOU

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.