Forum: Mikrocontroller und Digitale Elektronik ATmega32U2 läuft in Zeitlupe


von charmquark (Gast)


Lesenswert?

Hi zusammen,

ich habe gerade meinen Atmega32U2 zum laufen gebracht, allerdings 
scheint die Taktrate bei etwa 1s zu liegen. Habe Grundbeschaltung mit 
16MHz Kristall, prgrammierung über AVR Studio 6 und FLIP. Wenn ich das 
Programm
1
#include <avr/io.h>
2
#define F_CPU 16000000UL
3
int main(void)
4
{
5
  DDRC = 0xFF;
6
  PORTC |= (1 << 4);
7
    while(1)
8
    {  
9
    PORTC ^= (1 << 4);
10
    }
11
}

laufen lasse, blinkt die LED an PC4 ungefähr im 5Hz Takt.
Jemand eine Idee, was da schief läuft?

Grüße, Max

von bitte löschen (Gast)


Lesenswert?

Eine Frage, die mir dazu einfällt:
Was sagt Deine JTAGEN Fuse und was die CKSEL-Fuses?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ein 16 MHz Kristall? Wo sind wir hier? In der Schmuckabteilung? An 
elektronische Bauteile kommen Quarze.

Wie soll die "Taktrate" anscheinend bei 1 s liegen, wenn die Led 
ungefähr mit 5 Hz blinkt? Bitte konsistente Angaben zum Fehlerbild 
machen.

von Klaus W. (mfgkw)


Lesenswert?

charmquark schrieb:
> scheint die Taktrate bei etwa 1s zu liegen.

charmquark schrieb:
> blinkt die LED an PC4 ungefähr im 5Hz Takt.

Irgendwie passt das nicht zusammen.
Dann würde der Proz. ja pro Takt 10 Schleifendurchläufe machen.

Lass dir das sofort patentieren!

von Charmquark (Gast)


Lesenswert?

Die 1s sollten nur die größenordnung verdeutlichen. -.-

Die fuse bits kann ich leider mit flip nicht lesen. Ich würde aber 
erwarten, dass sie von werk aus so sein sollten, dass man den uC alleine 
durch programmierung über den bootloader normal verwenden kann.

von Markus V. (dr-greed)


Lesenswert?

Schalt mal den Watchdog-Timer aus

von Klaus W. (mfgkw)


Lesenswert?

Charmquark schrieb:
> Die 1s sollten nur die größenordnung verdeutlichen. -.-

Bei dem bißchen, was du an Info lieferst, sollte wenigstens das stimmen.
Wie soll man dazu etwas spekulieren?

von Werner (Gast)


Lesenswert?

charmquark schrieb:
> blinkt die LED an PC4 ungefähr im 5Hz Takt.

Woran siehst du, dass sie nicht mit 1 MHz blinkt und alle 200ms kurz 
ganz abgeschaltet wird?

von charmquark (Gast)


Lesenswert?

Das ausschalten des Watchdogs führt zum selben Ergebnis. Wenn ich die 
LED nur bei jedem beispielsweise 10ten mal toggle, toggelt sie 
tatsächlich dementsprechend langsamer. Ich denke also nicht, dass das 
Programm abstürzt oder der uC resettet.

von Dr G. Reed (Gast)


Lesenswert?

Vielleicht schwingt der Oszillator nicht korrekt.

Last-Kondensatoren am Quarz vorhanden ?

Abblock-Kondensatoren an den Versorgungs-Anschlüssen ?

von Hubert G. (hubertg)


Lesenswert?

Wenn du die Fuses nicht änderst läuft der Kontroller mit 1MHz.

von Max T. (charmquark)


Lesenswert?

Klaus Wachtler schrieb:
> Charmquark schrieb:
>> Die 1s sollten nur die größenordnung verdeutlichen. -.-
>
> Bei dem bißchen, was du an Info lieferst, sollte wenigstens das stimmen.
> Wie soll man dazu etwas spekulieren?

Ich hätte nicht gedacht, dass bei Sieben Größenordnungen Abweichung vom 
erwarteten die Taktrate auf < 1Hz genauigkeit benötigt wird.

von Max T. (charmquark)


Lesenswert?

Bisher habe ich nur davon gelesen, dass der Chip von Werk aus auf 
externen Quarz eingestellt ist. Selbst wenn er auf 1MHz läuft, müsste 
die LED ja etwa in dem Bereich "blinken", oder?

von Hubert G. (hubertg)


Lesenswert?

