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
intmain(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
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.
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!
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.
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?
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?
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.
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.
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?
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.
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.
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...
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
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!
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?
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.