hallo allerseits, ich möchte gerne einen Atmega8 zum dekodieren von RC5 Signale verweden. am Evalboard mit 16MHz hats auch einwandfrei geklappt. Den AVR möchte ich mit 4MHz intern Takten, das sollte er laut DB und den Fuse die ich im AVR Studio einstellen kann auch können, oder? Jedenfalls hab ich mir durch PORT^=(1<<PC2) in einer for(;;)-Schleife die Frequenz ausgegeben, diese liegt bei z.b. 8MHz(Einstellung) bei gerade einem MHZ(Messung). Ich habe die Pulspause gemessen und halt umgerechnet, bei dem Toggeln war ja was mit Faktor 2... komich, oder? ich mess den völlig falschen Wert und ich weiß nicht warum. Und das Programm für den RC5 Dekoder läuft auch nicht? Mach ich da was falsch, oder ist schlicht und einfach der µC hinüber? Gruß und vielen Dank für die Hilfe Philipp
Schau dir den Code mal im Simulator vom AVR-Studio an, dort kannst du genau ausmessen, wie lang die For-Schleife zum Durchlauf braucht. Alternativ kannst du die Maschinenzyklen auch in Assemblerfile zählen. Es kann schon sein, dass ein Schleifendurchlauf 4 Zyklen braucht. Für ein Toggle muss der Port in ein Register geladen werden (1 Zyklus), dann ein Bit dort invertiert werden (1 Zyklus), dann das Register auf den Port raus schreiben (1 Zyklus) und dann der Sprung an die Stelle, wo das Ganze von vorn los geht (1 Zyklus). Wie du schon gesagt hast, der Faktor 2 (wegen dem Toggeln) geht auch noch in die Frequenz ein. So ist es doch realistisch, dass bei 8 MHz Takt 1 MHz am Port zu sehen ist. Grüße, Peter
den avr kann ich jetzt nicht so konfigurieren, dass er mir den Takt an einem Pin XOUT oder so ausgibt? ich schau mir mal den assembler-Code an, danke für die Idee Also, des macht für die Schleife plus toggln 4 Befehle (lesen, comp, schreiben und jump zum schleifenbeginn) Wenn ich 8MHZ habe, dann sehe ich am Port 8MHz/4/2 = 1MHz, oder?
Philipp Putzer schrieb: > Also, des macht für die Schleife plus toggln 4 Befehle (lesen, comp, > schreiben und jump zum schleifenbeginn) Wenn man den Optimierer beim Kompilieren benutzt, 5 Befehle bei meinem älteren GCC (die Konstante (1<<PC2) = 0x04 muss noch in ein Register geladen werden):
1 | +00000030: B385 IN R24,0x15 In from I/O location |
2 | +00000031: E094 LDI R25,0x04 Load immediate |
3 | +00000032: 2789 EOR R24,R25 Exclusive OR |
4 | +00000033: BB85 OUT 0x15,R24 Out to I/O location |
5 | +00000034: CFFB RJMP PC-0x0004 Relative jump |
> Wenn ich 8MHZ habe, dann sehe ich am Port 8MHz/4/2 = 1MHz, oder?
Im Beispiel oben 8/5/2 = 800 kHz
super, danke für die erklärung, das erklärts. Vielen Dank für die Hilfe gruß philipp
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.