So steht es im Datenblatt:
The device is shipped with internal RC oscillator at 8.0 MHz and with 
the fuse CKDIV8 programmed,
resulting in 1.0 MHz system clock. The startup time is set to maximum 
and time-out
period enabled. (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). The default 
setting ensures that
all users can make their desired clock source setting using any 
available programming interface.

von Jonathan M. (jona)


Lesenswert?

Max TBA schrieb:
> Selbst wenn er auf 1MHz läuft

Selbst wenn das so wäre,wie kommt dann bei 16Mhz Quarz ein Takt von 1Hz 
raus?

von Michael (Gast)


Lesenswert?

charmquark schrieb:
> Das ausschalten des Watchdogs führt zum selben Ergebnis.

Dann schick doch mal ein Zeichen über den USART raus und guck dir die 
Bitdauer an. Damit sollte die reale Taktfrequenz doch auch einfach zu 
sehen sein.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich finde, der Watchdog ist eine heiße Spur. Dann blinkt die LED für 
150ms mit etwa 1 MHz und dann startet der uC mit passender 
Reset-Verzögerung neu.

"Messen" wäre da eine geeignete Maßnahme...

von Max T. (charmquark)


Lesenswert?

Lothar Miller schrieb:
> Ich finde, der Watchdog ist eine heiße Spur. Dann blinkt die LED für
> 150ms mit etwa 1 MHz und dann startet der uC mit passender
> Reset-Verzögerung neu.

Wie schon gesagt, wenn ich die LED bei jedem n-ten Schleifendurchlauf 
toggle, toggelt sie tatsächlich n mal so langsam. Und das würde den 
Watchdog ja ausschließen. Ausserdem habe ich inzwischen als allererstes 
im Program den Watchdog ausgeschaltet, ohne änderung.

Michael schrieb:
> Dann schick doch mal ein Zeichen über den USART raus und guck dir die
> Bitdauer an. Damit sollte die reale Taktfrequenz doch auch einfach zu
> sehen sein.

Ich habe leider nichts hier um das auslesen zu können... :-(

Grüße,
Max

von Andi (Gast)


Lesenswert?

Mich hat ein ähnliches Verhalten mal einen Tag gekostet:
mach mal den haken RESET neben Start Aplication weg bei FLIP,
Gruß Andi

von Jojo S. (Gast)


Lesenswert?

wie schon geschrieben wurde: JTAG Fuse kontrollieren. Per Default ist 
das JTAG nämlich eingeschaltet und damit ist PC4 kein normaler IO-Pin!

von Muahahaha (Gast)


Lesenswert?

Mach mal ne Hauptschleife rein.

while(1)
{

bla bla

}

von Muahahaha (Gast)


Lesenswert?

Oh sorry

verguckt

von Jojo S. (Gast)


Lesenswert?

ziehe meinen JTAG Einwand zurück, beim U2 gibts das nicht.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

charmquark schrieb:
> laufen lasse, blinkt die LED an PC4 ungefähr im 5Hz Takt.

Ist das Tastverhältnis 50% (LED an / aus gleich lang)?

von Max T. (charmquark)


Lesenswert?

Magnus M. schrieb:
> charmquark schrieb:
>> laufen lasse, blinkt die LED an PC4 ungefähr im 5Hz Takt.
>
> Ist das Tastverhältnis 50% (LED an / aus gleich lang)?

Jap!

von Max T. (charmquark)


Lesenswert?

Komisch ist, dass wenn ich eine LUFA Demo (VirtualSerial) auf den uC 
spiele, enumeriert er immerhin und wird in Windows richtig erkannt. Und 
alleine, dass das Betriebssystem läuft und er programmierbar ist, 
bedeutet doch, dass der eigentliche Takt richtig, bzw. 1, 8, 16 oder was 
auch immer MHz ist, oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du hast aber schnelle Augen. Sehen 100ms hell und 100ms dunkel...  :-o
Oder müsste das statt 5Hz eher 1/5Hz heissen?

von Michael (Gast)


Lesenswert?

Max TBA schrieb:
> Ich habe leider nichts hier um das auslesen zu können... :-(

Du kannst einfach eine LED mit Vorwiderstand an den TX-Pin hängen. 
Zwischen 0x01, 0x55 und 0xFF muß immer ein deutlicher Unterschied zu 
sehen sein.

von Max T. (charmquark)


Lesenswert?

Michael schrieb:
> Du kannst einfach eine LED mit Vorwiderstand an den TX-Pin hängen

Kommt das dann nicht aufs selbe raus, wie die LED an PC4?

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.