Hallo, ich hab ein Atmega8 und hab einen internen Takt von 1MHz eingestellt. Dann hab ich die Pins einfach ein und ausgeschaltet und mess nur einen Takt von 3kHz. Das gleiche hab ich auch, wenn ich einen externen Quartz mit 3MHz benutze, dort mess ich nur ca. 7kHz. Woran kann das liegen?
- an Deinem Messgerät (Marke, Modell?) - am ATmega8 - an Dir - am Programm (ev. Sourcecode posten?)
#include <avr/io.h> int main(void) { //Ports initialisieren DDRD = 0xFF; while(1) { PORTD = 0x00; PORTD = 0xFF; } }
Eine Schleife braucht erheblich länger als Du denkst. Schau mal ins Datenblatt, wie lange so ein einzelner Befehl braucht. Und dann schaust Du ins LST-File, wie viele Assembler-Befehle in Deiner Schleife abgearbeitet werden, ich denke, dann wirst Du sehen, warum Du nicht auf Deine 1MHz kommen kannst. Du siehst einen Ausgabetakt von wenigen kHz, das ist dann natürlich immer noch zu wenig. Schau Dir mal die Fuses an, ob Du den externen Takt nochmals runtertaktest (ClockSelect wäre das Stichwort). Ich weiß jetzt nicht auswendig, was der mega8 defaultmäßig eingestellt hat.
Alle Controller, bis auf wenige Ausnahmen (Tinys), laufen ab Fabrik mit 1Mhz internem Oszillator.
Bei einem internen Takt von 1 MHz und gemessenen 7 kHz braucht die Schleife anscheinend 143 Taktzyklen... so doof kann sich ein compiler eigentlich nicht anstellen ;) Womit misst du eigentlich den Takt? Nicht jedes Gerät arbeitet in dieser Größenordnung zuverlässig. Im Zweifel mal das Oszilloskop befragen. Vielleicht hilft dir der Beitrag hier weiter: Beitrag "Re: Mega16, Fusebits und Quarz Probleme." Gruß Kai
Die Schleife hat (wenn's nicht grad mit -O0 compiliert wurde) ca. 5 Takte, also sollten ungefähr 200kHz rauskommen. Die einzelnen Zuweisungen sind in einem Takt erledigt.
Kann das sein das der Takt durch den Inhalt im Oscillator Calibration Register geteilt wird, auch wenn der externe Quartz angeschlossen ist? Wenn ja, wie kann ich den Inhalt in dem Register ändern?
Leute das kann nich sein da muesste nen viel hoeherer Takt rauskommen so oder so. Ich meine mich zu erinnern einige MHz auf die Art gemessen zu haben, aber sicherlich mehr als nur ein paar KHz selbst wenn das Ding nur mit einem MHz internem Takt laeuft! Muss also am Messgeraet oder an falschen Fuses liegen, z.B. ma auf externen Takt gestellt aber keinen Oszillator dran? Ist dieser Takt denn stabil? Mit was hast Du denn gemessen? Oszi? Michael
Bitte mal die Fuses schicken oder einen fabrikneuen Mega8 einsetzen, an dem noch nichts umgestellt wurde. Wenn der tut ist der andere wahrscheinlich falsch konfiguriert... dann musst du eigentlich nur noch den Unterschied suchen. Wenn der fabrikneue auch nicht tut, dann würde ich noch das Eval-Board testen und ganz wichtig: Wie und womit misst du die Frequenz?? Um die Fuses auszulesen kannst du Ponyprog verwenden - tut bei uns wunderbar.
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.