Hallo zusammen, dank Euch habe ich es endlich geschafft meinen ersten Controller zum Laufen zu bringen (ATTiny44 mit AVR Dragon). Eine Sache finde ich allerdings äußerst merkwürdig. Wenn ich das Programm (4 LEDs über Buttons steuern) mit Eclipse (WinAVR) kompiliere und starte, dann reagiert der Controller auf Tastendrücke ohne Verzögerung. Mache ich das ganze mit dem AVR Studio, dauert es mehrere Sekunden bis eine Reaktion erfolgt. Woran kann das liegen?? Der Quellcode ist der gleiche :( Grüße, Alex
Gast
#3429202
F_CPU anders gesetzt?
Der Quellcode ist 1:1 der gleiche...
Gast
#3429390
Die F_CPU wird im meistens im Makefile angegeben. Die sind auch gleich? Bzw. du hast den richtigen Wert im AtmelStudio eingetragen?
Gast
#3429392
Debug Mode im Studio aktiviert ? Fcpu in den projekteinstellungen falsch gesetzt (der Wert im quelltext ist egal)
Gast
#3429395
Wie soll dir den jemand helfen wenn du weder Quellcode noch irgend was anderes lieferst.
Entschuldigung, hier ist schonmal der Quellcode. Ich erstelle das Projekt in der Release Version. Bei Eclipse ist die Frequenz in den Projekteinstellungen mit 1Mhz (1000000) angegeben. Bei AVR Studio finde ich nirgendwo einen Eintrag?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
Gast
#3429463
Alexander Thies schrieb: > AVR Studio welche Version?
Gast
#3429465
>Bei AVR Studio finde ich nirgendwo einen Eintrag?
1 | |
2 | |
3 | |
Nun, die Definition der Taktfrequenz kann auch mit dem Define im Quellcode geschehen. Das ist hier der Fall. Mit Eclipse hast Du 1MHz eingestellt. Mit AVR mit 20MHz. Das hat klarerweise Auswirkungen auf die delays.
Alexander Thies schrieb: > Bei AVR Studio finde > ich nirgendwo einen Eintrag? Und was ist das? > #ifndef F_CPU > #define F_CPU 20000000UL 20 MHz, wenn die CPU real mit 1 MHz löwt, dann dauern alle Delays 20 mal so lange... ...
Es ist AVR Studio 6.1. Im Datenblatt stand, dass sie mit 20Mhz laufen kann. Welchen Wert sollte ich den benutzen, um den µC nicht zu überfordern?
1MHz reichen vollkommen.
Alexander Thies schrieb: > uint8_t Debounce(...) Welch sinnlose Verschwendung von Rechenzeit... > Bei Eclipse ist die Frequenz in den Projekteinstellungen mit 1Mhz > (1000000) angegeben. > ... > #define F_CPU 20000000UL Voll konsistent, dass du im Quelltext 20MHz angibst :-o BTW: welchen Takt hat dein uC? Das sollte überall der selbe Wert sein...
Gast
#3429483
Du solltest genau den Wert in der Software eintragen, mit der der Prozessor tatsächlich auch läuft. Denn der F_CPU-Wert beeinflusst in keinster Weise die tatsächliche Taktfrequenz. Die hängt von den eingestellten Fuses und eines eventuell vorhandenen Quarz ab. Oliver
Gast
#3429485
Alexander Thies schrieb: > Es ist AVR Studio 6.1. Im Datenblatt stand, dass sie mit 20Mhz laufen > kann. Welchen Wert sollte ich den benutzen, um den µC nicht zu > überfordern? F_CPU bestimmt NICHT wie schnell der uC läuft F_CPU gibt deinem Programm einen hinweis wie schnell du meinst, dass der uC läuft. Die tatsächliche Geschwindigkeit hängt von deinen Fuses ab (intern, extern, Quarz, Oszillator, CLKDIV8, etc) und je nachdem von deiner Beschaltung.
Lothar Miller schrieb: > Alexander Thies schrieb: >> uint8_t Debounce(...) > Welch sinnlose Verschwendung von Rechenzeit... Ich weiß es leider nicht besser...Tipps? > Alexander Thies schrieb: >> Wenn ich das Programm (4 LEDs über Buttons steuern) mit Eclipse (WinAVR) >> kompiliere und starte, > Worauf startest du das Programm? ATTiny44A > Alexander Thies schrieb: >> Bei Eclipse ist die Frequenz in den Projekteinstellungen mit 1Mhz >> (1000000) angegeben. >> ... >> #define F_CPU 20000000UL > Voll konsistent, dass du im Quelltext 20MHz angibst :-o > BTW: welchen Takt hat dein uC? > Das sollte überall der selbe Wert sein... Die Einstellungen bei Eclipse stammen nicht von mir, die habe ich gerade eben gefunden. Ich habe lediglich die F_CPU Definition vorgenommen
Maxx schrieb: > Alexander Thies schrieb: >> Es ist AVR Studio 6.1. Im Datenblatt stand, dass sie mit 20Mhz laufen >> kann. Welchen Wert sollte ich den benutzen, um den µC nicht zu >> überfordern? > > F_CPU bestimmt NICHT wie schnell der uC läuft > F_CPU gibt deinem Programm einen hinweis wie schnell du meinst, dass der > uC läuft. > > Die tatsächliche Geschwindigkeit hängt von deinen Fuses ab (intern, > extern, Quarz, Oszillator, CLKDIV8, etc) und je nachdem von deiner > Beschaltung. Also wenn der interne Oszillator mit 8Mhz läuft, und durch das Fusebit der Takt nochmal durch 8 geteilt wird, ist dann 1Mhz der richtige Takt für den µC?
Optimierung eingeschaltet?
Gast
#3429493
Am besten ist du findest erstmal raus mit welcher Frequenz dein Chip läuft. Meistens sind die Grundeinstellungen 1Mhz oder 8Mhz, das steht im Datenblatt. Wenn du in den > 500 Seiten nicht suchen möchtest, ist es am einfachsten ein Blink-Programm zu schreiben und F_CPU zu variieren. Wenn die eingestellte Wartezeit mit der realen Zeit übereinstimmt hast du die richtige Frequenz gefunden.
Falk Brunner schrieb: > Optimierung eingeschaltet? Optmierung steht auf O1..nachdem ich F_CPU auf 1Mhz gesetzt habe, läuft es besser :) Danke.
Alexander Thies schrieb: > Also wenn der interne Oszillator mit 8Mhz läuft, und durch das Fusebit > der Takt nochmal durch 8 geteilt wird, ist dann 1Mhz der richtige Takt > für den µC? Ja, ist er. Du kannst das auch ganz leicht testen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Wenn der Wert für F_CPU korrekt ist, UND NUR DANN, dann blinkt deine LED mit 1 Sekunde an/aus. Sprich dann sind die 1000 Millisekunden in _delay_ms auch wirklich 1000 Millisekunden (1 Sekunde). Würde dein µC tatsächlich 8 mal schneller laufen (mit 8Mhz) dann ist auch das Blinken 8 mal schneller. Das siehst du mit freiem Auge. Damit die 1000 Millisekunden wieder real 1 Sekunde dauern, müsstest du dann F_CPU auf 8000000 stellen, damit es wieder der Realität der Taktfrequenz deines µC entspricht. Stellst du umgekehrt die F_CPU auf 8000000, taktet der µC aber tatsächlich nur mit 1Mhz, dann ist das Blinken 8 mal langsamer. Anstatt alle 1 Sekunden, dauert es 8 Sekunden bis die LED aus geht bzw. wieder eingeschaltet wird. Und auch das sieht man mit freiem Auge. Nur dann, wenn F_CPU tatsächlich mit dem übereinstimmt, wie schnell der µC wirklich getaktet wird, dann stimmen die Verzögerungen, die _delay_ms anhand des Wertes von F_CPU für eine Millisekunde berechnet auch (einigermassen) mit der Realität einer Millisekunde überein.
Super. Vielen Dank!
-> Es ist immer gut, wenn man auch versteht, was die einzelnen Dinge in einem Programm tun und wie sie zusammenhängen. Genau aus dem Grund sind die ersten Übungen mit dem µC diverse LED Blink Programme. Man kann mit ihnen viel mehr lernen als das da einfach nur eine LED blinkt. Ganz im Gegenteil, dass die LED was macht, ist eine nette Zugabe. In Wirklichkeit geht es bei all diesen Übungen um ganz andere Dinge, die LED (oder LEDs) sind nur der Aufhänger, damit man Spass am Experimentieren hat und sich was an der Schaltung tut.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.