Forum: Mikrocontroller und Digitale Elektronik Takte ausrechnen


von Freak5 (Gast)


Lesenswert?

Ich habe meinen ATmega16 auf den externen Oszillator eingestellt,welcher
auf 16Mhz läuft, indem ich mit Ponyprog alle Haken bei CKopt und CKsel
0-3 entfernt habe.

Dann habe ich die folgende Schleife durchlaufen lassen, welche um die
18s für einen Durchlauf benötigte.

Ich komme aber beim Ausrechnen der Takte nie auf eine ausreichend hohe
Taktzahl, welche diese Laufzeit rechtfertigen würde.

(255*3+4)*255  ~196 000

Die innere Schleife läuft 255 mal durch. Sie braucht drei Takte (dec
+BRNE) dahinzu kommen nocheinmal ldi, dec und ein Weiteres BRNE. Das
alles zusammen läuft wieder 255 mal ab.
Ich müsste aber als Ergebnis mindestens 18Millionen Takte haben, damit
18s selbst bei einem Takt von 1Mhz gerechtfertigt wären.

Woran liegt das?
(ich denke, dass push, pop, call, ret und das Schalten der LED nicht so
ins Gewicht fallen, oder?)

VerzKur:
push r16
push r17

ldi r16, 255
Schlkr16:
  ldi r17,255
  Schlkr17:



  dec r17
  BRNE Schlkr17

dec r16
BRNE Schlkr16

pop r17
pop r16
ret

von Freak5 (Gast)


Lesenswert?

Mir fällt gerade etwas auf:
Kann es sein, dass ich CKsel 0-3 auf 1 setzten muss?
Warum funktioniert das jetzt denn? Der müsste doch jetzt als
Keramikresonator laufen?

von Jens (Gast)


Lesenswert?

Woher kommen die 18s? Hast du dein Prog im Avr Studio laufen lassen und
hast die zeit mit deiner Stopuhr (nicht die in AVR Studio integrierte
Uhr) gemssen? Dann ist es klar, der Simulator ist wesentlich langsamer
als die Hardware. Im übrigen zeigt dir doch AVR Studio die Anzahl der
Takte an.

von Freak5 (Gast)


Lesenswert?

Ich habe das im AVR laufen lassen und die Sekunden gezählt. Deshalb habe
ich auch eine relativ große Schleife genommen. Als der absolut nicht
umschalten wollte habe ich einfach die Schleife verkürzt und gemerkt,
dass diese absolut langsam läuft. Das mit dem Simulator ist mir
bekannt.
Ich habe die Fuses kurzzeitig alle gesetzt. Irgendwie hat das dem AVR
nicht gut getan. Wenn ich jetzt PortD Pin6(ganz unten links) abschalte,
dann geht Pin 5 an. Das ist irgendwie komisch finde ich...

von Philipp Sªsse (Gast)


Lesenswert?

> Das mit dem Simulator ist mir bekannt.

Ja ... und? Wieviel Takte/Sekunden zeigt er in der Simu an? Wäre doch
schon einmal ein nützlicher Hinweis.

Ansonsten: Fuse gesetzt = 0, nicht gesetzt = 1

von Freak5 (Gast)


Lesenswert?

Ich habe das jetzt einfach so programmiert, dass PortD 5 und 6 synchron
laufen müssten
LDI r16, 0xFF
out DDRD, r16

LDI r16, 0b00000000
out PortD, r16

Schleife:
ser r16
out portd, r16


call VerzL
clr r16
out portd, r16
call VerzL

jmp Schleife

Das gibt eine tolle ampel. Mit dem internen 8Mhz Oszillator(CKsel 0-3
einen Haken und CKsel 2 ohne) blinkt das auch verdammt schnell.

von Freak5 (Gast)


Lesenswert?

Das gibt die gleiche Ampel, aber wenn ich anstatt Pin6 Pin5 schalte,
dann  geht die LED von Pin5 einmal an und nie wieder aus.

LDI r16, 0xFF
out DDRD, r16

LDI r16, 0b00000000
out PortD, r16

Schleife:
sbi PortD, 6


call VerzL
cbi PortD,6
call VerzL

jmp Schleife

von Freak5 (Gast)


Lesenswert?

Ich habe einfach mal mit einem Multimeter die Ausgangsspannung vom Quarz
gemessen. Ist 1.2V OK?
Eigenartig ist nämlich, dass der 7805 verdammt warm wurde und der Quarz
war auch nicht soo kalt.

von Jens (Gast)


Lesenswert?

Also der Quarz kann definitiv nicht warm werden, es sei denn er wird von
einem Bauteil in der Umgebung erwärmt :)

von Freak5 (Gast)


Lesenswert?

Ich meinte Oszillator nicht Quarz.
Quarze habe ich garnicht. Vielleicht sollte ich mir mal welche
besorgen.

von Freak5 (Gast)


Lesenswert?

Ich habe jetzt einen anderen ATmega16 eingesetzt. Dieser hat kein
Problem mit dem Pin5 an PortD. Heist das, dass ich durch das setzten
falscher Fuses meinen ATmega verschrottet habe?

von Freak5 (Gast)


Lesenswert?

OK, ich habe mich irgendwie verlötet, das dazu geführt hat, das Xtal1 in
der Luft herumflog und GND mit Out verbunden war. Ich wundere mich, wie
bei der Konstruktion ein Takt zustande gekommen ist.
Der eine Pin hat es trotztdem nicht überlebt :-(

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.