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
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?
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.
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...
> 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
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.
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
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.
Also der Quarz kann definitiv nicht warm werden, es sei denn er wird von einem Bauteil in der Umgebung erwärmt :)
Ich meinte Oszillator nicht Quarz. Quarze habe ich garnicht. Vielleicht sollte ich mir mal welche besorgen.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.