mikrocontroller.net

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


Autor: Werner Dornstädter (dorni)
Datum:
Angehängte Dateien:

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

Autor: winne (Gast)
Datum:

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

Autor: Daniel D. (bademeister)
Datum:

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

Autor: Werner Dornstädter (dorni)
Datum:

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

Autor: M. M. (miszou)
Datum:

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

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.