mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Takte ausrechnen


Autor: Freak5 (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Philipp Sªsse (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

Autor: Freak5 (Gast)
Datum:

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

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.