Forum: Mikrocontroller und Digitale Elektronik Atmega8 falscher takt


von Sebastian (Gast)


Lesenswert?

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?

von Severino R. (severino)


Lesenswert?

- an Deinem Messgerät (Marke, Modell?)
- am ATmega8
- an Dir
- am Programm (ev. Sourcecode posten?)

von Sebastian (Gast)


Lesenswert?

#include <avr/io.h>

int main(void)
{
   //Ports initialisieren
   DDRD = 0xFF;

   while(1)
  {
   PORTD = 0x00;
   PORTD = 0xFF;
  }
}

von DerSchelm (Gast)


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Alle Controller, bis auf wenige Ausnahmen (Tinys), laufen ab Fabrik mit 
1Mhz internem Oszillator.

von Kai G. (runtimeterror)


Lesenswert?

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

von I_ H. (i_h)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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

von Kai G. (runtimeterror)


Lesenswert?

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
Noch kein Account? Hier anmelden.