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
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.
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.