atmega32 Frequenz am Ausgangspin

Gast #1317630
Lesenswert?

Hallo,

ich habe einen ATmega32 mit einem 16 MHz Quarz. Dieser schwinkt auch 
richtig.

Sollte folgende Schleife dann nicht mehr als 1 MHz am Ausgang erzeugen?
1
#include <avr/io.h>
2

3
int main(void)
4
{
5
  DDRA = 0xFF;
6

7
  for(;;) {
8
    PORTA ^= 1<<PA0;
9
  }
10
}

Mein Oszi sagt mit 999.822 kHz. Es wird doch zum Setzen des Ports nur 1 
Takt benötigt und 2 Takte für den Rücksprung der Schleife. Das müsste 
dann doch mehr als 1 MHz sein, oder?
Gast #1317681
Lesenswert?

1
0000008e <main>:
2
#include <avr/io.h>
3

4
int main(void)
5
{
6
  8e:  cf e5         ldi  r28, 0x5F  ; 95
7
  90:  d8 e0         ldi  r29, 0x08  ; 8
8
  92:  de bf         out  0x3e, r29  ; 62
9
  94:  cd bf         out  0x3d, r28  ; 61
10
  DDRA = 0xFF;
11
  96:  8f ef         ldi  r24, 0xFF  ; 255
12
  98:  80 93 3a 00   sts  0x003A, r24
13

14
  for(;;) {
15
    PORTA ^= 1<<PA0;
16
  9c:  80 91 3b 00   lds  r24, 0x003B
17
  a0:  91 e0         ldi  r25, 0x01  ; 1
18
  a2:  89 27         eor  r24, r25
19
  a4:  80 93 3b 00   sts  0x003B, r24
20
  a8:  f9 cf         rjmp  .-14       ; 0x9c <main+0xe>

Wie könnte ich denn am Besten eine möglichst schnelle Frequenz an einem 
Ausgangspin erzeugen?
Gast #1317705
Lesenswert?

Aber das Problem mit dem Umschalten des Pins würde doch da immernoch 
bestehen.

ldi = 1 Takt
lds = 2 Takte
eor = 1 Takt
sts = 2 Takte

Gesamt also 6 Takte um den Pin zu tooglen. Wie soll mir da ein Timer 
helfen?
Gast #1317989
Lesenswert?

Na, ich winge Dir mal herzlich zu ;-).

PWM oder TIMER peripherals benutzen und im HW-Design Deine Anforderung 
entsprechend berücksichtigen. Wieviel Megaherzen und in welcher 
Genauigkeit hättest Du es denn überhaupt gerne, soll das veränderbar per 
SW oder fix sein ?

Per portpin-toggle SW geht es dann am schnellsten in asm, aber dann kann 
Dein uC auch nix anderes mehr machen als portpins ein+aus, damit es in 
Echtzeit passt...
Möglichst single-cycle befehle für ein+ausknipsen der pins/ports 
raussuchen und das in shcnellstem loop-konstrukt machen...

Tschüss und winge, winge aus Berling, Tom ;-).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren