Forum: Mikrocontroller und Digitale Elektronik atmega8 interner RC Oszillator mit 8MHz


von Philipp P. (putzer_philipp)


Lesenswert?

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

von Peter D. (pdiener) Benutzerseite


Lesenswert?

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

von Philipp P. (putzer_philipp)


Lesenswert?

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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von Philipp P. (putzer_philipp)


Lesenswert?

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
Noch kein Account? Hier anmelden.