www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega32 Frequenz am Ausgangspin


Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
#include <avr/io.h>

int main(void)
{
  DDRA = 0xFF;

  for(;;) {
    PORTA ^= 1<<PA0;
  }
}

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?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nutzt du denn auch den externen Quarz?

Autor: tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Denke schon.

Der interne wäre doch wohl nur 1 MHz und damit dann eine Frequenz von 1 
MHz erzeugen würde doch garnicht gehn, oder?

Autor: Watn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die angegebenen Zeiten(Takte) stimmen zwar für den Prozessor an sich,
aber stimmen die auch für dein Compilat?

Zeig doch mal was der Compiler daraus macht.

Autor: asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du dir denn schon mal den Assemblercode aungeschut, den der 
Compiler erzeugt hat? Vielleicht sind es doch mehr als 3 Takte die die 
for-Schleife insgesamt braucht... --> 16 Takte?

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich es einstellen dass ich den Assembler Code bekomme, den der 
Compiler erzeugt?

Nutzt den ggc von WinAVR.

Bekomme nur .o, .eep, .hex und .elf.

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IDE ist AVR Studio.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich sind es mehr als 3 Takte.
1 Takt IN
1 Takt EOR
1 Takt OUT
2 Takte Sprung

Außerdem sind für eine komplette Periode 2 Durchläufe nötig, macht also 
mindestens 10 Takte, oder bei 16 MHz eine theoretische maximale 
Ausgangsfrequenz von 1,6 MHz.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tobi schrieb:
> IDE ist AVR Studio.

Dann schau dir das lss-File unter "Other Files" an.

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0000008e <main>:
#include <avr/io.h>

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

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

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tobi schrieb:

> Wie könnte ich denn am Besten eine möglichst schnelle Frequenz an einem
> Ausgangspin erzeugen?

Timer sind deine Freunde

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wie könnte ich denn am Besten eine möglichst schnelle Frequenz an einem
>Ausgangspin erzeugen?

In Assembler.

       ldi r17,0x01
       in r16,PinA
aaa:   eor r16,r17
       out PortA,r16
       rjmp aaa

MfG Spess

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tobi schrieb:

> Gesamt also 6 Takte um den Pin zu tooglen. Wie soll mir da ein Timer
> helfen?

OCR1A = 1;
T1-Modus: clear on compare
OC1A-Pin: toggle on compare

ergibt XTAL / 4


Peter

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht dann aber nur an OC9, OC1A, OC1B und OC2 oder? Die Pins wo ich 
eine relativ hohe Frequenz brauche wären alle an PORTA.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dieser schwinkt auch richtig.
WAS tut der? Schwinken?

Nein, g ist nicht neben k  SCNR ;-)

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-).

Autor: oo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schnelle Frequenz?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Peter Dannegger schrieb:
> OCR1A = 1;
> T1-Modus: clear on compare
> OC1A-Pin: toggle on compare
>
> ergibt XTAL / 4

OCR1A = 0 ergibt XTAL/2...

Gruß aus Berlin
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.